You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Tres Finocchiaro (JIRA)" <ji...@apache.org> on 2016/12/06 22:02:59 UTC

[jira] [Commented] (PDFBOX-2682) Silent Print on Mac OSX complains it's not ran on Cocoa AWT thread

    [ https://issues.apache.org/jira/browse/PDFBOX-2682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15726862#comment-15726862 ] 

Tres Finocchiaro commented on PDFBOX-2682:
------------------------------------------

Work on this issue has begun.  From the Oracle engineers:

	
{quote}
During the printing the method {{CRendered.doImage()}} is called. At that point we have the following native call stack: 
{noformat}
customPixelsFromJava() in ImageSurfaceData.m
syncFromJavaPixels() in ImageSurfaceData.m 
LockImage() in ImageSurfaceData.m 
doImageCG() in QuartzRendere.m 
doImage() in QuartzRendere.m 
Java_sun_java2d_CRenderer_doImage 
{noformat}

There are at least two problems in customPixelsFromJava(): 
 
1. It invokes {{getJNIEnv()}} from ThreadUtilities instead of usage the corresponding input parameter. According to the design - {{getJNIEnv()}} should be executed on AppKit thread, but all code related to printing should NOT run 
on AppKit thread. So we get the following assert here - {{Cocoa AWT: Not running on AppKit thread 0 when expected}}

2. The function call {{syncFromCustom()}} method via JNI. According to the code, the Java method should be located at {{OSXOffScreenSurfaceData}} class. We looked through the corresponding Java code, but didn't find anything related to that method. It looks like the method is just absent. When we try to invoke it via JNI, we experience the crash. 

Most likely Java cannot recognize type of images embedded to pdf file and treats their type as `custom' (see {{TYPE_CUSTOM}} in {{BufferedImage}}), but the code intended for handling this case is NOT implemented. 
{quote}

Possibly off-topic, but I find this particurarly interesting as we've other issues in our codebase crashed by specific BufferedImage types.
https://github.com/qzind/qz-print/pull/77/commits/c8365440d9059c1f9f573982b8a805b9d150dadb




> 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: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org