diff -r 2469e21060a0 -r baad9dc0eab1 src/java.desktop/share/classes/sun/print/RasterPrinterJob.java --- a/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java Fri Dec 01 17:44:07 2017 -0800 +++ b/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java Sun Dec 03 13:21:41 2017 +0000 @@ -886,12 +886,45 @@ } } - protected PageFormat getPageFormatFromAttributes() { - if (attributes == null || attributes.isEmpty()) { + protected PageFormat getPageFormatFromAttributes() { + if (attributes == null || attributes.isEmpty()) { return null; } - return attributeToPageFormat(getPrintService(), this.attributes); - } + + PageFormat newPf = attributeToPageFormat( + getPrintService(), attributes); + PageFormat oldPf = null; + Pageable pageable = getPageable(); + if ((pageable != null) && + (pageable instanceof OpenBook) && + ((oldPf = pageable.getPageFormat(0)) != null)) { + // If orientation, media, imageable area attributes are not in + // "attributes" set, then use respective values of the existing + // page format "oldPf". + if (attributes.get(OrientationRequested.class) == null) { + newPf.setOrientation(oldPf.getOrientation()); + } + + Paper newPaper = newPf.getPaper(); + Paper oldPaper = oldPf.getPaper(); + boolean oldPaperValWasSet = false; + if (attributes.get(MediaSizeName.class) == null) { + newPaper.setSize(oldPaper.getWidth(), oldPaper.getHeight()); + oldPaperValWasSet = true; + } + if (attributes.get(MediaPrintableArea.class) == null) { + newPaper.setImageableArea( + oldPaper.getImageableX(), oldPaper.getImageableY(), + oldPaper.getImageableWidth(), + oldPaper.getImageableHeight()); + oldPaperValWasSet = true; + } + if (oldPaperValWasSet) { + newPf.setPaper(newPaper); + } + } + return newPf; + } /**