2024-09-05 22:54:38 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
2024-07-21 02:57:13 +02:00
|
|
|
module PdfDocuments
|
|
|
|
|
class Base
|
2024-07-22 01:29:09 +02:00
|
|
|
attr_reader :params
|
|
|
|
|
|
2024-07-21 02:57:13 +02:00
|
|
|
def initialize(prawn_document, **params)
|
|
|
|
|
@prawn_document = prawn_document
|
|
|
|
|
@prawn_document.markup_options = markup_options
|
2024-07-22 01:29:09 +02:00
|
|
|
# @prawn_document.font_families.update('Lexend' => {
|
|
|
|
|
# normal: 'vendor/assets/fonts/Lexend-Light.ttf',
|
|
|
|
|
# bold: 'vendor/assets/fonts/Lexend-Bold.ttf',
|
|
|
|
|
# exta_bold: 'vendor/assets/fonts/Lexend-ExtraBold.ttf',
|
|
|
|
|
# italic: 'vendor/assets/fonts/Lexend-Regular.ttf'
|
|
|
|
|
# })
|
2024-09-05 22:54:38 +02:00
|
|
|
@prawn_document.font "Helvetica", size: 12
|
2024-07-21 02:57:13 +02:00
|
|
|
@params = OpenStruct.new(params)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def create
|
|
|
|
|
generate
|
|
|
|
|
@prawn_document
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def generate
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def heading1(text)
|
2024-07-22 01:29:09 +02:00
|
|
|
@prawn_document.markup "<h1>#{text}</h1>"
|
2024-07-21 02:57:13 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def heading2(text)
|
|
|
|
|
@prawn_document.markup "<h2>#{text}</h2>"
|
|
|
|
|
end
|
|
|
|
|
|
2024-07-22 01:29:09 +02:00
|
|
|
def heading3(text)
|
2024-07-21 02:57:13 +02:00
|
|
|
@prawn_document.markup "<h3>#{text}</h3>"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def text(text)
|
|
|
|
|
@prawn_document.text text, markup_options[:text]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def rich_text(text)
|
|
|
|
|
@prawn_document.markup prepare_rich_text(text)
|
|
|
|
|
end
|
|
|
|
|
|
2024-07-22 01:29:09 +02:00
|
|
|
def hr
|
2024-09-05 22:54:38 +02:00
|
|
|
@prawn_document.markup "<hr>"
|
2024-07-22 01:29:09 +02:00
|
|
|
end
|
|
|
|
|
|
2024-07-21 02:57:13 +02:00
|
|
|
def markup_options
|
|
|
|
|
{
|
2024-07-22 01:29:09 +02:00
|
|
|
text: { size: 12, margin_bottom: 5 },
|
|
|
|
|
heading1: { style: :bold, size: 26, margin_bottom: 10, margin_top: 0 },
|
|
|
|
|
heading2: { style: :bold, size: 17, margin_bottom: 10, margin_top: 5 },
|
|
|
|
|
heading3: { style: :bold, size: 13, margin_bottom: 10, margin_top: 5 },
|
|
|
|
|
heading4: { style: :bold, size: 12, margin_bottom: 10, margin_top: 5 },
|
|
|
|
|
heading5: { style: :bold, size: 12, margin_bottom: 10, margin_top: 5 },
|
|
|
|
|
heading6: { style: :thin, size: 12, margin_bottom: 10, margin_top: 5 }
|
2024-07-21 02:57:13 +02:00
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
2024-07-22 01:29:09 +02:00
|
|
|
def logo
|
2024-09-05 22:54:38 +02:00
|
|
|
@prawn_document.image "app/assets/images/logo-apfelschule.png", width: 150
|
2024-07-22 01:29:09 +02:00
|
|
|
@prawn_document.move_down 30
|
|
|
|
|
end
|
|
|
|
|
|
2024-07-21 02:57:13 +02:00
|
|
|
def prepare_rich_text(rich_text)
|
2024-09-05 22:54:38 +02:00
|
|
|
{ h1: "h4" }.each do |tag, replacement|
|
2024-07-21 02:57:13 +02:00
|
|
|
rich_text = rich_text.to_s.gsub("<#{tag}", "<#{replacement}")
|
|
|
|
|
rich_text = rich_text.to_s.gsub("</#{tag}>", "</#{replacement}>")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
rich_text
|
|
|
|
|
end
|
2024-07-22 01:29:09 +02:00
|
|
|
|
|
|
|
|
def font(...)
|
|
|
|
|
@prawn_document.font(...)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def formatted_text(...)
|
|
|
|
|
@prawn_document.formatted_text(...)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def move_down(...)
|
|
|
|
|
@prawn_document.move_down(...)
|
|
|
|
|
end
|
2024-07-21 02:57:13 +02:00
|
|
|
end
|
|
|
|
|
end
|