optimize decrypt
This commit is contained in:
+3
-9
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user