Hi all.

I added an extension element that allows to set entries in the PDF document
information map. The extenstion element is a root extension element and it
has two attributes: document-info-key and document-info-value. A usage example
is:

<fox:document-info document-info-key="CreationDate"
document-info-value="2003-03-19"/>

I hope someone has time to look on it and can commit it into the CVS. The
supplied patch is taken from the current CVS (fop-0_20_2-maintain branch).

--Stefan

PS: The following diff is the same as in the attachment:

Only in projekte/infotakt/vdp/xml-fop: build
diff -x .nbattrs -ru fop/xml-fop/src/codegen/extproperties.xml
projekte/infotakt/vdp/xml-fop/src/codegen/extproperties.xml
--- fop/xml-fop/src/codegen/extproperties.xml   Wed Mar 19 08:46:33 2003
+++ projekte/infotakt/vdp/xml-fop/src/codegen/extproperties.xml Wed Mar 19
09:27:48 2003
@@ -19,5 +19,17 @@
       <datatype>String</datatype>
       <default></default>
     </property>
+    <property>
+      <name>document-info-key</name>
+      <inherited>false</inherited>
+      <datatype>String</datatype>
+      <default/>
+    </property>
+    <property>
+      <name>document-info-value</name>
+      <inherited>false</inherited>
+      <datatype>String</datatype>
+      <default/>
+    </property>
   </generic-property-list>
 </property-list>
diff -x .nbattrs -ru fop/xml-fop/src/codegen/foproperties.xml
projekte/infotakt/vdp/xml-fop/src/codegen/foproperties.xml
--- fop/xml-fop/src/codegen/foproperties.xml    Wed Mar 19 08:46:33 2003
+++ projekte/infotakt/vdp/xml-fop/src/codegen/foproperties.xml  Wed Mar 19
08:54:36 2003
@@ -1650,6 +1650,20 @@
       <datatype>String</datatype>
       <default></default>
     </property>
+    <!-- property of document-info extension element -->
+    <property>
+      <name>document-info-key</name>
+      <inherited>false</inherited>
+      <datatype>String</datatype>
+      <default/>
+    </property>
+    <!-- property of document-info extension element -->
+    <property>
+      <name>document-info-value</name>
+      <inherited>false</inherited>
+      <datatype>String</datatype>
+      <default/>
+    </property>
     <property>
       <name>show-destination</name>
       <inherited>false</inherited>
Only in projekte/infotakt/vdp/xml-fop/src/org/apache/fop/extensions:
DocumentInfo.java
diff -x .nbattrs -ru
fop/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java
---
fop/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java  Wed Mar 19 
08:46:33 2003
+++
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java
        Wed Mar 19 09:01:15 2003
@@ -70,6 +70,7 @@
             foObjs.put("label", Label.maker());
             foObjs.put("continued-label", ContinuedLabel.maker());
             foObjs.put("destination", Destination.maker());
+            foObjs.put("document-info", DocumentInfo.maker());
         }
     }
 
diff -x .nbattrs -ru fop/xml-fop/src/org/apache/fop/pdf/PDFDocument.java
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/pdf/PDFDocument.java
--- fop/xml-fop/src/org/apache/fop/pdf/PDFDocument.java Wed Mar 19 08:46:33
2003
+++
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/pdf/PDFDocument.java   Wed Mar 19 
09:08:25 2003
@@ -314,7 +314,11 @@
         PDFInfo pdfInfo = new PDFInfo(++this.objectcount);
         // set the default producer
         pdfInfo.setProducer(org.apache.fop.apps.Version.getVersion());
-        this.objects.add(pdfInfo);
+        
+        // The document info is a trailer object. Extension elements have
+        // a chance to add document info before it is rendered.
+        addTrailerObject(pdfInfo);
+        
         return pdfInfo;
     }
 
@@ -1436,4 +1440,12 @@
        root.getDestinations().add(obj);
     }
     
+    /**
+     * Sets an entry in the document information map.
+     * @param aKey (required).
+     * @param aValue (required).
+     */
+    public void setInfoEntry(String aKey, String aValue) {
+        info.setEntry(aKey, aValue);
+    }
 }
diff -x .nbattrs -ru fop/xml-fop/src/org/apache/fop/pdf/PDFInfo.java
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/pdf/PDFInfo.java
--- fop/xml-fop/src/org/apache/fop/pdf/PDFInfo.java     Wed Mar 19 08:46:33 2003
+++ projekte/infotakt/vdp/xml-fop/src/org/apache/fop/pdf/PDFInfo.java   Wed
Mar 19 09:26:39 2003
@@ -52,6 +52,7 @@
 
 // Java
 import java.io.UnsupportedEncodingException;
