[OpenJDK 2D-Dev] RFR: 8256264: Printed GlyphVector outline with low DPI has bad quality on Windows [v3]
alexsch at openjdk.java.net
Mon Nov 30 10:00:17 UTC 2020
> 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:
> 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.
Alexander Scherbatiy has updated the pull request incrementally with one additional commit since the last revision:
Remove Dsun.java2d.print.enablePathPrecisionScale property from the PathPrecisionScaleFactorTest
- all: https://git.openjdk.java.net/jdk/pull/1183/files
- new: https://git.openjdk.java.net/jdk/pull/1183/files/f79b8014..b6885e5f
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=1183&range=02
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=1183&range=01-02
Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
Fetch: git fetch https://git.openjdk.java.net/jdk pull/1183/head:pull/1183
More information about the 2d-dev