# frozen_string_literal: true module PdfDocuments class Base attr_reader :params, :font 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', # exta_bold: 'vendor/assets/fonts/Lexend-ExtraBold.ttf', # italic: 'vendor/assets/fonts/Lexend-Regular.ttf' # }) @font = "Helvetica" @prawn_document.font @font, size: 12 @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 heading3(text) @prawn_document.markup "

#{text}

" end def heading4(text) @prawn_document.markup "

#{text}

" end def text(text, **args) @prawn_document.text text, markup_options[:text].merge(args) end def rich_text(text) @prawn_document.markup prepare_rich_text(text) end def hr @prawn_document.markup "
" end def markup_options { text: { size: 12, margin_bottom: 5 }, heading1: { style: :bold, size: 26, margin_bottom: 5, margin_top: 0 }, heading2: { style: :bold, size: 17, margin_bottom: 5, margin_top: 5 }, heading3: { style: :bold, size: 13, margin_bottom: 5, margin_top: 5 }, heading4: { style: :bold, size: 12, margin_bottom: 5, margin_top: 5 }, heading5: { style: :bold, size: 12, margin_bottom: 5, margin_top: 5 }, heading6: { style: :thin, size: 12, margin_bottom: 5, margin_top: 5 } } end 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) { h1: "h5" }.each do |tag, replacement| rich_text = rich_text.to_s.gsub("<#{tag}", "<#{replacement}") rich_text = rich_text.to_s.gsub("", "") end 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(...) end def formatted_text(...) @prawn_document.formatted_text(...) end def move_down(...) @prawn_document.move_down(...) end def safe_display(value, &block) return if value.blank? begin yield(value) rescue StandardError nil end end def bold(text) @prawn_document.font(@font, style: :bold) do @prawn_document.text text end end def image(attachable, **args) begin @prawn_document.image(ActiveStorage::Blob.service.path_for(attachable.key), **args) && raise("david") rescue StandardError false end end def without_page_break(&block) return yield return @prawn_document.bounding_box([ 0, @prawn_document.cursor ], width: 300) do yield # @prawn_document.stroke_bounds if Rails.env.development? # print_coordinates end @prawn_document.span(520) do yield # @prawn_document.stroke_bounds end end def print_coordinates @prawn_document.text("top: #{@prawn_document.bounds.top}") @prawn_document.text("bottom: #{@prawn_document.bounds.bottom}") @prawn_document.text("left: #{@prawn_document.bounds.left}") @prawn_document.text("right: #{@prawn_document.bounds.right}") @prawn_document.move_down(10) @prawn_document.text("absolute top: #{Float(@prawn_document.bounds.absolute_top).round(2)}") @prawn_document.text("absolute bottom: #{Float(@prawn_document.bounds.absolute_bottom).round(2)}") @prawn_document.text("absolute left: #{Float(@prawn_document.bounds.absolute_left).round(2)}") @prawn_document.text("absolute right: #{Float(@prawn_document.bounds.absolute_right).round(2)}") end def new_page(required_space: 0) @prawn_document.start_new_page if @prawn_document.cursor <= required_space + 10 end end end