[ https://issues.apache.org/jira/browse/PDFBOX-4631?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16908035#comment-16908035 ]
sjoblomj commented on PDFBOX-4631: ---------------------------------- [~tilman]: Yeah, its "fodselsnummer2" that causes this. So your suggestion is to this, or did I missunderstand? {code:java} diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java index dc2825d4c..986fbd351 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java @@ -598,7 +598,10 @@ class AppearanceGeneratorHelper private void insertGeneratedCombAppearance(PDAppearanceContentStream contents, PDAppearanceStream appearanceStream, PDFont font, float fontSize) throws IOException { - + if (appearanceStream.getBBox() == null) { + return; + } + // TODO: Currently the quadding is not taken into account // so the comb is always filled from left to right. {code} If so, there seems to be more code that assumes that there is a bounding box. If I try with the code above, I get a new NullPointerException: {code} java.lang.NullPointerException at org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm.resolveNeedsScaling(PDAcroForm.java:808) at org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm.flatten(PDAcroForm.java:334) at org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm.flatten(PDAcroForm.java:248) at PdfBoxTest.flattenDocument(PdfBoxTest.java:53) at PdfBoxTest.flatten(PdfBoxTest.java:42) at PdfBoxTest.fileWithStrangeContent(PdfBoxTest.java:27) {code} > NPE due to bounding box not being set on PDAppearanceStream > ----------------------------------------------------------- > > Key: PDFBOX-4631 > URL: https://issues.apache.org/jira/browse/PDFBOX-4631 > Project: PDFBox > Issue Type: Bug > Components: AcroForm > Affects Versions: 2.0.16 > Environment: Windows 10 > Reporter: sjoblomj > Priority: Major > Fix For: 2.0.17, 3.0.0 PDFBox > > Attachments: PdfBoxTest.java, bidragsoknad_strange-content.pdf > > > PDFBox 2.0.16 as well as the current SNAPSNOT version crashes with a > NullPointerException. Attached is a small test that triggers the NPE, as well > as the PDF. > The stack trace: > {code:java} > java.lang.NullPointerException > at > org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.applyPadding(AppearanceGeneratorHelper.java:816) > at > org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.insertGeneratedCombAppearance(AppearanceGeneratorHelper.java:611) > at > org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.insertGeneratedAppearance(AppearanceGeneratorHelper.java:505) > at > org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceContent(AppearanceGeneratorHelper.java:374) > at > org.apache.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceValue(AppearanceGeneratorHelper.java:223) > at > org.apache.pdfbox.pdmodel.interactive.form.PDTextField.constructAppearances(PDTextField.java:264) > at > org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField.applyChange(PDTerminalField.java:228) > at > org.apache.pdfbox.pdmodel.interactive.form.PDTextField.setValue(PDTextField.java:219) > at PdfBoxTest.reformatFields(PdfBoxTest.java:67) > at PdfBoxTest.flattenDocument(PdfBoxTest.java:52) > at PdfBoxTest.flatten(PdfBoxTest.java:42) > at PdfBoxTest.fileWithStrangeContent(PdfBoxTest.java:27){code} > > The origin of the error seems to be in > {{AppearanceGeneratorHelper.setAppearanceValue()}}. A PDAppearanceStream is > created, but a bounding box is only set for it if this is false: {{if > (appearance != null && appearance.isStream())}}. In my case, the conditional > is true, and PDFBox takes a path where no bounding box gets set. > The following could be a solution, but I'm not very fluent in the inner > workings of PDFs, and it's not directly obvious from looking at the code that > this is a good approach. > {code:java} > diff --git > a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java > > b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java > index dc2825d4c..a82236069 100644 > --- > a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java > +++ > b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java > @@ -201,6 +201,7 @@ class AppearanceGeneratorHelper > if (appearance != null && appearance.isStream()) > { > appearanceStream = appearance.getAppearanceStream(); > + setBoundingBoxOnAppearanceStream(widget, > appearanceStream); > } > else > { > @@ -235,15 +236,9 @@ class AppearanceGeneratorHelper > // Calculate the entries for the bounding box and the transformation > matrix > // settings for the appearance stream > - int rotation = resolveRotation(widget); > - PDRectangle rect = widget.getRectangle(); > - Matrix matrix = Matrix.getRotateInstance(Math.toRadians(rotation), > 0, 0); > - Point2D.Float point2D = matrix.transformPoint(rect.getWidth(), > rect.getHeight()); > + setBoundingBoxOnAppearanceStream(widget, appearanceStream); > - PDRectangle bbox = new PDRectangle(Math.abs((float) point2D.getX()), > Math.abs((float) point2D.getY())); > - appearanceStream.setBBox(bbox); > - > - AffineTransform at = calculateMatrix(bbox, rotation); > + AffineTransform at = calculateMatrix(appearanceStream.getBBox(), > resolveRotation(widget)); > if (!at.isIdentity()) > { > appearanceStream.setMatrix(at); > @@ -252,7 +247,17 @@ class AppearanceGeneratorHelper > appearanceStream.setResources(new PDResources()); > return appearanceStream; > } > - > + > + private void setBoundingBoxOnAppearanceStream(PDAnnotationWidget widget, > PDAppearanceStream appearanceStream) { > + int rotation = resolveRotation(widget); > + PDRectangle rect = widget.getRectangle(); > + Matrix matrix = Matrix.getRotateInstance(Math.toRadians(rotation), > 0, 0); > + Point2D.Float point2D = matrix.transformPoint(rect.getWidth(), > rect.getHeight()); > + > + PDRectangle bbox = new PDRectangle(Math.abs((float) point2D.getX()), > Math.abs((float) point2D.getY())); > + appearanceStream.setBBox(bbox); > + } > + > private PDDefaultAppearanceString > getWidgetDefaultAppearanceString(PDAnnotationWidget widget) throws IOException > { > COSString da = (COSString) > widget.getCOSObject().getDictionaryObject(COSName.DA); > {code} -- This message was sent by Atlassian JIRA (v7.6.14#76016) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org