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 " +