[
https://issues.apache.org/jira/browse/PDFBOX-2682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15134672#comment-15134672
]
John Hewson commented on PDFBOX-2682:
-------------------------------------
Tres, Robin, this is a JDK bug, not a PDFBox bug. It wasn't triggered in 1.8
because we failed to render most PDFs correctly with 1.8. Now that we're doing
rendering properly in 2.0 we're hitting this JDK bug, which is too bad, but
Oracle need to get their act together and fix this two year old bug. In the
meantime we have the ability to rasterize PDFs with PDFBox prior to printing,
which an be done with dpi=0. Emmeran's post above is using out-of-date code and
the equivalent RC3 code now works fine. That's the official PDFBox solution to
this printing problem, as long as you're printing to a physical printer (if
you're wanting to create a PS / XPS or whatever, you're out of luck).
Another less attractive workaround is to use OS X's built in PDF spooling
capability via SimpleDoc, which should just work, though YMMV. On the plus
side, if you're wanting to spool PS / XPS / etc, then this option will work for
you.
Alternatively, we still support JDK 1.6 which doesn't have this bug.
> 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: RE1506000090.pdf, TMPPRINTFILE.pdf, screenshot-1.png
>
>
> EI 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: [email protected]
For additional commands, e-mail: [email protected]