[ https://issues.apache.org/jira/browse/PDFBOX-2682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14592289#comment-14592289 ]
Emmeran Seehuber commented on PDFBOX-2682: ------------------------------------------ My workaround for now is to render the pages to an image and then print that image. {code} final PDDocument document = PDDocument.load(new ByteArrayInputStream(pdfData)); final PrinterJob printJob = PrinterJob.getPrinterJob(); printJob.setJobName(jobName); printJob.setPrintService(printer); final PDFPrinter pdfPrinter = new PDFPrinter(document, printJob); if (!MacUISetup.isMac()) { pdfPrinter.silentPrint(); } else { final Pageable pageable = pdfPrinter.getPageable(); final PDFRenderer pdfRenderer = new PDFRenderer(document); printJob.setPageable(new Pageable() { @Override public int getNumberOfPages() { return pageable.getNumberOfPages(); } @Override public PageFormat getPageFormat(int pageIndex) throws IndexOutOfBoundsException { return pageable.getPageFormat(pageIndex); } @Override public Printable getPrintable(int pageIndex) throws IndexOutOfBoundsException { return new Printable() { @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex < 0 || pageIndex >= document.getNumberOfPages()) { return NO_SUCH_PAGE; } float dpi = 600; try { BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, dpi, ImageType.RGB); // Render the image Graphics2D printerGraphics = (Graphics2D) graphics; printerGraphics.setBackground(Color.WHITE); printerGraphics.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); printerGraphics.scale( pageFormat.getImageableWidth() / (double) image.getWidth(), pageFormat.getImageableHeight() / (double) image.getHeight()); printerGraphics.drawImage(image, 0, 0, null); } catch (IOException e) { e.printStackTrace(); } return PAGE_EXISTS; } }; } }); printJob.print(); } document.close(); {code} This works for me, but the printed image does not look as sharp as printed vector shapes do ... On all other platforms I just use silentPrint() and everything is fine. I did not use the PDFPrinter dpi argument, because the image was clipped when printed out. (Something is wrong with the scaling in this case). > Silent Print on Mac OSX complains it's not ran on Cocoa AWT thread > ------------------------------------------------------------------ > > Key: PDFBOX-2682 > URL: https://issues.apache.org/jira/browse/PDFBOX-2682 > Project: PDFBox > Issue Type: Bug > Affects Versions: 2.0.0 > Environment: Mac OSX 10.10.2 > 2,8 GHz Intel Core i7 > JDK 8u20 > Reporter: Robin Jonsson > Priority: Critical > Attachments: TMPPRINTFILE.pdf > > > I recently tested upgrading the PDFBox version in my project from 1.8.8 to > 2.0.0-SNAPSHOT > I ran into problems when printing silently via PDFPrinter.java > I ran this code: > {code} > private Status doPdfPrint(Document document, PrintService printService) { > ByteArrayInputStream bais = null; > PDDocument doc = null; > PrinterJob printerJob = PrinterJob.getPrinterJob(); > try { > printerJob.setPrintService(printService); > bais = new ByteArrayInputStream(document.getDecodedData()); > doc = PDDocument.load(bais, true); //Force load > PDFPrinter pdfPrinter = new PDFPrinter(doc); > pdfPrinter.silentPrint(printerJob); > //doc.silentPrint(printerJob); > doc.close(); > bais.close(); > } catch (IOException | PrinterException e) { > log.warn("Failed to print! Exception occurred: {}", > e.getMessage()); > log.debug("EXCEPTION", e); > return Status.PRINTING_FAILED; > } finally { > IOUtils.closeQuietly(bais); > IOUtils.closeQuietly(doc); > } > return Status.PRINTING_OK; > } > {code} > *Which resulted in the following stacktrace:* > {code} > 2015-02-12 08:10:44.475 java[20264:1353636] Cocoa AWT: Not running on AppKit > thread 0 when expected. ( > 0 libosxapp.dylib 0x0000000125997782 +[ThreadUtilities > getJNIEnv] + 38 > 1 libawt_lwawt.dylib 0x000000012bf3004d syncFromJavaPixels > + 1842 > 2 libawt_lwawt.dylib 0x000000012bf304e3 LockImage + 75 > 3 libawt_lwawt.dylib 0x000000012bf43040 > Java_sun_java2d_CRenderer_doImage + 170 > 4 ??? 0x0000000108c15694 0x0 + 4441855636 > 5 ??? 0x0000000108c0798d 0x0 + 4441799053 > ) > 2015-02-12 08:10:44.475 java[20264:1353636] Please file a bug report > at http://java.net/jira/browse/MACOSX_PORT with this message and a > reproducible test case. > 2015-02-12 08:10:44.478 java[20264:1353636] java.lang.StackOverflowError > at sun.java2d.CRenderer.doImage(Native Method) > at sun.java2d.OSXSurfaceData.blitImage(OSXSurfaceData.java:1027) > at sun.java2d.CRenderer.blitImage(CRenderer.java:461) > at sun.java2d.CRenderer.scaleImage(CRenderer.java:455) > at sun.java2d.CRenderer.transformImage(CRenderer.java:508) > at sun.java2d.CRenderer.transformImage(CRenderer.java:582) > at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3461) > at sun.print.ProxyGraphics2D.drawImage(ProxyGraphics2D.java:1315) > at > org.apache.pdfbox.rendering.PageDrawer.drawBufferedImage(PageDrawer.java:755) > at org.apache.pdfbox.rendering.PageDrawer.drawImage(PageDrawer.java:719) > at > org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:51) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:802) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:464) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:438) > at > org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149) > at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:160) > at org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:203) > at > org.apache.pdfbox.rendering.PDFRenderer.renderPageToGraphics(PDFRenderer.java:166) > at > org.apache.pdfbox.printing.PDFPrinter$PDFPrintable.print(PDFPrinter.java:430) > at sun.lwawt.macosx.CPrinterJob$4.run(CPrinterJob.java:653) > at sun.lwawt.macosx.CPrinterJob.printToPathGraphics(CPrinterJob.java:667) > at sun.lwawt.macosx.CPrinterJob.printLoop(Native Method) > at sun.lwawt.macosx.CPrinterJob.print(CPrinterJob.java:303) > at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1323) > at org.apache.pdfbox.printing.PDFPrinter.print(PDFPrinter.java:250) > at org.apache.pdfbox.printing.PDFPrinter.silentPrint(PDFPrinter.java:182) > at com.memnon.printr.PrintHandler.doPdfPrint(PrintHandler.java:123) > at com.memnon.printr.PrintHandler.print(PrintHandler.java:87) > at com.memnon.printr.PrintHandler.print(PrintHandler.java:77) > at com.memnon.printr.PrintHandler.print(PrintHandler.java:48) > at > com.memnon.printr.communication.DocumentResponseHandler.handleSuccessful(DocumentResponseHandler.java:78) > at > com.memnon.printr.communication.DocumentResponseHandler.handle(DocumentResponseHandler.java:53) > at > com.memnon.printr.messaging.PrintConsumer.executePrinterJob(PrintConsumer.java:62) > at com.memnon.printr.messaging.PrintConsumer.run(PrintConsumer.java:44) > at java.lang.Thread.run(Thread.java:745) > 2015-02-12 08:10:44.493 java[20264:1353636] NSAlert is being used from a > background thread, which is not safe. This is probably going to crash > sometimes. Break on void _NSAlertWarnUnsafeBackgroundThreadUsage() to debug. > This will be logged only once. This may break in the future. > 2015-02-12 08:10:46.639 java[20264:1353636] Apple AWT Internal Exception: > Printing failed because PMSessionEndDocumentNoDialog() returned -30871. > 2015-02-12 08:10:46.639 java[20264:1353636] *** Terminating app due to > uncaught exception 'NSInternalInconsistencyException', reason: 'Printing > failed because PMSessionEndDocumentNoDialog() returned -30871.' > *** First throw call stack: > ( > 0 CoreFoundation 0x00007fff8895c66c > __exceptionPreprocess + 172 > 1 libobjc.A.dylib 0x00007fff890e876e > objc_exception_throw + 43 > 2 CoreFoundation 0x00007fff8895c51d +[NSException > raise:format:] + 205 > 3 AppKit 0x00007fff8d117e80 > -[NSPrintSpoolingGraphicsContext dealloc] + 43 > 4 libobjc.A.dylib 0x00007fff890fb89c > _ZN11objc_object17sidetable_releaseEb + 236 > 5 libobjc.A.dylib 0x00007fff890e1e8f > _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 575 > 6 CoreFoundation 0x00007fff88834302 > _CFAutoreleasePoolPop + 50 > 7 libawt_lwawt.dylib 0x000000012bf25fa4 > Java_sun_lwawt_macosx_CPrinterJob_printLoop + 165 > 8 ??? 0x0000000108c15694 0x0 + 4441855636 > 9 ??? 0x0000000108c07160 0x0 + 4441796960 > 10 ??? 0x0000000108c0798d 0x0 + 4441799053 > ) > libc++abi.dylib: terminating with uncaught exception of type NSException > {code} > I saved the byte array output to a file and attached it to this case. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org