aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2008-02-05 12:34:56 +0000
committerJeremias Maerki <jeremias@apache.org>2008-02-05 12:34:56 +0000
commitc94bd88c7c3395bb625dbb156639024424641abd (patch)
tree2afeb707a839cd276ae3018543d881b2d9e9fd4d /src/java/org/apache
parent65d92ff2f5df13eeb3a0f3fd3b183a59351b1593 (diff)
downloadxmlgraphics-fop-c94bd88c7c3395bb625dbb156639024424641abd.tar.gz
xmlgraphics-fop-c94bd88c7c3395bb625dbb156639024424641abd.zip
Change PDFPage to use PDFDictionary in order to make it possible to better set MediaBox/TrimBox/BleedBox.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@618626 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache')
-rw-r--r--src/java/org/apache/fop/pdf/PDFArray.java14
-rw-r--r--src/java/org/apache/fop/pdf/PDFPage.java129
-rw-r--r--src/java/org/apache/fop/pdf/PDFResourceContext.java28
-rw-r--r--src/java/org/apache/fop/pdf/TransitionDictionary.java35
4 files changed, 73 insertions, 133 deletions
diff --git a/src/java/org/apache/fop/pdf/PDFArray.java b/src/java/org/apache/fop/pdf/PDFArray.java
index ec713b313..466ad7d6a 100644
--- a/src/java/org/apache/fop/pdf/PDFArray.java
+++ b/src/java/org/apache/fop/pdf/PDFArray.java
@@ -69,6 +69,20 @@ public class PDFArray extends PDFObject {
/**
* Create an array object.
* @param parent the array's parent if any
+ * @param values the actual array wrapped by this object
+ */
+ public PDFArray(PDFObject parent, double[] values) {
+ /* generic creation of PDF object */
+ super(parent);
+
+ for (int i = 0, c = values.length; i < c; i++) {
+ this.values.add(new Double(values[i]));
+ }
+ }
+
+ /**
+ * Create an array object.
+ * @param parent the array's parent if any
* @param values the actual values wrapped by this object
*/
public PDFArray(PDFObject parent, Collection values) {
diff --git a/src/java/org/apache/fop/pdf/PDFPage.java b/src/java/org/apache/fop/pdf/PDFPage.java
index 479600536..ee105f39b 100644
--- a/src/java/org/apache/fop/pdf/PDFPage.java
+++ b/src/java/org/apache/fop/pdf/PDFPage.java
@@ -19,6 +19,8 @@
package org.apache.fop.pdf;
+import java.awt.geom.Rectangle2D;
+
/**
* Class representing a /Page object.
* <p>
@@ -29,40 +31,10 @@ package org.apache.fop.pdf;
*/
public class PDFPage extends PDFResourceContext {
- /**
- * Holds a reference on the parent PDFPages object.
- */
- private String parentRef;
-
- /**
- * the contents stream
- */
- protected PDFStream contents;
-
- /**
- * the width of the page in points
- */
- protected int pagewidth;
-
- /**
- * the height of the page in points
- */
- protected int pageheight;
-
/** the page index (zero-based) */
protected int pageIndex;
/**
- * Duration to display page
- */
- protected int duration = -1;
-
- /**
- * Transition dictionary
- */
- protected TransitionDictionary trDictionary = null;
-
- /**
* Create a /Page object
*
* @param resources the /Resources object
@@ -77,10 +49,10 @@ public class PDFPage extends PDFResourceContext {
/* generic creation of object */
super(resources);
+ put("Type", new PDFName("Page"));
/* set fields using parameters */
- this.contents = contents;
- this.pagewidth = pageWidth;
- this.pageheight = pageHeight;
+ setContents(contents);
+ setSimplePageSize(pageWidth, pageHeight);
this.pageIndex = pageIndex;
}
@@ -97,13 +69,51 @@ public class PDFPage extends PDFResourceContext {
this(resources, null, pageWidth, pageHeight, pageIndex);
}
+ private void setSimplePageSize(int width, int height) {
+ Rectangle2D box = new Rectangle2D.Double(0, 0, width, height);
+ setMediaBox(box);
+ setBleedBox(box); //Recommended by PDF/X
+ setTrimBox(box); //Needed for PDF/X
+ }
+
+ private PDFArray toPDFArray(Rectangle2D box) {
+ return new PDFArray(this, new double[] {
+ box.getX(), box.getY(), box.getMaxX(), box.getMaxY()});
+ }
+
+ /**
+ * Sets the "MediaBox" entry
+ * @param box the media rectangle
+ */
+ public void setMediaBox(Rectangle2D box) {
+ put("MediaBox", toPDFArray(box));
+ }
+
+ /**
+ * Sets the "TrimBox" entry
+ * @param box the trim rectangle
+ */
+ public void setTrimBox(Rectangle2D box) {
+ put("TrimBox", toPDFArray(box));
+ }
+
+ /**
+ * Sets the "BleedBox" entry
+ * @param box the bleed rectangle
+ */
+ public void setBleedBox(Rectangle2D box) {
+ put("BleedBox", toPDFArray(box));
+ }
+
/**
* set this page contents
*
* @param contents the contents of the page
*/
public void setContents(PDFStream contents) {
- this.contents = contents;
+ if (contents != null) {
+ put("Contents", new PDFReference(contents));
+ }
}
/**
@@ -112,7 +122,7 @@ public class PDFPage extends PDFResourceContext {
* @param parent the /Pages object that is this page's parent
*/
public void setParent(PDFPages parent) {
- this.parentRef = parent.referencePDF();
+ put("Parent", new PDFReference(parent));
}
/**
@@ -124,24 +134,8 @@ public class PDFPage extends PDFResourceContext {
* @param tr the transition dictionary
*/
public void setTransition(int dur, TransitionDictionary tr) {
- duration = dur;
- trDictionary = tr;
- }
-
- /**
- * Returns the page width.
- * @return the page width
- */
- public int getWidth() {
- return this.pagewidth;
- }
-
- /**
- * Returns the page height.
- * @return the page height
- */
- public int getHeight() {
- return this.pageheight;
+ put("Dur", new Integer(dur));
+ put("Trans", tr);
}
/**
@@ -151,34 +145,5 @@ public class PDFPage extends PDFResourceContext {
public int getPageIndex() {
return this.pageIndex;
}
-
- /**
- * {@inheritDoc}
- */
- public String toPDFString() {
- StringBuffer sb = new StringBuffer();
-
- String box = "[ 0 0 " + getWidth() + " " + getHeight() + " ]";
- sb = sb.append(getObjectID()
- + "<< /Type /Page\n"
- + "/Parent " + this.parentRef + "\n"
- + "/MediaBox " + box + "\n"
- + "/TrimBox " + box + "\n" //Needed for PDF/X
- + "/BleedBox " + box + "\n" //Recommended by PDF/X
- + "/Resources " + this.resources.referencePDF() + "\n"
- + "/Contents " + this.contents.referencePDF() + "\n");
- if (this.annotList != null) {
- sb = sb.append("/Annots " + this.annotList.referencePDF() + "\n");
- }
- if (this.duration != -1) {
- sb = sb.append("/Dur " + this.duration + "\n");
- }
- if (this.trDictionary != null) {
- sb = sb.append("/Trans << " + this.trDictionary.getDictionary() + " >>\n");
- }
-
- sb = sb.append(">>\nendobj\n");
- return sb.toString();
- }
}
diff --git a/src/java/org/apache/fop/pdf/PDFResourceContext.java b/src/java/org/apache/fop/pdf/PDFResourceContext.java
index aa72f1bbe..6be18ce9d 100644
--- a/src/java/org/apache/fop/pdf/PDFResourceContext.java
+++ b/src/java/org/apache/fop/pdf/PDFResourceContext.java
@@ -33,17 +33,7 @@ package org.apache.fop.pdf;
* to the memory profile this was causing OOM issues. So, we store
* only the object ID of the parent, rather than the parent itself.
*/
-public class PDFResourceContext extends PDFObject {
-
- /**
- * the page's /Resource object
- */
- protected PDFResources resources;
-
- /**
- * the list of annotation objects for this page
- */
- protected PDFAnnotList annotList;
+public class PDFResourceContext extends PDFDictionary {
/**
* Creates a new ResourceContext.
@@ -54,9 +44,7 @@ public class PDFResourceContext extends PDFObject {
super();
/* set fields using parameters */
- //this.document = doc;
- this.resources = resources;
- this.annotList = null;
+ put("Resources", resources);
}
/**
@@ -65,7 +53,7 @@ public class PDFResourceContext extends PDFObject {
* @return the resources in this resource context
*/
public PDFResources getPDFResources() {
- return this.resources;
+ return (PDFResources)get("Resources");
}
/**
@@ -74,10 +62,12 @@ public class PDFResourceContext extends PDFObject {
* @param annot a PDFAnnotList list of annotations
*/
public void addAnnotation(PDFObject annot) {
- if (this.annotList == null) {
- this.annotList = getDocument().getFactory().makeAnnotList();
+ PDFAnnotList annotList = getAnnotations();
+ if (annotList == null) {
+ annotList = getDocument().getFactory().makeAnnotList();
+ put("Annots", annotList);
}
- this.annotList.addAnnot(annot);
+ annotList.addAnnot(annot);
}
/**
@@ -86,7 +76,7 @@ public class PDFResourceContext extends PDFObject {
* @return the current annotation list
*/
public PDFAnnotList getAnnotations() {
- return this.annotList;
+ return (PDFAnnotList)get("Annots");
}
/**
diff --git a/src/java/org/apache/fop/pdf/TransitionDictionary.java b/src/java/org/apache/fop/pdf/TransitionDictionary.java
index bd115bee4..5c779d8fe 100644
--- a/src/java/org/apache/fop/pdf/TransitionDictionary.java
+++ b/src/java/org/apache/fop/pdf/TransitionDictionary.java
@@ -19,50 +19,21 @@
package org.apache.fop.pdf;
-import java.util.Map;
-import java.util.Iterator;
-
/**
* Transition Dictionary
* This class is used to build a transition dictionary to
* specify the transition between pages.
*/
-public class TransitionDictionary extends PDFObject {
-
- private Map dictionaryValues;
+public class TransitionDictionary extends PDFDictionary {
/**
* Create a Transition Dictionary
*
* @param values the dictionary values to output
*/
- public TransitionDictionary(Map values) {
- dictionaryValues = values;
+ public TransitionDictionary() {
+ put("Type", new PDFName("Trans"));
}
- /**
- * Get the dictionary.
- * This returns the string containing the dictionary values.
- *
- * @return the string with the dictionary values
- */
- public String getDictionary() {
- StringBuffer sb = new StringBuffer();
- sb.append("/Type /Trans\n");
- for (Iterator iter = dictionaryValues.keySet().iterator(); iter.hasNext();) {
- Object key = iter.next();
- sb.append(key + " " + dictionaryValues.get(key) + "\n");
- }
- return sb.toString();
- }
-
- /**
- * there is nothing to return for the toPDF method, as it should not be called
- *
- * @return an empty string
- */
- public byte[] toPDF() {
- return new byte[0];
- }
}