On Mon, 17 Jun 2024 05:54:37 GMT, Renjith Kannath Pariyangad <rkannathp...@openjdk.org> wrote:
> Hi Reviewers, > > This fix will resolve page range not printing proper pages if the rage begin > from 2 or above on Mac machines. > I have verified the manual range related tests like PageRanges.java, > ClippedImages.java and test.java and confirmed its fixing the issue. > > Please review and let me know your suggestions if any. > I added some traces and ran the test `PageRanges.java` with and without your > proposed changes. > > The diff: > > ```diff > diff --git > a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java > b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java > index 416a3ee002b..6ddf46896b2 100644 > --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java > +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java > @@ -33,6 +33,7 @@ > import java.net.URI; > import java.security.AccessController; > import java.security.PrivilegedAction; > +import java.util.Arrays; > import java.util.concurrent.atomic.AtomicReference; > > import javax.print.*; > @@ -325,6 +325,8 @@ public void print(PrintRequestAttributeSet attributes) > throws PrinterException { > lastPage = mDocument.getNumberOfPages() - 1; > } > } > + System.out.println("print: firstPage = " + firstPage + "; " > + + "lastPage = " + lastPage); > > try { > synchronized (this) { > @@ -338,7 +340,11 @@ public void print(PrintRequestAttributeSet attributes) > throws PrinterException { > : > (PageRanges)attributes.get(PageRanges.class); > int[][] prMembers = (pr == null) ? new int[0][0] : > pr.getMembers(); > int loopi = 0; > + System.out.println("pr = " + pr); > + System.out.println("prMembers = " + > Arrays.deepToString(prMembers)); > do { > + System.out.println("printLoop: firstPage = " + firstPage + > "; " > + + "lastPage = " + lastPage); > if (EventQueue.isDispatchThread()) { > // This is an AWT EventQueue, and this print rendering > loop needs to block it. > > ``` > > The output: > > ``` > 2-3 + 3-5 without Renjith changes > print: firstPage = 1; lastPage = 2 > pr = 2-3 > prMembers = [[2, 3]] > printLoop: firstPage = 1; lastPage = 2 > print: firstPage = 2; lastPage = 4 > pr = 3-5 > prMembers = [[3, 5]] > printLoop: firstPage = 2; lastPage = 4 > > 2-3 + 3-5 with Renjith changes > print: firstPage = 0; lastPage = -1 > pr = 2-3 > prMembers = [[2, 3]] > printLoop: firstPage = 0; lastPage = -1 > print: firstPage = 0; lastPage = -1 > pr = 3-5 > prMembers = [[3, 5]] > printLoop: firstPage = 0; lastPage = -1 > ``` > > In the first case, I got page 3 and page 5 printed; with Renjith's changes, I > got the correct range printed 2-3 and 3-5. > > So it works… kind of. I believe the bug is somewhere in native code. > > What would be printed if `PageRanges` contains several ranges? This case > should be supported as well. > > Since the last page to be printed is -1, `PrinterView->knowsPageRange` sets > `aRange->length` to `NSIntegerMax`. This does not look right, even though it > works. > > https://github.com/openjdk/jdk/blob/08ace27da1d9cd215c77471eabf41417ff6282d2/src/java.desktop/macosx/native/libawt_lwawt/awt/PrinterView.m#L130-L152 Yes, there is some disconnect. For all OS (MAC with above changes) print range is working properly only with following values firstPage =0 and lastPage =-1 at **RasterPrinterJob.java** and highly depend on **pageRangesAttr** . I don't think there is any issue with native code, with this change I have brought MAC same as other OS. ------------- PR Comment: https://git.openjdk.org/jdk/pull/19740#issuecomment-2182895930