RFR: 8251928: [macos] the printer DPI always be 72, cause some content lost when print out [v4]
GennadiyKrivoshein
duke at openjdk.org
Tue Sep 2 13:23:47 UTC 2025
On Tue, 2 Sep 2025 11:26:30 GMT, GennadiyKrivoshein <duke at openjdk.org> wrote:
>> 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.
>
> GennadiyKrivoshein has updated the pull request incrementally with one additional commit since the last revision:
>
> remove setDevClip usage. Update names. Handle page format orientation.
@prrace , thank you for the review.
I removed the setDevClip method and used a scaled page format to create SunGraphics2D. Also, I updated names. You are absolutely right this is a document DPI not a printer. The default DPI for the document is 300, but users can update DPI to be aligned with a printer's DPI. I also took into account an orientation of the page. The main idea has not changed, that is a document is drawn using default DPI 300, or one of supported printer's DPI.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/25489#issuecomment-3245328903
More information about the client-libs-dev
mailing list