On Thu, 22 Apr 2021 15:13:45 GMT, Alexander Scherbatiy <alex...@openjdk.org> 
wrote:

> PDFBox 1.8 uses 
> [Graphics2D.drawGlyphVector()](https://github.com/apache/pdfbox/blob/41ae21bd4c3f304373d3b05f63af5325df248019/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java#L352)
>   method with scaled glyphs to print a text and PDF 2.0 uses 
> [Graphics2D.fill()](https://github.com/apache/pdfbox/blob/4f14dee47ff821e44d9e2ff11532959d95e94d5b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java#L512)
>  to print glyphs path. Both methods finally calls 
> WPathGraphics.convertToWPath(...) in jdk on Windows which call GDI FillPath.
> 
> Using a custom PageDrawer to draw a text in PDFBox with 
> Graphics2D.drawString() method reveals the fact that some pdf documents which 
> are properly printed by PDFBox 1.8 and PDF 2.0 on Linux and Windows have 
> issues with printing them on Windows.
> 
> The reason is that such docs use fonts which have empty font family name.
> The awt_PrintJob.jFontToWFontA(...) method is not able to select the required 
> font when the passed font family name is empty.
> https://github.com/openjdk/jdk/blob/7c37c022a1664437bf8d2c8d76ad039521f3ffa7/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp#L2264
>  
> 
> The proposed solution returns false from WPrinterJob.setFont(...) method when 
> the font family is empty so the text printing falls back to printing a text 
> by GDI FillPath method:
> https://github.com/openjdk/jdk/blob/6d49cc3b655433d00e967fdcec3f3759412cd925/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java#L1157
> 
> To reproduce the issue I created a simple 
> [SampleBowMissedFamilyName.ttf](https://bugs.openjdk.java.net/secure/attachment/94344/SampleBowMissedFamilyName.ttf)
>  font which contains only capital letters "ABCDEF" and saved it with empty 
> font family name.
> 
> Here is a simple 
> [PrintFontSample.java](https://bugs.openjdk.java.net/secure/attachment/94343/PrintFontSample.java)
>  program that helps to reproduce the issue using the 
> SampleBowMissedFamilyName.ttf font.
> 
> The PrintFontSample program draws a text using three methods:
> - Graphics2D.drawString(...)
> - Graphics2D.drawGlyphVector(...)
> - Graphics2D.drawGlyphVector(...) using transformed glyphs 
> 
> Running the program with jdk 16 on Windows (without the fix)
>>  java PrintFontSample SampleBowMissedFamilyName.ttf
> 
> shows that the first and the second lines are not properly printed: 
> [sample-doc-without-fix.pdf](https://bugs.openjdk.java.net/secure/attachment/94345/sample-doc-without-fix.pdf)
> Running the program with the fix properly prints all three lines: 
> [sample-doc-with-fix.pdf](https://bugs.openjdk.java.net/secure/attachment/94349/sample-doc-with-fix.pdf)
> 
> The provided manual test uses the created SampleBowMissedFamilyName.ttf font 
> with empty font family name.

I dumped the font you attached and it has

                Data: 43 6F 70 79 72 69 67 68 74 20  >  Copyright 
                      73 74 65 6C 6C 61 72 73 70 6F  >  stellarspo
                      74 20 32 30 32 31              >  t 2021

Who are stellarspot ? We can't put their copyrighted font into openjdk. If you 
created this font by editing
someone else's font that is a no-no. You would have to create a font from 
scratch and assert you own
the font and the design of all glyphs and contribute it under OCA.

The fix itself is probably fine .. I am surprised you get this far with a font 
with no name

-------------

PR: https://git.openjdk.java.net/jdk/pull/3631

Reply via email to