From f69dcf77de8a2fd25283b61c05f5d2b465f4967a Mon Sep 17 00:00:00 2001 From: Alex Turchyn Date: Thu, 19 Dec 2024 14:50:55 +0200 Subject: [PATCH] set field alignment from PDF form field preferences --- config/initializers/hexapdf.rb | 6 ++++++ lib/templates/find_acro_fields.rb | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/config/initializers/hexapdf.rb b/config/initializers/hexapdf.rb index ba1b89f5..3756f392 100644 --- a/config/initializers/hexapdf.rb +++ b/config/initializers/hexapdf.rb @@ -63,6 +63,12 @@ module HexaPDF # rubocop:enable Rails/Blank end end + + class AppearanceGenerator + def create_push_button_appearances + nil + end + end end # comparison of Integer with HexaPDF::PDFArray failed diff --git a/lib/templates/find_acro_fields.rb b/lib/templates/find_acro_fields.rb index ac2d5c45..1a280a29 100644 --- a/lib/templates/find_acro_fields.rb +++ b/lib/templates/find_acro_fields.rb @@ -20,6 +20,11 @@ module Templates Selecionar | Escolher )\b/ix + FIELD_ALIGNMENT = { + 0 => 'left', + 1 => 'center', + 2 => 'right' + }.freeze module_function @@ -33,6 +38,8 @@ module Templates areas = Array.wrap(field[:Kids] || field).filter_map do |child_field| page = annots_index[child_field.hash] + next unless page + media_box = page[:CropBox] || page[:MediaBox] crop_box = page[:CropBox] || media_box @@ -124,6 +131,11 @@ module Templates field[:TU] != field.full_field_name && !field[:TU].in?(SKIP_FIELD_DESCRIPTION) + if field[:Q].present? && field.field_type == :Tx + attrs[:preferences] ||= {} + attrs[:preferences][:align] = FIELD_ALIGNMENT.fetch(field[:Q], 'left') + end + if field.field_type == :Btn && field.concrete_field_type == :radio_button && field[:Opt].present? selected_option_index = (field.allowed_values || []).find_index(field.field_value) selected_option = field[:Opt][selected_option_index] if selected_option_index