+import java.util.*;
 
 /**
  * class representing an /Info object
@@ -59,10 +60,10 @@
 public class PDFInfo extends PDFObject {
 
     /**
-     * the application producing the PDF
+     * Maps entry names (like "CreationDate" or "Producer" to string
values.
      */
-    protected String producer;
-
+    private Map entries = new HashMap();
+    
     /**
      * create an Info object
      *
@@ -78,7 +79,7 @@
      * @param producer the producer string
      */
     public void setProducer(String producer) {
-        this.producer = producer;
+        setEntry("Producer", producer);
     }
 
     /**
@@ -87,14 +88,26 @@
      * @return the PDF
      */
     public byte[] toPDF() {
-        String p = this.number + " " + this.generation
-                   + " obj\n<< /Type /Info\n/Producer (" + this.producer
-                   + ") >>\nendobj\n";
+        StringBuffer b = new StringBuffer();
+        b.append(number).append(" ").append(generation).append(" obj\n<<");
+        b.append(" /Type /Info\n");
+        for (Iterator i = entries.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry me = (Map.Entry)i.next();
+            b.append(" /").append(me.getKey()).append("
(").append(me.getValue()).append(")\n");
+        }
+        b.append(">>\nendobj\n");
         try {
-            return p.getBytes(PDFDocument.ENCODING);
+            return b.toString().getBytes(PDFDocument.ENCODING);
         } catch (UnsupportedEncodingException ue) {
-            return p.getBytes();
+            return b.toString().getBytes();
         }       
+    }
+    
+    /**
+     * Sets an entry in the information map.
+     */
+    public void setEntry(String aKey, String aValue) {
+        entries.put(aKey, aValue);
     }
 
 }
diff -x .nbattrs -ru
fop/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java
--- fop/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java  Wed Mar 19
08:46:33 2003
+++
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java    Wed 
Mar 19 09:20:27 2003
@@ -985,6 +985,9 @@
                 } else if (ext instanceof Destination) {
                     Destination d = (Destination)ext;
                     pdfDoc.addDestination(d.getDestinationName(),
d.getInternalDestination());
+                } else if (ext instanceof DocumentInfo) {
+                    DocumentInfo info = (DocumentInfo)ext;
+                    pdfDoc.setInfoEntry(info.getDocumentInfoKey(),
info.getDocumentInfoValue());
                 }
             }
         }
Only in projekte/infotakt/vdp/xml-fop: build
diff -x .nbattrs -ru fop/xml-fop/src/codegen/extproperties.xml 
projekte/infotakt/vdp/xml-fop/src/codegen/extproperties.xml
--- fop/xml-fop/src/codegen/extproperties.xml   Wed Mar 19 08:46:33 2003
+++ projekte/infotakt/vdp/xml-fop/src/codegen/extproperties.xml Wed Mar 19 09:27:48 
2003
@@ -19,5 +19,17 @@
       <datatype>String</datatype>
       <default></default>
     </property>
+    <property>
+      <name>document-info-key</name>
+      <inherited>false</inherited>
+      <datatype>String</datatype>
+      <default/>
+    </property>
+    <property>
+      <name>document-info-value</name>
+      <inherited>false</inherited>
+      <datatype>String</datatype>
+      <default/>
+    </property>
   </generic-property-list>
 </property-list>
diff -x .nbattrs -ru fop/xml-fop/src/codegen/foproperties.xml 
projekte/infotakt/vdp/xml-fop/src/codegen/foproperties.xml
--- fop/xml-fop/src/codegen/foproperties.xml    Wed Mar 19 08:46:33 2003
+++ projekte/infotakt/vdp/xml-fop/src/codegen/foproperties.xml  Wed Mar 19 08:54:36 
2003
@@ -1650,6 +1650,20 @@
       <datatype>String</datatype>
       <default></default>
     </property>
+    <!-- property of document-info extension element -->
+    <property>
+      <name>document-info-key</name>
+      <inherited>false</inherited>
+      <datatype>String</datatype>
+      <default/>
+    </property>
+    <!-- property of document-info extension element -->
+    <property>
+      <name>document-info-value</name>
+      <inherited>false</inherited>
+      <datatype>String</datatype>
+      <default/>
+    </property>
     <property>
       <name>show-destination</name>
       <inherited>false</inherited>
Only in projekte/infotakt/vdp/xml-fop/src/org/apache/fop/extensions: DocumentInfo.java
diff -x .nbattrs -ru 
fop/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java 
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java
--- fop/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java      Wed 
Mar 19 08:46:33 2003
+++ 
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java
    Wed Mar 19 09:01:15 2003
