Class Overlay

java.lang.Object
org.apache.pdfbox.multipdf.Overlay
All Implemented Interfaces:
Closeable, AutoCloseable

public class Overlay extends Object implements Closeable
Adds an overlay to an existing PDF document. Based on code contributed by Balazs Jerk.
  • Field Details

    • defaultOverlayPage

      private Overlay.LayoutPage defaultOverlayPage
    • firstPageOverlayPage

      private Overlay.LayoutPage firstPageOverlayPage
    • lastPageOverlayPage

      private Overlay.LayoutPage lastPageOverlayPage
    • oddPageOverlayPage

      private Overlay.LayoutPage oddPageOverlayPage
    • evenPageOverlayPage

      private Overlay.LayoutPage evenPageOverlayPage
    • openDocuments

      private final Set<PDDocument> openDocuments
    • specificPageOverlayPage

      private Map<Integer,Overlay.LayoutPage> specificPageOverlayPage
    • position

      private Overlay.Position position
    • inputFileName

      private String inputFileName
    • inputPDFDocument

      private PDDocument inputPDFDocument
    • defaultOverlayFilename

      private String defaultOverlayFilename
    • defaultOverlay

      private PDDocument defaultOverlay
    • firstPageOverlayFilename

      private String firstPageOverlayFilename
    • firstPageOverlay

      private PDDocument firstPageOverlay
    • lastPageOverlayFilename

      private String lastPageOverlayFilename
    • lastPageOverlay

      private PDDocument lastPageOverlay
    • allPagesOverlayFilename

      private String allPagesOverlayFilename
    • allPagesOverlay

      private PDDocument allPagesOverlay
    • oddPageOverlayFilename

      private String oddPageOverlayFilename
    • oddPageOverlay

      private PDDocument oddPageOverlay
    • evenPageOverlayFilename

      private String evenPageOverlayFilename
    • evenPageOverlay

      private PDDocument evenPageOverlay
    • numberOfOverlayPages

      private int numberOfOverlayPages
    • useAllOverlayPages

      private boolean useAllOverlayPages
  • Constructor Details

    • Overlay

      public Overlay()
  • Method Details

    • overlay

      public PDDocument overlay(Map<Integer,String> specificPageOverlayFile) throws IOException
      This will add overlays to a document.
      Parameters:
      specificPageOverlayFile - Optional map of overlay files for specific pages. The page numbers are 1-based. The map must be empty (but not null) if no specific mappings are used.
      Returns:
      The modified input PDF document, which has to be saved and closed by the caller. If the input document was passed by setInputPDF(PDDocument) then it is that object that is returned.
      Throws:
      IOException - if something went wrong
    • overlayDocuments

      public PDDocument overlayDocuments(Map<Integer,PDDocument> specificPageOverlayDocuments) throws IOException
      This will add overlays documents to a document. If you created the overlay documents with subsetted fonts, you need to save them first so that the subsetting gets done.
      Parameters:
      specificPageOverlayDocuments - Optional map of overlay documents for specific pages. The page numbers are 1-based. The map must be empty (but not null) if no specific mappings are used.
      Returns:
      The modified input PDF document, which has to be saved and closed by the caller. If the input document was passed by setInputPDF(PDDocument) then it is that object that is returned.
      Throws:
      IOException - if something went wrong
    • close

      public void close() throws IOException
      Close all input documents which were used for the overlay and opened by this class.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Throws:
      IOException - if something went wrong
    • loadPDFs

      private void loadPDFs() throws IOException
      Throws:
      IOException
    • loadPDF

      private PDDocument loadPDF(String pdfName) throws IOException
      Throws:
      IOException
    • getLayoutPage

      private Overlay.LayoutPage getLayoutPage(PDDocument doc) throws IOException
      Throws:
      IOException
    • createLayoutPage

      private Overlay.LayoutPage createLayoutPage(PDPage page) throws IOException
      Throws:
      IOException
    • getLayoutPages

      private Map<Integer,Overlay.LayoutPage> getLayoutPages(PDDocument doc) throws IOException
      Throws:
      IOException
    • createCombinedContentStream

      private COSStream createCombinedContentStream(COSBase contents) throws IOException
      Throws:
      IOException
    • createContentStreamList

      private List<COSStream> createContentStreamList(COSBase contents) throws IOException
      Throws:
      IOException
    • processPages

      private void processPages(PDDocument document) throws IOException
      Throws:
      IOException
    • addOriginalContent

      private void addOriginalContent(COSBase contents, COSArray contentArray) throws IOException
      Throws:
      IOException
    • overlayPage

      private void overlayPage(PDPage page, Overlay.LayoutPage layoutPage, COSArray array) throws IOException
      Throws:
      IOException
    • getLayoutPage

      private Overlay.LayoutPage getLayoutPage(int pageNumber, int numberOfPages)
    • createOverlayXObject

      private COSName createOverlayXObject(PDPage page, Overlay.LayoutPage layoutPage)
    • createOverlayStream

      private COSStream createOverlayStream(PDPage page, Overlay.LayoutPage layoutPage, COSName xObjectId) throws IOException
      Throws:
      IOException
    • calculateAffineTransform

      protected AffineTransform calculateAffineTransform(PDPage page, PDRectangle overlayMediaBox)
      Calculate the transform to be used when positioning the overlay. The default implementation centers on the destination. Override this method to do your own, e.g. move to a corner, or rotate.
      Parameters:
      page - The page that will get the overlay.
      overlayMediaBox - The overlay media box.
      Returns:
      The affine transform to be used.
    • float2String

      private String float2String(float floatValue)
    • createStream

      private COSStream createStream(String content) throws IOException
      Throws:
      IOException
    • setOverlayPosition

      public void setOverlayPosition(Overlay.Position overlayPosition)
      Sets the overlay position.
      Parameters:
      overlayPosition - the overlay position
    • setInputFile

      public void setInputFile(String inputFile)
      Sets the file to be overlaid.
      Parameters:
      inputFile - the file to be overlaid. The PDDocument object gathered from opening this file will be returned by overlay(Map<Integer, String>).
    • setInputPDF

      public void setInputPDF(PDDocument inputPDF)
      Sets the PDF to be overlaid.
      Parameters:
      inputPDF - the PDF to be overlaid. This will be the object that is returned by overlay(Map<Integer, String>).
    • getInputFile

      public String getInputFile()
      Returns the input file.
      Returns:
      the input file
    • setDefaultOverlayFile

      public void setDefaultOverlayFile(String defaultOverlayFile)
      Sets the default overlay file.
      Parameters:
      defaultOverlayFile - the default overlay file
    • setDefaultOverlayPDF

      public void setDefaultOverlayPDF(PDDocument defaultOverlayPDF)
      Sets the default overlay PDF. If you created the overlay document with subsetted fonts, you need to save it first so that the subsetting gets done.
      Parameters:
      defaultOverlayPDF - the default overlay PDF
    • getDefaultOverlayFile

      public String getDefaultOverlayFile()
      Returns the default overlay file.
      Returns:
      the default overlay file
    • setFirstPageOverlayFile

      public void setFirstPageOverlayFile(String firstPageOverlayFile)
      Sets the first page overlay file.
      Parameters:
      firstPageOverlayFile - the first page overlay file
    • setFirstPageOverlayPDF

      public void setFirstPageOverlayPDF(PDDocument firstPageOverlayPDF)
      Sets the first page overlay PDF. If you created the overlay document with subsetted fonts, you need to save it first so that the subsetting gets done.
      Parameters:
      firstPageOverlayPDF - the first page overlay PDF
    • setLastPageOverlayFile

      public void setLastPageOverlayFile(String lastPageOverlayFile)
      Sets the last page overlay file.
      Parameters:
      lastPageOverlayFile - the last page overlay file
    • setLastPageOverlayPDF

      public void setLastPageOverlayPDF(PDDocument lastPageOverlayPDF)
      Sets the last page overlay PDF. If you created the overlay document with subsetted fonts, you need to save it first so that the subsetting gets done.
      Parameters:
      lastPageOverlayPDF - the last page overlay PDF
    • setAllPagesOverlayFile

      public void setAllPagesOverlayFile(String allPagesOverlayFile)
      Sets the all pages overlay file.
      Parameters:
      allPagesOverlayFile - the all pages overlay file
    • setAllPagesOverlayPDF

      public void setAllPagesOverlayPDF(PDDocument allPagesOverlayPDF)
      Sets the all pages overlay PDF. If you created the overlay document with subsetted fonts, you need to save it first so that the subsetting gets done.
      Parameters:
      allPagesOverlayPDF - the all pages overlay PDF. This should not be a PDDocument that you created on the fly, it should be saved first, if it contains any fonts that are subset.
    • setOddPageOverlayFile

      public void setOddPageOverlayFile(String oddPageOverlayFile)
      Sets the odd page overlay file.
      Parameters:
      oddPageOverlayFile - the odd page overlay file
    • setOddPageOverlayPDF

      public void setOddPageOverlayPDF(PDDocument oddPageOverlayPDF)
      Sets the odd page overlay PDF. If you created the overlay document with subsetted fonts, you need to save it first so that the subsetting gets done.
      Parameters:
      oddPageOverlayPDF - the odd page overlay PDF
    • setEvenPageOverlayFile

      public void setEvenPageOverlayFile(String evenPageOverlayFile)
      Sets the even page overlay file.
      Parameters:
      evenPageOverlayFile - the even page overlay file
    • setEvenPageOverlayPDF

      public void setEvenPageOverlayPDF(PDDocument evenPageOverlayPDF)
      Sets the even page overlay PDF. If you created the overlay document with subsetted fonts, you need to save it first so that the subsetting gets done.
      Parameters:
      evenPageOverlayPDF - the even page overlay PDF