You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ss...@apache.org on 2015/06/11 17:46:20 UTC

svn commit: r1684928 - in /xmlgraphics/fop/trunk/src/java/org/apache/fop: pdf/PDFDictionary.java pdf/PDFStructElem.java render/pdf/PDFLogicalStructureHandler.java render/pdf/PDFPainter.java render/pdf/PDFRenderingContext.java

Author: ssteiner
Date: Thu Jun 11 15:46:20 2015
New Revision: 1684928

URL: http://svn.apache.org/r1684928
Log:
FOP-2436: Merging of Tagged (Accessible) PDF

Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFPainter.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderingContext.java

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java?rev=1684928&r1=1684927&r2=1684928&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDictionary.java Thu Jun 11 15:46:20 2015
@@ -161,4 +161,26 @@ public class PDFDictionary extends PDFOb
             }
         }
     }
+
+    public Set<String> keySet() {
+        return entries.keySet();
+    }
+
+    /**
+     * @see java.util.Map#containsKey(Object)
+     *
+     * @param name The key to find in the map.
+     * @return true if the map contains this key.
+     */
+    public boolean containsKey(String name) {
+        return this.entries.containsKey(name);
+    }
+
+    /**
+     * Removes the mapping for the specified key
+     * @param name  key whose mapping is to be removed
+     */
+    public void remove(String name) {
+        entries.remove(name);
+    }
 }

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java?rev=1684928&r1=1684927&r2=1684928&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFStructElem.java Thu Jun 11 15:46:20 2015
@@ -47,6 +47,12 @@ public class PDFStructElem extends Struc
     private List<PDFDictionary> attributes;
 
     /**
+     * Creates PDFStructElem with no entries.
+     */
+    public PDFStructElem() {
+    }
+
+    /**
      * Creates a new structure element.
      *
      * @param parent parent of this element
@@ -170,6 +176,22 @@ public class PDFStructElem extends Struc
         }
     }
 
+    public void addKidInSpecificOrder(int position, PDFStructElem kid) {
+        if (kids == null) {
+            addKid(kid);
+        } else {
+            if ((kids.size() - 1) < position) {
+                kids.add(kid);
+            } else if (kids.get(position) == null) {
+                kids.set(position, kid);
+            } else {
+                if (!kids.contains(kid)) {
+                    kids.add(position, kid);
+                }
+            }
+        }
+    }
+
     /**
      * Attaches all valid kids to the kids array.
      *
@@ -217,6 +239,10 @@ public class PDFStructElem extends Struc
         attributes.add(attribute);
     }
 
+    public List<PDFObject> getKids() {
+        return this.kids;
+    }
+
     /**
      * Class representing a placeholder for a PDF Structure Element.
      */

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java?rev=1684928&r1=1684927&r2=1684928&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFLogicalStructureHandler.java Thu Jun 11 15:46:20 2015
@@ -32,7 +32,7 @@ import org.apache.fop.pdf.PDFStructElem;
 /**
  * Handles the creation of the logical structure in the PDF document.
  */
