You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2014/08/30 17:27:56 UTC
svn commit: r1621472 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java
Author: lehmi
Date: Sat Aug 30 15:27:56 2014
New Revision: 1621472
URL: http://svn.apache.org/r1621472
Log:
PDFBOX-2291: use PDFormXObject to create the overlay xobject
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java?rev=1621472&r1=1621471&r2=1621472&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java Sat Aug 30 15:27:56 2014
@@ -16,6 +16,7 @@
*/
package org.apache.pdfbox.util;
+import java.awt.geom.AffineTransform;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -28,7 +29,6 @@ import java.util.Map;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
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.cos.COSStream;
@@ -38,6 +38,8 @@ import org.apache.pdfbox.pdmodel.PDDocum
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.common.PDStream;
+import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
/**
* Adds an overlay to an existing PDF document.
@@ -48,7 +50,7 @@ import org.apache.pdfbox.pdmodel.common.
public class Overlay
{
/**
- * Possible loacation of the overlayed pages: foreground or background.
+ * Possible location of the overlayed pages: foreground or background.
*/
public enum Position
{
@@ -94,7 +96,7 @@ public class Overlay
PDDocument evenPageOverlay = null;
try
{
- sourcePDFDocument = PDDocument.load(inputFileName);
+ sourcePDFDocument = loadPDF(inputFileName,useNonSeqParser);
if (defaultOverlayFilename != null)
{
defaultOverlay = loadPDF(defaultOverlayFilename, useNonSeqParser);
@@ -117,14 +119,6 @@ public class Overlay
}
if (evenPageOverlayFilename != null)
{
- if (useNonSeqParser)
- {
- evenPageOverlay = PDDocument.loadNonSeq(new File(evenPageOverlayFilename), null);
- }
- else
- {
- evenPageOverlay = PDDocument.load(evenPageOverlayFilename);
- }
evenPageOverlay = loadPDF(evenPageOverlayFilename, useNonSeqParser);
evenPageOverlayPage = getLayoutPage(evenPageOverlay);
}
@@ -366,50 +360,13 @@ public class Overlay
private String createOverlayXObject(PDPage page, LayoutPage layoutPage, COSStream contentStream)
{
+ PDFormXObject xobjForm = new PDFormXObject(new PDStream(contentStream));
+ xobjForm.setResources(new PDResources(layoutPage.overlayResources));
+ xobjForm.setFormType(1);
+ xobjForm.setBBox( layoutPage.overlayMediaBox.createRetranslatedRectangle());
+ xobjForm.setMatrix(new AffineTransform());
PDResources resources = page.findResources();
- // determine new ID
- COSDictionary dict = (COSDictionary) resources.getCOSDictionary().getDictionaryObject(
- COSName.XOBJECT);
- if (dict == null)
- {
- dict = new COSDictionary();
- resources.getCOSDictionary().setItem(COSName.XOBJECT, dict);
- }
- String xObjectId = getNextUniqueKey(resources.getXObjects(), XOBJECT_PREFIX);
-
- // wrap the layout content in a BBox and add it to page
- COSStream xobj = contentStream;
- xobj.setItem(COSName.RESOURCES, layoutPage.overlayResources);
- xobj.setItem(COSName.TYPE, COSName.XOBJECT);
- xobj.setItem(COSName.SUBTYPE, COSName.FORM);
- xobj.setInt(COSName.FORMTYPE, 1);
- COSArray matrix = new COSArray();
- matrix.add(COSInteger.get(1));
- matrix.add(COSInteger.get(0));
- matrix.add(COSInteger.get(0));
- matrix.add(COSInteger.get(1));
- matrix.add(COSInteger.get(0));
- matrix.add(COSInteger.get(0));
- xobj.setItem(COSName.MATRIX, matrix);
- COSArray bbox = new COSArray();
- bbox.add(COSInteger.get(0));
- bbox.add(COSInteger.get(0));
- bbox.add(COSInteger.get((int) layoutPage.overlayMediaBox.getWidth()));
- bbox.add(COSInteger.get((int) layoutPage.overlayMediaBox.getHeight()));
- xobj.setItem(COSName.BBOX, bbox);
- dict.setItem(xObjectId, xobj);
-
- return xObjectId;
- }
-
- private static String getNextUniqueKey(Map<String, ?> map, String prefix)
- {
- int counter = 0;
- while (map != null && map.get(prefix + counter) != null)
- {
- counter++;
- }
- return prefix + counter;
+ return resources.addXObject(xobjForm, XOBJECT_PREFIX);
}
private COSStream createOverlayStream(PDPage page, LayoutPage layoutPage, String xObjectId)