2024-01-14 23:22:41 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
|
|
module PdfUtils
|
|
|
|
|
module_function
|
|
|
|
|
|
|
|
|
|
def encrypted?(data, password: nil)
|
|
|
|
|
HexaPDF::Document.new(io: StringIO.new(data), decryption_opts: { password: })
|
|
|
|
|
|
|
|
|
|
false
|
|
|
|
|
rescue HexaPDF::EncryptionError
|
|
|
|
|
true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def decrypt(data, password)
|
|
|
|
|
encrypted_doc = HexaPDF::Document.new(io: StringIO.new(data), decryption_opts: { password: })
|
|
|
|
|
|
|
|
|
|
decrypted_doc = HexaPDF::Document.new
|
|
|
|
|
|
|
|
|
|
encrypted_doc.pages.each do |page|
|
|
|
|
|
decrypted_doc.pages << decrypted_doc.import(page)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
decrypted_io = StringIO.new
|
|
|
|
|
|
|
|
|
|
decrypted_doc.write(decrypted_io, validate: false)
|
|
|
|
|
|
|
|
|
|
decrypted_io.tap(&:rewind).read
|
|
|
|
|
end
|
2024-07-10 01:42:10 +03:00
|
|
|
|
|
|
|
|
def merge(files)
|
|
|
|
|
merged_pdf = HexaPDF::Document.new
|
|
|
|
|
|
|
|
|
|
files.each do |file|
|
|
|
|
|
pdf = HexaPDF::Document.new(io: file)
|
|
|
|
|
pdf.pages.each { |page| merged_pdf.pages << merged_pdf.import(page) }
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
merged_content = StringIO.new
|
2025-06-11 17:52:08 +03:00
|
|
|
merged_pdf.validate(auto_correct: true)
|
|
|
|
|
merged_pdf.write(merged_content, validate: false)
|
2024-07-10 01:42:10 +03:00
|
|
|
merged_content.rewind
|
|
|
|
|
|
|
|
|
|
merged_content
|
|
|
|
|
end
|
2024-01-14 23:22:41 +02:00
|
|
|
end
|