diff --git a/app/javascript/submission_form/area.vue b/app/javascript/submission_form/area.vue index 4b860b7f..219b49b6 100644 --- a/app/javascript/submission_form/area.vue +++ b/app/javascript/submission_form/area.vue @@ -157,6 +157,7 @@ ref="textContainer" dir="auto" class="flex items-center px-0.5 w-full" + :class="alignClasses[field.preferences?.align]" > {{ modelValue.join(', ') }} @@ -167,6 +168,7 @@ {{ modelValue }} @@ -253,6 +255,13 @@ export default { phone: this.t('phone') } }, + alignClasses () { + return { + center: 'text-center', + left: 'text-left', + right: 'text-right' + } + }, option () { return this.field.options.find((o) => o.uuid === this.area.option_uuid) }, diff --git a/app/javascript/template_builder/area.vue b/app/javascript/template_builder/area.vue index c1ae274a..1452ef4e 100644 --- a/app/javascript/template_builder/area.vue +++ b/app/javascript/template_builder/area.vue @@ -99,7 +99,7 @@
o.uuid === this.area.option_uuid) + 1}.` diff --git a/app/javascript/template_builder/field.vue b/app/javascript/template_builder/field.vue index fe3acca3..4f50e203 100644 --- a/app/javascript/template_builder/field.vue +++ b/app/javascript/template_builder/field.vue @@ -115,6 +115,32 @@ @dragstart.prevent.stop @click="closeDropdown" > +
+ + +
+<% align = field.dig('preferences', 'align') %> + <% if field['type'].in?(['signature', 'image', 'initials', 'stamp']) %> <% elsif field['type'].in?(['file', 'payment']) %> diff --git a/lib/submissions/generate_result_attachments.rb b/lib/submissions/generate_result_attachments.rb index 8249e4e0..da6ab551 100644 --- a/lib/submissions/generate_result_attachments.rb +++ b/lib/submissions/generate_result_attachments.rb @@ -75,8 +75,10 @@ module Submissions value = submitter.values[field['uuid']] - layouter = HexaPDF::Layout::TextLayouter.new(text_valign: :center, - text_align: value.to_s.match?(RTL_REGEXP) ? :right : :left, + text_align = field.dig('preferences', 'align').to_s.to_sym.presence || + (value.to_s.match?(RTL_REGEXP) ? :right : :left) + + layouter = HexaPDF::Layout::TextLayouter.new(text_valign: :center, text_align:, font: pdf.fonts.add(FONT_NAME), font_size:) next if Array.wrap(value).compact_blank.blank? @@ -202,15 +204,23 @@ module Submissions font: pdf.fonts.add(FONT_NAME), font_size: (font_size / 1.4).to_i) - lines = layouter.fit([text], area['w'] * width, height).lines + lines = layouter.fit([text], field['type'].in?(%w[date number]) ? width : area['w'] * width, height).lines box_height = lines.sum(&:height) end height_diff = [0, box_height - (area['h'] * height)].max - layouter.fit([text], area['w'] * width, height_diff.positive? ? box_height : area['h'] * height) - .draw(canvas, (area['x'] * width) + TEXT_LEFT_MARGIN, + right_align_x_adjustment = + if field['type'].in?(%w[date number]) && text_align != :left + (width - (area['w'] * width)) / (text_align == :center ? 2.0 : 1) + else + 0 + end + + layouter.fit([text], field['type'].in?(%w[date number]) ? width : area['w'] * width, + height_diff.positive? ? box_height : area['h'] * height) + .draw(canvas, (area['x'] * width) - right_align_x_adjustment + TEXT_LEFT_MARGIN, height - (area['y'] * height) + height_diff - TEXT_TOP_MARGIN) end end