From 113b61588b768ea169562b3fedbf15080e497893 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Thu, 20 Aug 2026 13:21:24 +0300 Subject: [PATCH] process pdf from doc --- app/jobs/generate_preview_images_job.rb | 17 ----------------- lib/templates/process_document.rb | 18 +++++++++++++----- 2 files changed, 13 insertions(+), 22 deletions(-) delete mode 100644 app/jobs/generate_preview_images_job.rb diff --git a/app/jobs/generate_preview_images_job.rb b/app/jobs/generate_preview_images_job.rb deleted file mode 100644 index 289b5fcf..00000000 --- a/app/jobs/generate_preview_images_job.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -class GeneratePreviewImagesJob - include Sidekiq::Job - - sidekiq_options queue: :images - - def perform(params = {}) - attachment = ActiveStorage::Attachment.find(params['attachment_id']) - - max_page = [attachment.metadata['pdf']['number_of_pages'].to_i - 1, - Templates::ProcessDocument::MAX_NUMBER_OF_PAGES_PROCESSED].min - - Templates::ProcessDocument.generate_document_preview_images(attachment, attachment.download, 1..max_page, - concurrency: 1) - end -end diff --git a/lib/templates/process_document.rb b/lib/templates/process_document.rb index 74fdf56f..2d60665e 100644 --- a/lib/templates/process_document.rb +++ b/lib/templates/process_document.rb @@ -41,16 +41,24 @@ module Templates attachment end - def process(attachment, data, extract_fields: false) + def process(attachment, data, extract_fields: false, doc: nil) if attachment.content_type == PDF_CONTENT_TYPE && extract_fields && data.size < MAX_FLATTEN_FILE_SIZE - pdf = HexaPDF::Document.new(io: StringIO.new(data)) + if doc + fields = Templates::FindPdfiumAcroFields.call(attachment, doc, data) + else + pdf = HexaPDF::Document.new(io: StringIO.new(data)) - fields = Templates::FindAcroFields.call(pdf, attachment, data) + fields = Templates::FindAcroFields.call(pdf, attachment, data) + end end - pdf ||= HexaPDF::Document.new(io: StringIO.new(data)) + if doc + number_of_pages = doc.page_count + else + pdf ||= HexaPDF::Document.new(io: StringIO.new(data)) - number_of_pages = pdf.pages.size + number_of_pages = pdf.pages.size + end attachment.metadata['pdf'] ||= {} attachment.metadata['pdf']['number_of_pages'] = number_of_pages