From 976936d480c2758be93069e59cc9a1ecab2f624f Mon Sep 17 00:00:00 2001 From: david Date: Sun, 24 Nov 2024 03:16:36 +0100 Subject: [PATCH] Improve pdf --- app/assets/images/logo-apfelschule.png | Bin 13814 -> 13306 bytes app/assets/images/logo-apfelschule_xs.png | Bin 0 -> 2904 bytes app/models/pdf_documents/base.rb | 9 +- app/models/pdf_documents/customer_report.rb | 103 ++++++++++++++++---- 4 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 app/assets/images/logo-apfelschule_xs.png diff --git a/app/assets/images/logo-apfelschule.png b/app/assets/images/logo-apfelschule.png index 475c455114dbe8acb63a83556a68e1159d208fb6..d603a48edd3b77a2086f6227a7eb5b6a7aef5cf2 100644 GIT binary patch literal 13306 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 Ef=b3fBme*a literal 13814 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 XM9W#sK&Q~(msqlrN)lCK#zFrJM`%Pi diff --git a/app/assets/images/logo-apfelschule_xs.png b/app/assets/images/logo-apfelschule_xs.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d46ff0664698d5c22304caa50b23c8564d434d GIT binary patch literal 2904 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" end - def text(text) - @prawn_document.text text, markup_options[:text] + def text(text, **args) + @prawn_document.text text, markup_options[:text].merge(args) end def rich_text(text) @@ -69,8 +69,8 @@ module PdfDocuments } end - def logo - @prawn_document.image "app/assets/images/logo-apfelschule.png", width: 150 + def logo(width: 24, xs: true) + @prawn_document.image "app/assets/images/logo-apfelschule#{ xs ? "_xs" : "" }.png", width: end def prepare_rich_text(rich_text) @@ -81,6 +81,7 @@ module PdfDocuments rich_text.sub(/(
)+$/, "") end + # @prawn_document.draw_text("Dokument erstellt am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')}", at: [ 0, -15 ]) def font(...) @prawn_document.font(...) diff --git a/app/models/pdf_documents/customer_report.rb b/app/models/pdf_documents/customer_report.rb index 95a0154..0cf4b92 100644 --- a/app/models/pdf_documents/customer_report.rb +++ b/app/models/pdf_documents/customer_report.rb @@ -5,16 +5,34 @@ module PdfDocuments private def generate + move_down 130 + logo(width: 250, xs: false) + move_down 40 heading1 params.report.name - rich_text params.report.comment + + move_down 20 + @prawn_document.text "#{I18n.l params.report.updated_at.to_date, format: :long}" + move_down 40 + safe_display(params.report.comment) do + rich_text _1 + move_down 30 + end + + @prawn_document.font_size(8) do + @prawn_document.draw_text("Dokument erstellt am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')}", at: [0, 0]) + end + @prawn_document.start_new_page @pages = {} params.report.export[:elements].each.with_index(1) do |(element, success_criteria), element_index| new_page(required_space: 200) if element_index > 1 without_page_break do heading2 "#{element_index} #{element.title}" - bold("#{element.page.path}") - safe_display(element.screenshot) { image(_1.variant(:thumbnail), height: 160) && move_down(5) } + @prawn_document.text("Pfad: #{element.page.path}", inline_format: true) + safe_display(element.screenshot) do + image(_1.variant(:thumbnail), height: 160) + move_down(15) + end end rich_text element.description move_down(10) @@ -24,17 +42,71 @@ module PdfDocuments success_criterion_row(success_criterion, [ element_index, sc_index ]) end end + + @prawn_document.start_new_page + heading1("Anhang: Richtlinien") + params.report.export[:success_criteria].group_by(&:check).sort_by{ |c, _scs| c.external_number }.each do |check, criteria| + heading2(check.display_label) + { + external_number: { label: "WCAG Nummer" }, + external_url: { label: "WCAG Link" }, + conformity_level: { label: "Konformität" }, + conformity_notice_de: { label: "Anmerkung Konformität", rich: true }, + priority: { label: "Priorität" }, + criterion_de: { label: "Kriterium/Grundlage", rich: true }, + exemption_details_de: { label: "Ausnahmen", rich: true }, + criterion_details_de: { label: "Verstehen", rich: true }, + example_de: { label: "Beispiel", rich: true }, + annotation_de: { label: "Anmerkung", rich: true } + }.each do |attribute, options| + v = check.send(attribute) + safe_display(v) do + text("#{options[:label]}", inline_format: true) + if options[:rich] + rich_text(_1) + else + text(_1) + end + end + end + + if check.links.any? + text("Links", inline_format: true) + check.links.group_by(&:link_category).each do |cat, links| + text(%Q( + #{cat.name} +
    + #{links.map{ "#{_1.text}" }.join() } +
+ )) + end + end + + text("Erfolgskriterien", inline_format: true) + text criteria.map(&:number).sort.join(", ") + end string = "Seite / " # Green page numbers 1 to 7 options = { - at: [ @prawn_document.bounds.right - 150, -10 ], + at: [ @prawn_document.bounds.right - 150, 776 ], width: 150, align: :right, - start_count_at: 1 + start_count_at: 2, + page_filter: ->(x) { x > 1 } } @prawn_document.number_pages string, options - @prawn_document.repeat(:all) do + @prawn_document.repeat(2..) do + @prawn_document.text_box "#{params.report.name}", at: [ 50, 777 ], inline_format: true, width: 300 + # @prawn_document.text_box "#{I18n.l params.report.updated_at.to_date, format: :long}", at: [ 0, 777 ], inline_format: true, width: 532, align: :right + @prawn_document.bounding_box([0, 766], width: 532) do + hr + end + @prawn_document.bounding_box([0, 796], width: 200, height: 200) do + logo + end + end + @prawn_document.repeat(2..) do # @prawn_document.bounding_box([ 0, 790 ], width: 200) do # logo # end @@ -46,20 +118,13 @@ module PdfDocuments # at: [ 0, -15 ], # width: 200 # ) - @prawn_document.text_box "#{params.report.name}", at: [ 150, 777 ], inline_format: true, width: 300 - @prawn_document.text_box "#{I18n.l params.report.updated_at.to_date, format: :long}", at: [ 0, 777 ], inline_format: true, width: 516, align: :right - @prawn_document.bounding_box([-10, 800], width: 200, height: 200) do - logo - end + # @prawn_document.text_box "#{I18n.l params.report.updated_at.to_date, format: :long}", at: [ 0, 777 ], inline_format: true, width: 532, align: :right @prawn_document.font_size(8) do - @prawn_document.draw_text("Dieses Dokument wurd am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')} erstellt.", at: [ 0, -15 ]) - end - @prawn_document.bounding_box([0, 0], width: 516) do - hr - end - @prawn_document.bounding_box([0, 766], width: 516) do - hr + # @prawn_document.draw_text("Dokument erstellt am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')}", at: [ 0, -15 ]) end + # @prawn_document.bounding_box([0, 0], width: 532) do + # hr + # end end x = params @@ -105,6 +170,8 @@ module PdfDocuments end heading4("Protokollnummer") text(success_criterion.number) + heading4("WCAG") + text("#{success_criterion.check.external_number}'", inline_format: true) move_down(10) end end