optimize decrypt

This commit is contained in:
Pete Matsyburka
2026-08-15 19:08:52 +03:00
parent 185827c951
commit df63acf0c8
2 changed files with 7 additions and 10 deletions
+3 -9
View File
@@ -15,17 +15,11 @@ module PdfUtils
end end
def decrypt(data, password) 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_io = StringIO.new
decrypted_doc.write(decrypted_io, validate: false) Pdfium::Document.open_bytes(data, password) do |doc|
doc.save(decrypted_io, flags: Pdfium::FPDF_REMOVE_SECURITY)
end
decrypted_io.tap(&:rewind).read decrypted_io.tap(&:rewind).read
end end
+4 -1
View File
@@ -444,6 +444,7 @@ class Pdfium
}.freeze }.freeze
class PdfiumError < StandardError; end class PdfiumError < StandardError; end
class PasswordError < PdfiumError; end
def self.error_message(code) def self.error_message(code)
PDFIUM_ERRORS[code] || "Unknown error code: #{code}" PDFIUM_ERRORS[code] || "Unknown error code: #{code}"
@@ -512,7 +513,9 @@ class Pdfium
return if error_code == FPDF_ERR_SUCCESS return if error_code == FPDF_ERR_SUCCESS
raise PdfiumError, "#{context_message}: #{error_message(error_code)} (Code: #{error_code})" error_class = error_code == FPDF_ERR_PASSWORD ? PasswordError : PdfiumError
raise error_class, "#{context_message}: #{error_message(error_code)} (Code: #{error_code})"
end end
# rubocop:disable Metrics # rubocop:disable Metrics