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/09/15 20:20:50 UTC
svn commit: r1625104 - in /pdfbox/trunk:
pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java
tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java
Author: lehmi
Date: Mon Sep 15 18:20:49 2014
New Revision: 1625104
URL: http://svn.apache.org/r1625104
Log:
PDFBOX-2314: added backward compatibility between Overlay and OverlaPDF as proposed by Laurent Yaish
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/Overlay.java
pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.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=1625104&r1=1625103&r2=1625104&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 Mon Sep 15 18:20:49 2014
@@ -74,8 +74,12 @@ public class Overlay
private String defaultOverlayFilename = null;
private String firstPageOverlayFilename = null;
private String lastPageOverlayFilename = null;
+ private String allPagesOverlayFilename = null;
private String oddPageOverlayFilename = null;
private String evenPageOverlayFilename = null;
+
+ private int numberOfOverlayPages = 0;
+ private boolean useAllOverlayPages = false;
/**
* This will add overlays to a documents.
@@ -91,6 +95,7 @@ public class Overlay
PDDocument defaultOverlay = null;
PDDocument firstPageOverlay = null;
PDDocument lastPageOverlay = null;
+ PDDocument allPagesOverlay = null;
PDDocument oddPageOverlay = null;
PDDocument evenPageOverlay = null;
try
@@ -121,6 +126,13 @@ public class Overlay
evenPageOverlay = loadPDF(evenPageOverlayFilename, useNonSeqParser);
evenPageOverlayPage = getLayoutPage(evenPageOverlay);
}
+ if (allPagesOverlayFilename != null)
+ {
+ allPagesOverlay = loadPDF(allPagesOverlayFilename, useNonSeqParser);
+ specificPageOverlayPage = getLayoutPages(allPagesOverlay);
+ useAllOverlayPages = true;
+ numberOfOverlayPages = specificPageOverlayPage.size();
+ }
for (Map.Entry<Integer, String> e : specificPageOverlayFile.entrySet())
{
PDDocument doc = loadPDF(e.getValue(), useNonSeqParser);
@@ -150,6 +162,10 @@ public class Overlay
{
lastPageOverlay.close();
}
+ if (allPagesOverlay != null)
+ {
+ allPagesOverlay.close();
+ }
if (oddPageOverlay != null)
{
oddPageOverlay.close();
@@ -211,7 +227,26 @@ public class Overlay
return new LayoutPage(page.getMediaBox(), createContentStream(contents),
resources.getCOSDictionary());
}
-
+
+ private HashMap<Integer,LayoutPage> getLayoutPages(PDDocument doc) throws IOException
+ {
+ PDDocumentCatalog catalog = doc.getDocumentCatalog();
+ int numberOfPages = doc.getNumberOfPages();
+ HashMap<Integer,LayoutPage> layoutPages = new HashMap<Integer, Overlay.LayoutPage>(numberOfPages);
+ for (int i=0;i<numberOfPages;i++)
+ {
+ PDPage page = (PDPage) catalog.getAllPages().get(i);
+ COSBase contents = page.getCOSDictionary().getDictionaryObject(COSName.CONTENTS);
+ PDResources resources = page.findResources();
+ if (resources == null)
+ {
+ resources = new PDResources();
+ }
+ layoutPages.put(i,new LayoutPage(page.getMediaBox(), createContentStream(contents), resources.getCOSDictionary()));
+ }
+ return layoutPages;
+ }
+
private COSStream createContentStream(COSBase contents) throws IOException
{
List<COSStream> contentStreams = createContentStreamList(contents);
@@ -319,7 +354,7 @@ public class Overlay
throws IOException
{
LayoutPage layoutPage = null;
- if (specificPageOverlayPage.containsKey(pageNumber))
+ if (!useAllOverlayPages && specificPageOverlayPage.containsKey(pageNumber))
{
layoutPage = specificPageOverlayPage.get(pageNumber);
}
@@ -343,6 +378,16 @@ public class Overlay
{
layoutPage = defaultOverlayPage;
}
+ else if (useAllOverlayPages)
+ {
+ int usePageNum = pageNumber % numberOfOverlayPages;
+ layoutPage = specificPageOverlayPage.get(usePageNum);
+ }
+ else if (useAllOverlayPages)
+ {
+ int usePageNum = pageNumber % numberOfOverlayPages;
+ layoutPage = specificPageOverlayPage.get(usePageNum);
+ }
if (layoutPage != null)
{
PDResources resources = page.findResources();
@@ -481,6 +526,16 @@ public class Overlay
}
/**
+ * Sets the all pages overlay file.
+ *
+ * @param allPagesOverlayFile the all pages overlay file
+ */
+ public void setAllPagesOverlayFile(String allPagesOverlayFile)
+ {
+ allPagesOverlayFilename = allPagesOverlayFile;
+ }
+
+ /**
* Sets the odd page overlay file.
*
* @param oddPageOverlayFile the odd page overlay file
Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java?rev=1625104&r1=1625103&r2=1625104&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/OverlayPDF.java Mon Sep 15 18:20:49 2014
@@ -43,6 +43,7 @@ public class OverlayPDF
private static final String FIRST = "-first";
private static final String LAST = "-last";
private static final String PAGE = "-page";
+ private static final String USEALLPAGES = "-useAllPages";
private static final String NONSEQ = "-nonSeq";
/**
@@ -107,6 +108,11 @@ public class OverlayPDF
overlayer.setLastPageOverlayFile(args[i + 1].trim());
i += 1;
}
+ else if (arg.equals(USEALLPAGES) && ((i + 1) < args.length))
+ {
+ overlayer.setAllPagesOverlayFile(args[i + 1].trim());
+ i += 1;
+ }
else if (arg.equals(PAGE) && ((i + 2) < args.length) && (isInteger(args[i + 1].trim())))
{
specificPageOverlayFile.put(Integer.parseInt(args[i + 1].trim()), args[i + 2].trim());
@@ -152,6 +158,8 @@ public class OverlayPDF
message.append(" -even <evenPageOverlay.pdf> overlay file used for even pages\n");
message.append(" -first <firstPageOverlay.pdf> overlay file used for the first page\n");
message.append(" -last <lastPageOverlay.pdf> overlay file used for the last page\n");
+ message.append(" -useAllPages <allPagesOverlay.pdf> overlay file used for overlay, all pages"
+ + " are used by simply repeating them\n");
message.append(" -page <pageNumber> <specificPageOverlay.pdf> overlay file used for " +
"the given page number, may occur more than once\n");
message.append(" -position foreground|background where to put the overlay " +