@@ -70,6 +70,7 @@
             foObjs.put("label", Label.maker());
             foObjs.put("continued-label", ContinuedLabel.maker());
             foObjs.put("destination", Destination.maker());
+            foObjs.put("document-info", DocumentInfo.maker());
         }
     }
 
diff -x .nbattrs -ru fop/xml-fop/src/org/apache/fop/pdf/PDFDocument.java 
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/pdf/PDFDocument.java
--- fop/xml-fop/src/org/apache/fop/pdf/PDFDocument.java Wed Mar 19 08:46:33 2003
+++ projekte/infotakt/vdp/xml-fop/src/org/apache/fop/pdf/PDFDocument.java       Wed 
Mar 19 09:08:25 2003
@@ -314,7 +314,11 @@
         PDFInfo pdfInfo = new PDFInfo(++this.objectcount);
         // set the default producer
         pdfInfo.setProducer(org.apache.fop.apps.Version.getVersion());
-        this.objects.add(pdfInfo);
+        
+        // The document info is a trailer object. Extension elements have
+        // a chance to add document info before it is rendered.
+        addTrailerObject(pdfInfo);
+        
         return pdfInfo;
     }
 
@@ -1436,4 +1440,12 @@
        root.getDestinations().add(obj);
     }
     
+    /**
+     * Sets an entry in the document information map.
+     * @param aKey (required).
+     * @param aValue (required).
+     */
+    public void setInfoEntry(String aKey, String aValue) {
+        info.setEntry(aKey, aValue);
+    }
 }
diff -x .nbattrs -ru fop/xml-fop/src/org/apache/fop/pdf/PDFInfo.java 
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/pdf/PDFInfo.java
--- fop/xml-fop/src/org/apache/fop/pdf/PDFInfo.java     Wed Mar 19 08:46:33 2003
+++ projekte/infotakt/vdp/xml-fop/src/org/apache/fop/pdf/PDFInfo.java   Wed Mar 19 
09:26:39 2003
@@ -52,6 +52,7 @@
 
 // Java
 import java.io.UnsupportedEncodingException;
+import java.util.*;
 
 /**
  * class representing an /Info object
@@ -59,10 +60,10 @@
 public class PDFInfo extends PDFObject {
 
     /**
-     * the application producing the PDF
+     * Maps entry names (like "CreationDate" or "Producer" to string values.
      */
-    protected String producer;
-
+    private Map entries = new HashMap();
+    
     /**
      * create an Info object
      *
@@ -78,7 +79,7 @@
      * @param producer the producer string
      */
     public void setProducer(String producer) {
-        this.producer = producer;
+        setEntry("Producer", producer);
     }
 
     /**
@@ -87,14 +88,26 @@
      * @return the PDF
      */
     public byte[] toPDF() {
-        String p = this.number + " " + this.generation
-                   + " obj\n<< /Type /Info\n/Producer (" + this.producer
-                   + ") >>\nendobj\n";
+        StringBuffer b = new StringBuffer();
+        b.append(number).append(" ").append(generation).append(" obj\n<<");
+        b.append(" /Type /Info\n");
+        for (Iterator i = entries.entrySet().iterator(); i.hasNext(); ) {
+            Map.Entry me = (Map.Entry)i.next();
+            b.append(" /").append(me.getKey()).append(" 
(").append(me.getValue()).append(")\n");
+        }
+        b.append(">>\nendobj\n");
         try {
-            return p.getBytes(PDFDocument.ENCODING);
+            return b.toString().getBytes(PDFDocument.ENCODING);
         } catch (UnsupportedEncodingException ue) {
-            return p.getBytes();
+            return b.toString().getBytes();
         }       
+    }
+    
+    /**
+     * Sets an entry in the information map.
+     */
+    public void setEntry(String aKey, String aValue) {
+        entries.put(aKey, aValue);
     }
 
 }
diff -x .nbattrs -ru fop/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java 
projekte/infotakt/vdp/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java
--- fop/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java  Wed Mar 19 08:46:33 
2003
+++ projekte/infotakt/vdp/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java       
 Wed Mar 19 09:20:27 2003
@@ -985,6 +985,9 @@
                 } else if (ext instanceof Destination) {
                     Destination d = (Destination)ext;
                     pdfDoc.addDestination(d.getDestinationName(), 
d.getInternalDestination());
+                } else if (ext instanceof DocumentInfo) {
+                    DocumentInfo info = (DocumentInfo)ext;
+                    pdfDoc.setInfoEntry(info.getDocumentInfoKey(), 
info.getDocumentInfoValue());
                 }
             }
         }

Attachment: DocumentInfo.java
Description: Binary data

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to