svn commit: r1779919 - in /xmlgraphics/fop-pdf-images/trunk: src/java/org/apache/fop/render/pdf/pdfbox/ test/java/org/apache/fop/render/pdf/

[email protected]
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
Author: ssteiner
Date: Mon Jan 23 12:19:11 2017
New Revision: 1779919

URL: http://svn.apache.org/viewvc?rev=1779919&view=rev
Log:
FOP-2683: PDF Annotation ClassCastException

Modified:
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
    xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
    xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java?rev=1779919&r1=1779918&r2=1779919&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/PDFBoxAdapter.java Mon Jan 23 12:19:11 2017
@@ -638,16 +638,10 @@ public class PDFBoxAdapter {
                 exclude.add(COSName.P);
                 if (annot1 instanceof COSObject) {
                     COSObject annot = (COSObject) annot1;
-                    COSObject fieldObject = annot;
-                    COSDictionary field = (COSDictionary) fieldObject.getObject();
-                    COSObject parent;
-                    while ((parent = (COSObject) field.getItem(COSName.PARENT)) != null) {
-                        fieldObject = parent;
-                        field = (COSDictionary) fieldObject.getObject();
-                    }
-                    fields.add(fieldObject);
+                    getField(annot, fields);
+
 
-                    if (((COSDictionary) annot.getObject()).getItem(COSName.getPDFName("StructParent")) != null) {
+                    if (((COSDictionary) annot.getObject()).getItem(COSName.STRUCT_PARENT) != null) {
                         exclude.add(COSName.PARENT);
                     }
                 }
@@ -663,6 +657,25 @@ public class PDFBoxAdapter {
         return fields;
     }
 
+    private COSDictionary getField(COSObject fieldObject, Set<COSObject> fields) {
+        COSDictionary field = (COSDictionary) fieldObject.getObject();
+        COSObject parent;
+        while ((parent = getParent(field)) != null) {
+            fieldObject = parent;
+            field = (COSDictionary) fieldObject.getObject();
+        }
+        fields.add(fieldObject);
+        return field;
+    }
+
+    private COSObject getParent(COSDictionary field) {
+        COSBase parent = field.getItem(COSName.PARENT);
+        if (parent instanceof COSObject) {
+            return (COSObject) parent;
+        }
+        return null;
+    }
+
     static class CompareFields implements Comparator<COSObject>, Serializable {
         private static final long serialVersionUID = -6081505461660440801L;
 

Modified: xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java?rev=1779919&r1=1779918&r2=1779919&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java Mon Jan 23 12:19:11 2017
@@ -194,8 +194,7 @@ public class StructureTreeMerger {
             copyElemEntries(cosParentElem, elemParent);
             elem.setParent(elemParent);
             fillKidsWithNull(elemParent, (COSDictionary)cosParentElem.getObject());
-            if (((COSName)parentElemDictionary.getDictionaryObject(COSName.S)).getName()
-                .equals(StandardStructureTypes.TR)) {
+            if (parentElemDictionary.getDictionaryObject(COSName.S) == COSName.TR) {
                 COSBase rowKids = parentElemDictionary.getItem(COSName.K);
                 createKids(rowKids, parentElemDictionary, elemParent, true);
             } else {
@@ -378,7 +377,7 @@ public class StructureTreeMerger {
         for (COSBase base : originalParentTree) {
             if (base instanceof COSNull || base == null) {
                 complete.add(null);
-            } else {
+            } else if (!list.isEmpty()) {
                 complete.add(list.get(0));
                 list.remove(0);
             }

Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java?rev=1779919&r1=1779918&r2=1779919&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/PDFBoxAdapterTestCase.java Mon Jan 23 12:19:11 2017
@@ -28,6 +28,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -44,8 +45,11 @@ import org.apache.fontbox.cff.CFFFont;
 import org.apache.fontbox.cff.CFFParser;
 import org.apache.fontbox.ttf.TTFParser;
 import org.apache.fontbox.type1.Type1Font;
+import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSDictionary;
+import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDResources;
@@ -112,10 +116,10 @@ public class PDFBoxAdapterTestCase {
     private static final String XFORM = "test/resources/xform.pdf";
     private static final String LOOP = "test/resources/loop.pdf";
 
-    private PDFBoxAdapter getPDFBoxAdapter() {
+    private PDFBoxAdapter getPDFBoxAdapter(boolean mergeFonts) {
         PDFDocument doc = new PDFDocument("");
         PDFPage pdfpage = new PDFPage(new PDFResources(doc), 0, r, r, r, r);
-        doc.setMergeFontsEnabled(true);
+        doc.setMergeFontsEnabled(mergeFonts);
         pdfpage.setDocument(doc);
         pdfpage.setObjectNumber(1);
         return new PDFBoxAdapter(pdfpage, new HashMap(), new HashMap<Integer, PDFArray>());
@@ -180,7 +184,7 @@ public class PDFBoxAdapterTestCase {
         PDDocument doc = PDDocument.load(new File(pdf));
         PDPage page = doc.getDocumentCatalog().getPages().get(0);
         AffineTransform at = new AffineTransform();
-        String c = getPDFBoxAdapter().createStreamFromPDFBoxPage(doc, page, pdf, at, fi, new Rectangle());
+        String c = getPDFBoxAdapter(true).createStreamFromPDFBoxPage(doc, page, pdf, at, fi, new Rectangle());
 //        PDResources sourcePageResources = page.findResources();
 //        COSDictionary fonts = (COSDictionary)sourcePageResources.getCOSDictionary().getDictionaryObject(COSName.FONT);
 //        PDFBoxAdapter.PDFWriter w = adapter. new MergeFontsPDFWriter(fonts, fi, "", new ArrayList<COSName>());
@@ -356,6 +360,21 @@ public class PDFBoxAdapterTestCase {
     }
 
     @Test
+    public void testAnnot2() throws Exception {
+        PDFBoxAdapter adapter = getPDFBoxAdapter(false);
+        PDDocument doc = PDDocument.load(new File(ANNOT));
+        PDPage page = doc.getDocumentCatalog().getPages().get(0);
+        COSArray annots = (COSArray) page.getCOSObject().getDictionaryObject(COSName.ANNOTS);
+        COSDictionary dict = (COSDictionary) ((COSObject)annots.get(0)).getObject();
+        dict.setItem(COSName.PARENT, COSInteger.ONE);
+
+        AffineTransform at = new AffineTransform();
+        Rectangle r = new Rectangle(0, 1650, 842000, 595000);
+        adapter.createStreamFromPDFBoxPage(doc, page, "key", at, null, r);
+        doc.close();
+    }
+
+    @Test
     public void testLink() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
         PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
@@ -378,7 +397,7 @@ public class PDFBoxAdapterTestCase {
     @Test
     public void testXform() throws Exception {
         PDFDocument pdfdoc = new PDFDocument("");
-        pdfdoc.getFilterMap().put(PDFFilterList.DEFAULT_FILTER, Arrays.asList("null"));
+        pdfdoc.getFilterMap().put(PDFFilterList.DEFAULT_FILTER, Collections.singletonList("null"));
         pdfdoc.setMergeFontsEnabled(true);
         PDFPage pdfpage = new PDFPage(new PDFResources(pdfdoc), 0, r, r, r, r);
         pdfpage.setDocument(pdfdoc);

Modified: xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java?rev=1779919&r1=1779918&r2=1779919&view=diff
==============================================================================
--- xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java (original)
+++ xmlgraphics/fop-pdf-images/trunk/test/java/org/apache/fop/render/pdf/StructureTreeMergerUtilTestCase.java Mon Jan 23 12:19:11 2017
@@ -35,9 +35,9 @@ public class StructureTreeMergerUtilTest
 
         COSDictionary rolemap = new COSDictionary();
         COSName key1 = COSName.getPDFName("Para");
-        COSName value1 = COSName.getPDFName("P");
+        COSName value1 = COSName.P;
         COSName key2 = COSName.getPDFName("Icon");
-        COSName value2 = COSName.getPDFName("Image");
+        COSName value2 = COSName.IMAGE;
         rolemap.setItem(key1, value1);
         rolemap.setItem(key2, value2);
         String type = "Image";
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.