com.lowagie.text.pdf

## Class PdfCopy

- java.lang.Object
- - com.lowagie.text.DocWriter
  - - com.lowagie.text.pdf.PdfWriter
    - - com.lowagie.text.pdf.PdfCopy

- All Implemented Interfaces:
    DocListener, ElementListener, PdfAnnotations, PdfDocumentActions, PdfEncryptionSettings, PdfPageActions, PdfRunDirection, PdfVersion, PdfViewerPreferences, PdfXConformance, java.util.EventListener
  Direct Known Subclasses:
    PdfSmartCopy

      public class PdfCopy
      extends PdfWriter

  Make copies of PDF documents. Documents can be edited after reading and before writing them out.
  Author:
    Mark Thompson

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `(package private) static class` | `PdfCopy.IndirectReferences` This class holds information about indirect references, since they are renumbered by iText.
    `static class` | `PdfCopy.PageStamp`
    `protected static class` | `PdfCopy.RefKey` A key to allow us to hash indirect references
    `static class` | `PdfCopy.StampContent`

    - ### Nested classes/interfaces inherited from class com.lowagie.text.pdf.PdfWriter

      `PdfWriter.PdfBody, PdfWriter.PdfTrailer`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected PdfIndirectReference` | `acroForm`
    `protected int` | `currentObjectNum`
    `protected PdfArray` | `fieldArray`
    `protected java.util.HashMap` | `fieldTemplates`
    `protected java.util.HashMap` | `indirectMap`
    `protected java.util.HashMap` | `indirects`
    `protected int[]` | `namePtr`
    `protected PdfReader` | `reader`
    `private boolean` | `rotateContents` Holds value of property rotateContents.

    - ### Fields inherited from class com.lowagie.text.pdf.PdfWriter

      `ALLOW_ASSEMBLY, ALLOW_COPY, ALLOW_DEGRADED_PRINTING, ALLOW_FILL_IN, ALLOW_MODIFY_ANNOTATIONS, ALLOW_MODIFY_CONTENTS, ALLOW_PRINTING, ALLOW_SCREENREADERS, AllowAssembly, AllowCopy, AllowDegradedPrinting, AllowFillIn, AllowModifyAnnotations, AllowModifyContents, AllowPrinting, AllowScreenReaders, body, CenterWindow, colorNumber, compressionLevel, crypto, currentPageNumber, currentPdfReaderInstance, defaultColorspace, DID_PRINT, DID_SAVE, directContent, directContentUnder, DirectionL2R, DirectionR2L, DisplayDocTitle, DO_NOT_ENCRYPT_METADATA, DOCUMENT_CLOSE, documentColors, documentExtGState, documentFonts, documentOCG, documentOCGorder, documentPatterns, documentProperties, documentShadingPatterns, documentShadings, documentSpotPatterns, EMBEDDED_FILES_ONLY, ENCRYPTION_AES_128, ENCRYPTION_MASK, extraCatalog, FitWindow, fontNumber, formXObjects, formXObjectsCounter, fullCompression, GENERATION_MAX, group, HideMenubar, HideToolbar, HideWindowUI, imageDictionary, importedPages, JBIG2Globals, newBookmarks, NO_SPACE_CHAR_RATIO, NonFullScreenPageModeUseNone, NonFullScreenPageModeUseOC, NonFullScreenPageModeUseOutlines, NonFullScreenPageModeUseThumbs, OCGLocked, OCGRadioGroup, OCProperties, PAGE_CLOSE, PAGE_OPEN, PageLayoutOneColumn, PageLayoutSinglePage, PageLayoutTwoColumnLeft, PageLayoutTwoColumnRight, PageLayoutTwoPageLeft, PageLayoutTwoPageRight, PageModeFullScreen, PageModeUseAttachments, PageModeUseNone, PageModeUseOC, PageModeUseOutlines, PageModeUseThumbs, pageReferences, patternColorspaceCMYK, patternColorspaceGRAY, patternColorspaceRGB, patternNumber, pdf, pdf_version, PDF_VERSION_1_2, PDF_VERSION_1_3, PDF_VERSION_1_4, PDF_VERSION_1_5, PDF_VERSION_1_6, PDF_VERSION_1_7, PDFA1A, PDFA1B, PDFX1A2001, PDFX32002, PDFXNONE, prevxref, PrintScalingNone, root, RUN_DIRECTION_DEFAULT, RUN_DIRECTION_LTR, RUN_DIRECTION_NO_BIDI, RUN_DIRECTION_RTL, runDirection, SIGNATURE_APPEND_ONLY, SIGNATURE_EXISTS, SPACE_CHAR_RATIO_DEFAULT, STANDARD_ENCRYPTION_128, STANDARD_ENCRYPTION_40, STRENGTH128BITS, STRENGTH40BITS, structureTreeRoot, tabs, tagged, userunit, VERSION_1_2, VERSION_1_3, VERSION_1_4, VERSION_1_5, VERSION_1_6, VERSION_1_7, WILL_PRINT, WILL_SAVE, xmpMetadata`

    - ### Fields inherited from class com.lowagie.text.DocWriter

      `closeStream, document, EQUALS, FORWARD, GT, LT, NEWLINE, open, os, pageSize, pause, QUOTE, SPACE, TAB`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PdfCopy(Document document, java.io.OutputStream os)` Constructor

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `PdfIndirectReference` | `add(PdfOutline outline)`
    `(package private) PdfIndirectReference` | `add(PdfPage page, PdfContents contents)` Adds some `PdfContents` to this Writer.
    `void` | `addAnnotation(PdfAnnotation annot)` Use this methods to add a `PdfAnnotation` or a `PdfFormField` to the document.
    `private void` | `addFieldResources(PdfDictionary catalog)`
    `void` | `addPage(PdfImportedPage iPage)` Add an imported page to our output
    `void` | `addPage(Rectangle rect, int rotation)` Adds a blank page.
    `void` | `close()` Signals that the `Document` was closed and that no other `Elements` will be added.
    `void` | `copyAcroForm(PdfReader reader)` Copy the acroform for an input document.
    `protected PdfArray` | `copyArray(PdfArray in)` Translate a PRArray to a PdfArray.
    `protected PdfDictionary` | `copyDictionary(PdfDictionary in)` Translate a PRDictionary to a PdfDictionary.
    `protected PdfIndirectReference` | `copyIndirect(PRIndirectReference in)` Translate a PRIndirectReference to a PdfIndirectReference In addition, translates the object numbers, and copies the referenced object to the output file.
    `protected PdfObject` | `copyObject(PdfObject in)` Translate a PR-object to a Pdf-object
    `protected PdfStream` | `copyStream(PRStream in)` Translate a PRStream to a PdfStream.
    `PdfCopy.PageStamp` | `createPageStamp(PdfImportedPage iPage)` Create a page stamp.
    `void` | `freeReader(PdfReader reader)` Use this method to writes the reader to the document and free the memory used by it.
    `protected PdfDictionary` | `getCatalog(PdfIndirectReference rootObj)`
    `PdfImportedPage` | `getImportedPage(PdfReader reader, int pageNumber)` Grabs a page from the input document
    `boolean` | `isRotateContents()` Getter for property rotateContents.
    `protected int` | `setFromIPage(PdfImportedPage iPage)` convenience method.
    `protected void` | `setFromReader(PdfReader reader)` convenience method.
    `void` | `setRotateContents(boolean rotateContents)` Setter for property rotateContents.

    - ### Methods inherited from class com.lowagie.text.pdf.PdfWriter

      `add, add, addAnnotation, addCalculationOrder, addDeveloperExtension, addDirectImageSimple, addDirectImageSimple, addDirectTemplateSimple, addFileAttachment, addFileAttachment, addFileAttachment, addJavaScript, addJavaScript, addJavaScript, addJavaScript, addJavaScript, addJavaScript, addLocalDestinations, addNamedDestination, addNamedDestinations, addOCGRadioGroup, addSharedObjectsToBody, addSimple, addSimple, addSimpleExtGState, addSimplePattern, addSimplePatternColorspace, addSimpleProperty, addSimpleShading, addSimpleShadingPattern, addToBody, addToBody, addToBody, addToBody, addToBody, addToBody, addViewerPreference, clearTextWrap, createXmpMetadata, eliminateFontSubset, fillOCProperties, fitsPage, fitsPage, getAcroForm, getBoxSize, getColorspaceName, getCompressionLevel, getCurrentDocumentSize, getCurrentPage, getCurrentPageNumber, getDefaultColorspace, getDirectContent, getDirectContentUnder, getEncryption, getExtraCatalog, getGroup, getImageReference, getIndirectReferenceNumber, getInfo, getInstance, getInstance, getNewObjectNumber, getOCProperties, getOs, getPageEvent, getPageNumber, getPageReference, getPageSize, getPdfDocument, getPdfIndirectReference, getPdfVersion, getPDFXConformance, getReaderFile, getReferenceJBIG2Globals, getRootOutline, getRunDirection, getSpaceCharRatio, getStructureTreeRoot, getTabs, getUserunit, getVerticalPosition, isFullCompression, isPageEmpty, isPdfX, isRgbTransparencyBlending, isStrictImageSequence, isTagged, isUserProperties, lockLayer, open, propertyExists, registerLayer, releaseTemplate, reorderPages, resetContent, setAdditionalAction, setAtLeastPdfVersion, setBoxSize, setCollection, setCompressionLevel, setCropBoxSize, setDefaultColorspace, setDuration, setEncryption, setEncryption, setEncryption, setEncryption, setEncryption, setFullCompression, setGroup, setInitialLeading, setLinearPageMode, setOpenAction, setOpenAction, setOutlines, setOutputIntents, setOutputIntents, setOutputIntents, setPageAction, setPageEmpty, setPageEvent, setPageLabels, setPageXmpMetadata, setPdfVersion, setPdfVersion, setPDFXConformance, setRgbTransparencyBlending, setRunDirection, setSigFlags, setSpaceCharRatio, setStrictImageSequence, setTabs, setTagged, setThumbnail, setTransition, setUserProperties, setUserunit, setViewerPreferences, setXmpMetadata, writeOutlines`

    - ### Methods inherited from class com.lowagie.text.DocWriter

      `add, addTabs, flush, getISOBytes, isCloseStream, isPaused, newPage, pause, resetFooter, resetHeader, resetPageCount, resume, setCloseStream, setFooter, setHeader, setMarginMirroring, setMarginMirroringTopBottom, setMargins, setPageCount, setPageSize, write, write, writeEnd, writeEnd, writeMarkupAttributes, writeStart`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### indirects

          protected java.util.HashMap indirects

    - #### indirectMap

          protected java.util.HashMap indirectMap

    - #### currentObjectNum

          protected int currentObjectNum

    - #### reader

          protected PdfReader reader

    - #### acroForm

          protected PdfIndirectReference acroForm

    - #### namePtr

          protected int[] namePtr

    - #### rotateContents

          private boolean rotateContents

      Holds value of property rotateContents.

    - #### fieldArray

          protected PdfArray fieldArray

    - #### fieldTemplates

          protected java.util.HashMap fieldTemplates

  - ### Constructor Detail

    - #### PdfCopy

          public PdfCopy(Document document,
                 java.io.OutputStream os)
                  throws DocumentException

      Constructor
      Parameters:
        `document` -
        `os` - outputstream
      Throws:
        `DocumentException`

  - ### Method Detail

    - #### isRotateContents

          public boolean isRotateContents()

      Getter for property rotateContents.
      Returns:
        Value of property rotateContents.

    - #### setRotateContents

          public void setRotateContents(boolean rotateContents)

      Setter for property rotateContents.
      Parameters:
        `rotateContents` - New value of property rotateContents.

    - #### getImportedPage

          public PdfImportedPage getImportedPage(PdfReader reader,
                                        int pageNumber)

      Grabs a page from the input document
      Overrides:
        `getImportedPage` in class `PdfWriter`
      Parameters:
        `reader` - the reader of the document
        `pageNumber` - which page to get
      Returns:
        the page

    - #### copyIndirect

          protected PdfIndirectReference copyIndirect(PRIndirectReference in)
                                               throws java.io.IOException,
                                                      BadPdfFormatException

      Translate a PRIndirectReference to a PdfIndirectReference In addition, translates the object numbers, and copies the referenced object to the output file. NB: PRIndirectReferences (and PRIndirectObjects) really need to know what file they came from, because each file has its own namespace. The translation we do from their namespace to ours is *at best* heuristic, and guaranteed to fail under some circumstances.
      Throws:
        `java.io.IOException`
        `BadPdfFormatException`

    - #### copyDictionary

          protected PdfDictionary copyDictionary(PdfDictionary in)
                                          throws java.io.IOException,
                                                 BadPdfFormatException

      Translate a PRDictionary to a PdfDictionary. Also translate all of the objects contained in it.
      Throws:
        `java.io.IOException`
        `BadPdfFormatException`

    - #### copyStream

          protected PdfStream copyStream(PRStream in)
                                  throws java.io.IOException,
                                         BadPdfFormatException

      Translate a PRStream to a PdfStream. The data part copies itself.
      Throws:
        `java.io.IOException`
        `BadPdfFormatException`

    - #### copyArray

          protected PdfArray copyArray(PdfArray in)
                                throws java.io.IOException,
                                       BadPdfFormatException

      Translate a PRArray to a PdfArray. Also translate all of the objects contained in it
      Throws:
        `java.io.IOException`
        `BadPdfFormatException`

    - #### copyObject

          protected PdfObject copyObject(PdfObject in)
                                  throws java.io.IOException,
                                         BadPdfFormatException

      Translate a PR-object to a Pdf-object
      Throws:
        `java.io.IOException`
        `BadPdfFormatException`

    - #### setFromIPage

          protected int setFromIPage(PdfImportedPage iPage)

      convenience method. Given an imported page, set our "globals"

    - #### setFromReader

          protected void setFromReader(PdfReader reader)

      convenience method. Given a reader, set our "globals"

    - #### addPage

          public void addPage(PdfImportedPage iPage)
                       throws java.io.IOException,
                              BadPdfFormatException

      Add an imported page to our output
      Parameters:
        `iPage` - an imported page
      Throws:
        `IOException,` - BadPdfFormatException
        `java.io.IOException`
        `BadPdfFormatException`

    - #### addPage

          public void addPage(Rectangle rect,
                     int rotation)

      Adds a blank page.
      Parameters:
        `rect` - The page dimension
        `rotation` - The rotation angle in degrees
      Since:
        2.1.5

    - #### copyAcroForm

          public void copyAcroForm(PdfReader reader)
                            throws java.io.IOException,
                                   BadPdfFormatException

      Copy the acroform for an input document. Note that you can only have one, we make no effort to merge them.
      Parameters:
        `reader` - The reader of the input file that is being copied
      Throws:
        `IOException,` - BadPdfFormatException
        `java.io.IOException`
        `BadPdfFormatException`

    - #### getCatalog

          protected PdfDictionary getCatalog(PdfIndirectReference rootObj)

      Overrides:
        `getCatalog` in class `PdfWriter`

    - #### addFieldResources

          private void addFieldResources(PdfDictionary catalog)
                                  throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### close

          public void close()

      Signals that the `Document` was closed and that no other `Elements` will be added.

      The pages-tree is built and written to the outputstream. A Catalog is constructed, as well as an Info-object, the reference table is composed and everything is written to the outputstream embedded in a Trailer.

      Specified by:
        `close` in interface `DocListener`
      Overrides:
        `close` in class `PdfWriter`
      See Also:
        `DocWriter.close()`

    - #### add

          public PdfIndirectReference add(PdfOutline outline)

    - #### addAnnotation

          public void addAnnotation(PdfAnnotation annot)

      Description copied from interface: `PdfAnnotations`
      Use this methods to add a `PdfAnnotation` or a `PdfFormField` to the document. Only the top parent of a `PdfFormField` needs to be added.
      Specified by:
        `addAnnotation` in interface `PdfAnnotations`
      Overrides:
        `addAnnotation` in class `PdfWriter`
      Parameters:
        `annot` - the `PdfAnnotation` or the `PdfFormField` to add
      See Also:
        `PdfAnnotations.addAnnotation(com.lowagie.text.pdf.PdfAnnotation)`

    - #### add

          PdfIndirectReference add(PdfPage page,
                                 PdfContents contents)
                             throws PdfException

      Description copied from class: `PdfWriter`
      Adds some `PdfContents` to this Writer.

      The document has to be open before you can begin to add content to the body of the document.

      Overrides:
        `add` in class `PdfWriter`
      Parameters:
        `page` - the `PdfPage` to add
        `contents` - the `PdfContents` of the page
      Returns:
        a `PdfIndirectReference`
      Throws:
        `PdfException` - on error

    - #### freeReader

          public void freeReader(PdfReader reader)
                          throws java.io.IOException

      Description copied from class: `PdfWriter`
      Use this method to writes the reader to the document and free the memory used by it. The main use is when concatenating multiple documents to keep the memory usage restricted to the current appending document.
      Overrides:
        `freeReader` in class `PdfWriter`
      Parameters:
        `reader` - the `PdfReader` to free
      Throws:
        `java.io.IOException` - on error

    - #### createPageStamp

          public PdfCopy.PageStamp createPageStamp(PdfImportedPage iPage)

      Create a page stamp. New content and annotations, including new fields, are allowed. The fields added cannot have parents in another pages. This method modifies the PdfReader instance.

      The general usage to stamp something in a page is:

           PdfImportedPage page = copy.getImportedPage(reader, 1);
           PdfCopy.PageStamp ps = copy.createPageStamp(page);
           ps.addAnnotation(PdfAnnotation.createText(copy, new Rectangle(50, 180, 70, 200), "Hello", "No Thanks", true, "Comment"));
           PdfContentByte under = ps.getUnderContent();
           under.addImage(img);
           PdfContentByte over = ps.getOverContent();
           over.beginText();
           over.setFontAndSize(bf, 18);
           over.setTextMatrix(30, 30);
           over.showText("total page " + totalPage);
           over.endText();
           ps.alterContents();
           copy.addPage(page);

      Parameters:
        `iPage` - an imported page
      Returns:
        the `PageStamp`