You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2020/09/12 09:00:49 UTC
svn commit: r1881657 -
/pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
Author: tilman
Date: Sat Sep 12 09:00:49 2020
New Revision: 1881657
URL: http://svn.apache.org/viewvc?rev=1881657&view=rev
Log:
PDFBOX-4955: part content stream and ignore Form XObjects if they are not used
Modified:
pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
Modified: pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java?rev=1881657&r1=1881656&r2=1881657&view=diff
==============================================================================
--- pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java (original)
+++ pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java Sat Sep 12 09:00:49 2020
@@ -28,11 +28,13 @@ import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.pdfbox.contentstream.operator.Operator;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.pdfparser.PDFStreamParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
@@ -768,6 +770,18 @@ public final class PDAcroForm implements
return true;
}
Iterator<COSName> xObjectNames = resources.getXObjectNames().iterator();
+ List<Object> tokens;
+ try
+ {
+ PDFStreamParser pdfStreamParser = new PDFStreamParser(appearanceStream);
+ pdfStreamParser.parse();
+ tokens = pdfStreamParser.getTokens();
+ }
+ catch (IOException ex)
+ {
+ LOG.debug("Couldn't not parse appearance content stream - content might be misplaced", ex);
+ return true;
+ }
while (xObjectNames.hasNext())
{
try
@@ -783,7 +797,15 @@ public final class PDAcroForm implements
float llY = bbox.getLowerLeftY();
if (Float.compare(llX, 0) != 0 && Float.compare(llY, 0) != 0)
{
- return false;
+ // PDFBOX-4955: only if used
+ for (int i = 0; i < tokens.size(); ++i)
+ {
+ if (tokens.get(i).equals(name) && i < tokens.size() - 1 &&
+ tokens.get(i + 1).equals(Operator.getOperator("Do")))
+ {
+ return false;
+ }
+ }
}
}
}