diff --git a/app/models/pdf_documents/base.rb b/app/models/pdf_documents/base.rb new file mode 100644 index 0000000..b72bceb --- /dev/null +++ b/app/models/pdf_documents/base.rb @@ -0,0 +1,67 @@ +module PdfDocuments + class Base + def initialize(prawn_document, **params) + @prawn_document = prawn_document + @prawn_document.markup_options = markup_options + @prawn_document.font_families.update('Lexend' => { + normal: 'vendor/assets/fonts/Lexend-Light.ttf', + bold: 'vendor/assets/fonts/Lexend-Bold.ttf', + italic: 'vendor/assets/fonts/Lexend-Regular.ttf' + }) + @prawn_document.font 'Lexend' + @params = OpenStruct.new(params) + end + + def create + generate + @prawn_document + end + + private + + def generate + raise NotImplementedError + end + + def heading1(text) + @prawn_document.markup "

#{text}

" + end + + def heading2(text) + @prawn_document.markup "

#{text}

" + end + + def heading2(text) + @prawn_document.markup "

#{text}

" + end + + def text(text) + @prawn_document.text text, markup_options[:text] + end + + def rich_text(text) + @prawn_document.markup prepare_rich_text(text) + end + + def markup_options + { + text: { size: 10, margin_bottom: 10 }, + heading1: { style: :bold, size: 24, margin_bottom: 10, margin_top: 20 }, + heading2: { style: :bold, size: 18, margin_bottom: 10, margin_top: 15 }, + heading3: { style: :bold, size: 16, margin_bottom: 10, margin_top: 10 }, + heading4: { style: :bold, size: 14, margin_bottom: 10, margin_top: 5 }, + heading5: { style: :bold, size: 14, margin_bottom: 10, margin_top: 5 }, + heading6: { style: :thin, size: 14, margin_bottom: 10, margin_top: 5 } + } + end + + def prepare_rich_text(rich_text) + { h1: 'h4' }.each do |tag, replacement| + rich_text = rich_text.to_s.gsub("<#{tag}", "<#{replacement}") + rich_text = rich_text.to_s.gsub("", "") + end + + rich_text + end + end +end diff --git a/app/models/pdf_documents/customer_report.rb b/app/models/pdf_documents/customer_report.rb new file mode 100644 index 0000000..997c5a1 --- /dev/null +++ b/app/models/pdf_documents/customer_report.rb @@ -0,0 +1,21 @@ +module PdfDocuments + class CustomerReport < Base + private + + def generate + heading1 @params.report.name + + @params.report.elements.each do |element| + heading2 element.title + text element.path + rich_text element.description_html + + element.success_criteria.each do |success_criterion| + text success_criterion.title + rich_text success_criterion.description_html + rich_text success_criterion.comment_html + end + end + end + end +end diff --git a/app/views/reports/show.pdf.prawn b/app/views/reports/show.pdf.prawn index 349c641..68a4748 100644 --- a/app/views/reports/show.pdf.prawn +++ b/app/views/reports/show.pdf.prawn @@ -1,17 +1 @@ -prawn_document do |pdf| - pdf.markup_options = { - heading1: { style: :bold, size: 14, margin_bottom: 10, margin_top: 20 } - } - pdf.text @report.name, size: 22, style: :bold, align: :center - @report.elements.each do |element| - pdf.text element.title, size: 16, style: :bold - pdf.text element.path - pdf.markup prepare_rich_text(element.description_html.to_s), inline_format: true - - element.success_criteria.each do |success_criterion| - pdf.text success_criterion.title, size: 14, style: :bold - pdf.markup prepare_rich_text(success_criterion.description_html.to_s), inline_format: true - pdf.markup prepare_rich_text(success_criterion.comment_html.to_s), inline_format: true - end - end -end +prawn_document { PdfDocuments::CustomerReport.new(_1, report: @report).create } diff --git a/vendor/assets/fonts/Lexend-Black.ttf b/vendor/assets/fonts/Lexend-Black.ttf new file mode 100644 index 0000000..2fea087 Binary files /dev/null and b/vendor/assets/fonts/Lexend-Black.ttf differ diff --git a/vendor/assets/fonts/Lexend-Bold.ttf b/vendor/assets/fonts/Lexend-Bold.ttf new file mode 100644 index 0000000..95884f6 Binary files /dev/null and b/vendor/assets/fonts/Lexend-Bold.ttf differ diff --git a/vendor/assets/fonts/Lexend-ExtraBold.ttf b/vendor/assets/fonts/Lexend-ExtraBold.ttf new file mode 100644 index 0000000..02f84ed Binary files /dev/null and b/vendor/assets/fonts/Lexend-ExtraBold.ttf differ diff --git a/vendor/assets/fonts/Lexend-ExtraLight.ttf b/vendor/assets/fonts/Lexend-ExtraLight.ttf new file mode 100644 index 0000000..20e7068 Binary files /dev/null and b/vendor/assets/fonts/Lexend-ExtraLight.ttf differ diff --git a/vendor/assets/fonts/Lexend-Light.ttf b/vendor/assets/fonts/Lexend-Light.ttf new file mode 100644 index 0000000..fb6d097 Binary files /dev/null and b/vendor/assets/fonts/Lexend-Light.ttf differ diff --git a/vendor/assets/fonts/Lexend-Medium.ttf b/vendor/assets/fonts/Lexend-Medium.ttf new file mode 100644 index 0000000..d91a867 Binary files /dev/null and b/vendor/assets/fonts/Lexend-Medium.ttf differ diff --git a/vendor/assets/fonts/Lexend-Regular.ttf b/vendor/assets/fonts/Lexend-Regular.ttf new file mode 100644 index 0000000..b423d3a Binary files /dev/null and b/vendor/assets/fonts/Lexend-Regular.ttf differ diff --git a/vendor/assets/fonts/Lexend-SemiBold.ttf b/vendor/assets/fonts/Lexend-SemiBold.ttf new file mode 100644 index 0000000..9dcb821 Binary files /dev/null and b/vendor/assets/fonts/Lexend-SemiBold.ttf differ diff --git a/vendor/assets/fonts/Lexend-Thin.ttf b/vendor/assets/fonts/Lexend-Thin.ttf new file mode 100644 index 0000000..0d7df88 Binary files /dev/null and b/vendor/assets/fonts/Lexend-Thin.ttf differ