-class PDFLogicalStructureHandler {
+public class PDFLogicalStructureHandler {
 
     private static final PDFName MCR = new PDFName("MCR");
 
@@ -92,11 +92,15 @@ class PDFLogicalStructureHandler {
         this.pdfDoc = pdfDoc;
     }
 
-    PDFParentTree getParentTree() {
+    public PDFArray getPageParentTree() {
+        return this.pageParentTreeArray;
+    }
+
+    public PDFParentTree getParentTree() {
         return parentTree;
     }
 
-    private int getNextParentTreeKey() {
+    public int getNextParentTreeKey() {
         return parentTreeKey++;
     }
 

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFPainter.java?rev=1684928&r1=1684927&r2=1684928&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFPainter.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFPainter.java Thu Jun 11 15:46:20 2015
@@ -25,6 +25,7 @@ import java.awt.Paint;
 import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Locale;
@@ -32,6 +33,12 @@ import java.util.Set;
 
 import org.w3c.dom.Document;
 
+import org.apache.xmlgraphics.image.loader.ImageException;
+import org.apache.xmlgraphics.image.loader.ImageInfo;
+import org.apache.xmlgraphics.image.loader.ImageManager;
+import org.apache.xmlgraphics.image.loader.ImageSessionContext;
+
+import org.apache.fop.ResourceEventProducer;
 import org.apache.fop.fonts.Font;
 import org.apache.fop.fonts.FontTriplet;
 import org.apache.fop.fonts.LazyFont;
@@ -166,10 +173,6 @@ public class PDFPainter extends Abstract
                 placeImage(rect, xobject);
             }
         } else {
-            if (accessEnabled) {
-                PDFStructElem structElem = (PDFStructElem) getContext().getStructureTreeElement();
-                prepareImageMCID(structElem);
-            }
             drawImageUsingURI(uri, rect);
             if (!getDocumentHandler().getPDFDocument().isLinearizationEnabled()) {
                 flushPDFDoc();
@@ -177,6 +180,36 @@ public class PDFPainter extends Abstract
         }
     }
 
+    @Override
+    protected void drawImageUsingURI(String uri, Rectangle rect) {
+        ImageManager manager = getUserAgent().getImageManager();
+        ImageInfo info = null;
+        try {
+            ImageSessionContext sessionContext = getUserAgent().getImageSessionContext();
+            info = manager.getImageInfo(uri, sessionContext);
+            if (accessEnabled) {
+                PDFStructElem structElem = (PDFStructElem) getContext().getStructureTreeElement();
+                String mimeType = info.getMimeType();
+                if (!mimeType.equalsIgnoreCase("application/pdf")) {
+                    prepareImageMCID(structElem);
+                }
+            }
+            drawImageUsingImageHandler(info, rect);
+        } catch (ImageException ie) {
+            ResourceEventProducer eventProducer = ResourceEventProducer.Provider.get(
+                    getUserAgent().getEventBroadcaster());
+            eventProducer.imageError(this, (info != null ? info.toString() : uri), ie, null);
+        } catch (FileNotFoundException fe) {
+            ResourceEventProducer eventProducer = ResourceEventProducer.Provider.get(
+                    getUserAgent().getEventBroadcaster());
+            eventProducer.imageNotFound(this, (info != null ? info.toString() : uri), fe, null);
+        } catch (IOException ioe) {
+            ResourceEventProducer eventProducer = ResourceEventProducer.Provider.get(
+                    getUserAgent().getEventBroadcaster());
+            eventProducer.imageIOError(this, (info != null ? info.toString() : uri), ioe, null);
+        }
+    }
+
     private void prepareImageMCID(PDFStructElem structElem) {
         imageMCI = logicalStructureHandler.addImageContentItem(structElem);
         if (structElem != null) {
@@ -191,6 +224,8 @@ public class PDFPainter extends Abstract
                 getUserAgent(), generator, getDocumentHandler().getCurrentPage(), getFontInfo());
         pdfContext.setMarkedContentInfo(imageMCI);
         pdfContext.setPageNumbers(getDocumentHandler().getPageNumbers());
+        pdfContext.setPdfLogicalStructureHandler(logicalStructureHandler);
+        pdfContext.setCurrentSessionStructElem((PDFStructElem) getContext().getStructureTreeElement());
         return pdfContext;
     }
 

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderingContext.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderingContext.java?rev=1684928&r1=1684927&r2=1684928&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderingContext.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFRenderingContext.java Thu Jun 11 15:46:20 2015
@@ -27,6 +27,7 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.pdf.PDFArray;
 import org.apache.fop.pdf.PDFPage;
+import org.apache.fop.pdf.PDFStructElem;
 import org.apache.fop.render.AbstractRenderingContext;
 import org.apache.fop.render.pdf.PDFLogicalStructureHandler.MarkedContentInfo;
 
@@ -40,6 +41,8 @@ public class PDFRenderingContext extends
     private PDFPage page;
     private MarkedContentInfo mci;
     private Map<Integer, PDFArray> pageNumbers;
+    private PDFLogicalStructureHandler pdfLogicalStructureHandler;
+    private PDFStructElem currentSessionStructElem;
 
     /**
      * Main constructor.
@@ -100,4 +103,20 @@ public class PDFRenderingContext extends
     public void setPageNumbers(Map<Integer, PDFArray> pageNumbers) {
         this.pageNumbers = pageNumbers;
     }
+
+    public PDFLogicalStructureHandler getPdfLogicalStructureHandler() {
+        return pdfLogicalStructureHandler;
+    }
+
+    public void setPdfLogicalStructureHandler(PDFLogicalStructureHandler pdfLogicalStructureHandler) {
+        this.pdfLogicalStructureHandler = pdfLogicalStructureHandler;
+    }
+
+    public PDFStructElem getCurrentSessionStructElem() {
+        return currentSessionStructElem;
+    }
+
+    public void setCurrentSessionStructElem(PDFStructElem currentSessionStructElem) {
+        this.currentSessionStructElem = currentSessionStructElem;
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org