[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-2d-dev
Subject:    [OpenJDK 2D-Dev] Integrated: 8265761: Font with missed font family name is not properly printed on W
From:       Alexander Scherbatiy <alexsch () openjdk ! java ! net>
Date:       2021-04-30 8:50:57
Message-ID: 23QHfJWL_8uxysYtpnjhq7OAaXWfdY64wFNroegkH3g=.dbbae55d-9bcf-4e5c-b0fc-d828183637e4 () github ! com
[Download RAW message or body]

On Thu, 22 Apr 2021 15:13:45 GMT, Alexander Scherbatiy <alexsch@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/4f14dee47ff821e44d9e2ff115 \
> 32959d95e94d5b/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/6d49cc3b655433d00e967fdcec3f375 \
> 9412cd925/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.

This pull request has now been integrated.

Changeset: e9370a13
Author:    Alexander Scherbatiy <alexsch@openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/e9370a13b6f3f99d223ef5966f9e218b94d954b4
                
Stats:     293 lines in 3 files changed: 293 ins; 0 del; 0 mod

8265761: Font with missed font family name is not properly printed on Windows

Reviewed-by: serb, prr

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

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic