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

John Hewson commented on PDFBOX-2824:
-------------------------------------

FontBox's fonts are some of the few classes in PDFBox which are required to be 
thread safe. This is because ExternalFonts is static and caches them.

This issue would appear to be a corrupted reader in TrueTypeFont, which is not 
necessarily due to the method in the stack trace (some other method could be 
performing unsynchronized access to the same reader). However the culprit will 
be somewhere in TrueTypeFont or it's table reading classes.

> ArrayIndexOutOfBoundsException in GlyfSimpleDescript.readFlags() when 
> multithreading
> ------------------------------------------------------------------------------------
>
>                 Key: PDFBOX-2824
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-2824
>             Project: PDFBox
>          Issue Type: Bug
>          Components: FontBox
>    Affects Versions: 2.0.0
>            Reporter: Tilman Hausherr
>
> From Kenneth K. in the mailing list:
> I have a client application that convert pdf documents into single page tiff 
> images.  Since the user export large quantities of documents I use a 
> multithreaded approach.  Each thread loads it own document and converts the 
> pages one by one.
> The pdf file is serialized to the client thread and then each thread executes 
> the following code.  If I only use 1 thread there is no problem.  I checked 
> to make sure objects are shared between threads.
> {code}
>             docin = PDDocument.load(new 
> ByteArrayInputStream(documentResult.getImage().getContent()),true);
>             if(null==docin)
>               throw new Exception("Invalid PDF document or an occured during 
> retrieval");
>                int numPages = docin.getNumberOfPages();
>                      String strPath = getPath(numPages);
>                      int iPage = 0;
>             PDFRenderer renderer = new PDFRenderer(docin);
>             for (int i=0;i<numPages;i++)
>             {
>               PDPage page = docin.getPage(i);
>               PDRectangle rect = page.getMediaBox();
>               BufferedImage pageImage = null;
>               pageImage = renderer.renderImageWithDPI(i, 200f, 
> ImageType.BINARY);
>               ...
>             }
> {code}
> {code}
> Array index out of range: 8
>        at 
> org.apache.fontbox.ttf.GlyfSimpleDescript.readFlags(GlyfSimpleDescript.java:202)
>        at 
> org.apache.fontbox.ttf.GlyfSimpleDescript.<init>(GlyfSimpleDescript.java:77)
>        at org.apache.fontbox.ttf.GlyphData.initData(GlyphData.java:58)
>        at org.apache.fontbox.ttf.GlyphTable.getGlyph(GlyphTable.java:161)
>        at 
> org.apache.pdfbox.rendering.TTFGlyph2D.getPathForGID(TTFGlyph2D.java:140)
>        at 
> org.apache.pdfbox.rendering.TTFGlyph2D.getPathForCharacterCode(TTFGlyph2D.java:92)
>        at 
> org.apache.pdfbox.rendering.PageDrawer.drawGlyph2D(PageDrawer.java:333)
>        at 
> org.apache.pdfbox.rendering.PageDrawer.showFontGlyph(PageDrawer.java:314)
>        at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.showGlyph(PDFStreamEngine.java:731)
>        at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.showText(PDFStreamEngine.java:690)
>        at org.apache.pdfbox.rendering.PageDrawer.showText(PageDrawer.java:296)
>        at 
> org.apache.pdfbox.contentstream.PDFStreamEngine.showTextStrings(PDFStreamEngine.java:600)
>        at 
> org.apache.pdfbox.contentstream.operator.text.ShowTextAdjusted.process(ShowTextAdjusted.java:38)
>        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:179)
>        at 
> org.apache.pdfbox.rendering.PDFRenderer.renderPage(PDFRenderer.java:205)
>        at 
> org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:136)
>        at 
> org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:95)
>        at 
> org.ilsos.cm.export.client.rmi.workers.Pdf2SinglePageTiff.processResult(Pdf2SinglePageTiff.java:142)
>        at 
> org.ilsos.cm.export.client.rmi.ExportWorker.run(ExportWorker.java:72)
>        at java.lang.Thread.run(Thread.java:784)
> {code}



--
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

Reply via email to