RFR: 8251928: [macos] the printer DPI always be 72, cause some content lost when print out

GennadiyKrivoshein duke at openjdk.org
Wed May 28 10:34:41 UTC 2025


The fix for the https://bugs.openjdk.org/browse/JDK-8251928.

**Description**.
This PR contains changes to be able to print with DPI higher than 72 on macOS, set default CPrinterJob DPI is 300 like in the PSPrinterJob.

As described in the macOS drawing guide, the following steps are required to draw with high DPI (https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html#//apple_ref/doc/uid/TP40003290-CH204-BCICIJAJ):
1. Convert the user-space point, size, or rectangle value to device space coordinates;
2. Normalize the value in device space so that it is aligned to the appropriate pixel boundary;
3. Convert the normalized value back to user space;
4. Draw your content using the adjusted value. 
    
The 1-st step is now implemented in the CPrinterJob, a Graphics provided to the print method adjusted to a printer's DPI.
The 2-nd step is a drawing process in the java code (without changes).
The 3-rd step is now implemented in the PrinterView.m, the drawing scaled back to the 72 DPI.
The 4-th step is a drawing process in the native code (without changes).

**Tests**.
I run all tests from javax.print package and there is no any regression.
New test covers macOS and Linux only because we know its default DPI - 300.

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

Commit messages:
 - [macos] the printer DPI always be 72

Changes: https://git.openjdk.org/jdk/pull/25489/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=25489&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8251928
  Stats: 311 lines in 5 files changed: 284 ins; 8 del; 19 mod
  Patch: https://git.openjdk.org/jdk/pull/25489.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/25489/head:pull/25489

PR: https://git.openjdk.org/jdk/pull/25489


More information about the client-libs-dev mailing list