prawnpdf / prawn

Fast, Nimble PDF Writer for Ruby
https://prawnpdf.org
Other
4.68k stars 688 forks source link

Font Embedding: Subset enabled by default and breaking font #1361

Open MrSerth opened 2 months ago

MrSerth commented 2 months ago

Since updating to prawn 2.5.0, we face issues with font embedding and incorrectly or missing glyphs.

Reproduction example:

This reproduction example assumes that the file Arial Unicode MS.TTF is present in the local working directory. While the font is shipped with Microsoft Office by default and can be licensed by Microsoft, it is also available on GitHub (for example here). With the file being available, a simple irb can be started and the following script can be executed:

require 'prawn'
@pdf = Prawn::Document.new()

@pdf.font_families.update("ArialUnicodeMS" => {normal: {file: "Arial Unicode MS.TTF"}})

@pdf.font "ArialUnicodeMS", style: :normal
@pdf.text_rendering_mode :fill_stroke do
  @pdf.draw_text "Demo Text @ Draw Text", size: 22.0, style: :normal, text_anchor: "middle", at: [0, 500], offset: [0, 0]
end

@pdf.render_file('prawn.pdf')
puts "Done"

Issues noticed:

After reducing the issue to the above-given minimal reproduction example, we are pretty confident to face a bug in Prawn. Otherwise, we probably misunderstood the subsetting and font-embedding and would be grateful about some advice - Thank you!

--

prawn: 2.5.0 Ruby: 3.3.5 Adobe Acrobat Pro: 2024.003.20121

gettalong commented 2 months ago

Have you looked at #1346? It seems that this is the same problem.

MrSerth commented 2 months ago

Yes, we've looked at #1346. From the various comments, we also got the idea of explicitly setting subset: false (despite being advertised as the default in the docs). As mentioned, subset: false resolves the issue with the missing glyph, but at some drawbacks (including the larger file size). The previous version of Prawn didn't had the same issue, and reverting also avoids the issue mentioned here. Since #1346 is closed, and we also have found a potential issue with the documentation, I decided to open a new issue. On a technical note, https://github.com/prawnpdf/ttfunk/issues/102 is probably related, too.