Printing text using GlyphVector outline has bad quality on printers with low 
DPI on Windows.
The GDI system used for text printing on Windows accepts only integer path 
coordinates.
Rounding GlyphVector outline coordinates leads to distorted printed text.

To reproduce the issue run the 
[PrintGlyphVectorOutlineSample](https://bugs.openjdk.java.net/secure/attachment/91398/PrintGlyphVectorOutlineSample.java)
  file on Windows and select a low DPI
printer in the printer dialog. The sample prints two lines, one using Graphics 
drawString() method and another by
filling GlyphVector outline. Chars on the second line are distorted.

It is also possible to reproduce the issue running the sample and printing the 
text to PDF: 
[fill-glyph-vector-outline.png](https://bugs.openjdk.java.net/secure/attachment/91397/fill-glyph-vector-outline.png)

The proposed fix introduce "sun.java2d.print.enablePathPrecisionScale" property 
which being enabled
scales the GDI WorldTransform down and GlyphVector outline coordinates up.
This allows to keep some digits after a dot from being rounded.
The value for scaling is chosen to be 1000 in the same way how it is used  by 
`String trunc(float f)` method from PSPrinterJob class on Linux:
https://github.com/openjdk/jdk/blob/ed615e3ca0d681e8e67cdbf1d5d964979ccd7888/src/java.desktop/share/classes/sun/print/PSPrinterJob.java#L1489

See the  
[fill-glyph-vector-outline-enable-path-scale-factor.png](https://bugs.openjdk.java.net/secure/attachment/91399/fill-glyph-vector-outline-enable-path-scale-factor.png)
 screenshot which shows how the GlyphVector outline is filled after the fix 
with the enabled "sun.java2d.print.enablePathPrecisionScale" option.

[fill-glyph-vector-outline-diff.png](https://bugs.openjdk.java.net/secure/attachment/91400/fill-glyph-vector-outline-diff.png)
 shows difference of GlyphVector outline printing before and after the fix.

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

Commit messages:
 - 8256264: Printed GlyphVector outline with low DPI has bad quality on Windows

Changes: https://git.openjdk.java.net/jdk/pull/1183/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1183&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8256264
  Stats: 480 lines in 4 files changed: 469 ins; 0 del; 11 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1183.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1183/head:pull/1183

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

Reply via email to