diff --git a/lib/docuseal.rb b/lib/docuseal.rb index 23c02271..e4fee8f7 100644 --- a/lib/docuseal.rb +++ b/lib/docuseal.rb @@ -88,6 +88,10 @@ module Docuseal true end + def pdf_format + @pdf_format ||= ENV['PDF_FORMAT'].to_s.downcase + end + def trusted_certs @trusted_certs ||= ENV['TRUSTED_CERTS'].to_s.gsub('\\n', "\n").split("\n\n").map do |base64| diff --git a/lib/submissions/generate_audit_trail.rb b/lib/submissions/generate_audit_trail.rb index 51d3e190..3b74244d 100644 --- a/lib/submissions/generate_audit_trail.rb +++ b/lib/submissions/generate_audit_trail.rb @@ -81,7 +81,12 @@ module Submissions end composer = HexaPDF::Composer.new(skip_page_creation: true) - composer.document.task(:pdfa) if FONT_NAME == 'GoNotoKurrent' + + if Docuseal.pdf_format == 'pdf/a-3b' + composer.document.task(:pdfa, level: '3b') + elsif FONT_NAME == 'GoNotoKurrent' + composer.document.task(:pdfa) + end composer.document.config['font.map'] = { 'Helvetica' => { diff --git a/lib/submissions/generate_combined_attachment.rb b/lib/submissions/generate_combined_attachment.rb index 4caa2104..715e7a18 100644 --- a/lib/submissions/generate_combined_attachment.rb +++ b/lib/submissions/generate_combined_attachment.rb @@ -17,6 +17,11 @@ module Submissions pdf.trailer.info[:Creator] = "#{Docuseal.product_name} (#{Docuseal::PRODUCT_URL})" + if Docuseal.pdf_format == 'pdf/a-3b' + pdf.task(:pdfa, level: '3b') + pdf.config['font.map'] = GenerateResultAttachments::PDFA_FONT_MAP + end + if pkcs sign_params = { reason: Submissions::GenerateResultAttachments.single_sign_reason(submitter), diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb index 2891a424..2bf879e9 100644 --- a/lib/submissions/generate_result_attachments.rb +++ b/lib/submissions/generate_result_attachments.rb @@ -30,6 +30,13 @@ module Submissions bold_italic: FONT_BOLD_ITALIC_NAME }.freeze + PDFA_FONT_VARIANS = { + none: FONT_NAME, + bold: FONT_BOLD_NAME, + italic: FONT_NAME, + bold_italic: FONT_BOLD_NAME + }.freeze + SIGN_REASON = 'Signed by %s with DocuSeal.com' RTL_REGEXP = TextUtils::RTL_REGEXP @@ -48,6 +55,13 @@ module Submissions 'Courier' => 1.6 }.freeze + PDFA_FONT_MAP = { + FONT_NAME => PDFA_FONT_VARIANS, + 'Helvetica' => PDFA_FONT_VARIANS, + 'Times' => PDFA_FONT_VARIANS, + 'Courier' => PDFA_FONT_VARIANS + }.freeze + MISSING_GLYPH_REPLACE = { '▪' => '-', '✔️' => 'V', @@ -599,6 +613,11 @@ module Submissions pdf.trailer.info[:Creator] = info_creator + if Docuseal.pdf_format == 'pdf/a-3b' + pdf.task(:pdfa, level: '3b') + pdf.config['font.map'] = PDFA_FONT_MAP + end + sign_reason = fetch_sign_reason(submitter) if sign_reason && pkcs