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("#{tag}>", "#{replacement}>")
+ 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