[ https://issues.apache.org/jira/browse/PDFBOX-3024?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15143059#comment-15143059 ]
Tilman Hausherr commented on PDFBOX-3024: ----------------------------------------- I got the debugger working again and also did some more output. Depite the output being the same (e.g. "PDType0Font@68e4a47"), the font in ContentStreamWrapper and the one in FontContainer are not the same. In the debugger, they are shown with a different value (e.g. "#661"). The font object is created the first time that the FontContainer is created. The font is cleared after the first page is done. For the next page, the FontContainer is reused, despite that its font has already been cleared. There is a new font too that is "good", but that one isn't used by the container. So what I'll do is to forget the fontcontainers after clearing the resources. So whatever I do will only have an effect on preflight. If this makes trouble, a "Plan B" would be to reassign the font to the container in ContentStreamWrapper.validText(), but that smells a bit. I didn't use all of your change (only the structure which is very useful, thank you) because I prefer to keep the resource clearing for the reason you mention. > Preflight validation call PDType0Font.clear at the wrong time > ------------------------------------------------------------- > > Key: PDFBOX-3024 > URL: https://issues.apache.org/jira/browse/PDFBOX-3024 > Project: PDFBox > Issue Type: Bug > Components: Preflight > Affects Versions: 1.8.10 > Reporter: Guillaume Monteils > Attachments: 004973.pdf, PDF-Tools.png, > PDFBOX_3024_dont_clear_resources.patch, PDFBox.png, eclipse-1.jpg, > eclipse-2.jpg > > > I used the algorythm here to test PDF / A compliance : > https://pdfbox.apache.org/1.8/cookbook/pdfavalidation.html > With one pdf document (which i cant give you due to confidentiality), an > NullPointerException occur here : > {code} > java.lang.NullPointerException > at > org.apache.pdfbox.pdmodel.font.PDType0Font.getFontWidth(PDType0Font.java:188) > at > org.apache.pdfbox.preflight.font.container.FontContainer.checkGlyphWith(FontContainer.java:114) > at > org.apache.pdfbox.preflight.content.ContentStreamWrapper.validText(ContentStreamWrapper.java:372)... > {code} > As i dug deeper, i found that preflight loads a font context where it puts > all pdf fonts. The PDType0Font is also created and put in this context. > {code} > (CSObject : > COSDictionary{(COSName{BaseFont}:COSName{INWHIX+TimesNewRomanPSMT}) > (COSName{DescendantFonts}:COSArray{[COSObject{349, 0}]}) > (COSName{Encoding}:COSName{Identity-H}) > (COSName{Subtype}:COSName{Type0}) > (COSName{ToUnicode}:COSDictionary{(COSName{Filter}:COSName{FlateDecode}) > (COSName{Length}:COSInt{260}) }) (COSName{Type}:COSName{Font}) }) > {code} > The problem is that at the end of one step of the analysis, the clear method > is called on the PDType0Font (see eclipse-1.jpg), but the font is still > present in the context. On a second step, the same font is retrieved from the > context, with no data in it, and the NullPointerException occurs (see > eclipse-2.jpg). > I tried the validation after removing the clear method from PDType0Font and > it works just fine. > I think the problem comes from this context, and a clear on a font should > also trigger a deletion in this map. -- 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