19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/docpdf/adapters/converters/hexapdf.rb', line 19
def convert(data, _source_filename)
config = DocPDF.configuration
opts = config.text_options
content = data.dup.force_encoding("UTF-8")
page_size = normalize_page_size(config.page_size)
doc = HexaPDF::Document.new
register_font(doc, opts[:font], opts[:font_file])
page = doc.pages.add(page_size)
canvas = page.canvas
canvas.font(opts[:font], size: opts[:font_size])
canvas.fill_color(opts[:color])
margins = opts[:margins]
y = page.box.height - margins[0]
line_height = opts[:font_size] * 1.4
content.each_line do |line|
if y < margins[2]
page = doc.pages.add(page_size)
canvas = page.canvas
canvas.font(opts[:font], size: opts[:font_size])
canvas.fill_color(opts[:color])
y = page.box.height - margins[0]
end
canvas.text(line.chomp, at: [margins[3], y])
y -= line_height
end
write_to_string(doc)
rescue HexaPDF::Error => e
raise ConversionError, "HexaPDF failed to render text to PDF: #{e.message}"
end
|