com.itextpdf.text.pdf
Class PdfCopy

java.lang.Object
  extended by com.itextpdf.text.DocWriter
      extended by com.itextpdf.text.pdf.PdfWriter
          extended by com.itextpdf.text.pdf.PdfCopy
All Implemented Interfaces:
DocListener, ElementListener, PdfAnnotations, PdfDocumentActions, PdfEncryptionSettings, PdfPageActions, PdfRunDirection, PdfVersion, PdfViewerPreferences, 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
protected static class PdfCopy.ImportedPage
           
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.itextpdf.text.pdf.PdfWriter
PdfWriter.PdfBody, PdfWriter.PdfTrailer
 
Field Summary
protected  PdfIndirectReference acroForm
           
protected static Counter COUNTER
           
protected  HashSet<PdfObject> disableIndirects
           
protected  PdfArray fieldArray
           
protected  HashSet<PdfTemplate> fieldTemplates
           
protected  ArrayList<PdfCopy.ImportedPage> importedPages
           
protected  HashMap<PdfReader,HashMap<PdfCopy.RefKey,com.itextpdf.text.pdf.PdfCopy.IndirectReferences>> indirectMap
           
protected  HashMap<PdfCopy.RefKey,PdfIndirectObject> indirectObjects
           
protected  HashMap<PdfCopy.RefKey,com.itextpdf.text.pdf.PdfCopy.IndirectReferences> indirects
           
protected  int[] namePtr
           
protected  HashMap<PdfObject,PdfObject> parentObjects
           
protected  PdfReader reader
           
protected  ArrayList<PdfIndirectObject> savedObjects
           
protected  HashSet<PdfCopy.RefKey> streams
           
protected  PRIndirectReference structTreeRootReference
           
protected  boolean updateRootKids
           
 
Fields inherited from class com.itextpdf.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_AES_256, extraCatalog, FitWindow, fontNumber, formXObjects, formXObjectsCounter, fullCompression, GENERATION_MAX, group, HideMenubar, HideToolbar, HideWindowUI, imageDictionary, JBIG2Globals, newBookmarks, NO_SPACE_CHAR_RATIO, NonFullScreenPageModeUseNone, NonFullScreenPageModeUseOC, NonFullScreenPageModeUseOutlines, NonFullScreenPageModeUseThumbs, OCGLocked, OCGRadioGroup, OCProperties, PAGE_CLOSE, PAGE_OPEN, pageDictEntries, 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, pdfIsoConformance, PDFX1A2001, PDFX32002, PDFXNONE, prevxref, PrintScalingNone, readerInstances, 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, ttfUnicodeWriter, VERSION_1_2, VERSION_1_3, VERSION_1_4, VERSION_1_5, VERSION_1_6, VERSION_1_7, WILL_PRINT, WILL_SAVE, xmpMetadata, xmpWriter
 
Fields inherited from class com.itextpdf.text.DocWriter
closeStream, document, EQUALS, FORWARD, GT, LT, NEWLINE, open, os, pageSize, pause, QUOTE, SPACE, TAB
 
Constructor Summary
PdfCopy(Document document, OutputStream os)
          Constructor
 
Method Summary
 PdfIndirectReference add(PdfOutline outline)
           
 void addAnnotation(PdfAnnotation annot)
          Use this methods to add a PdfAnnotation or a PdfFormField to the document.
 void addPage(PdfImportedPage iPage)
          Add an imported page to our output
 void addPage(Rectangle rect, int rotation)
          Adds a blank page.
 PdfIndirectObject addToBody(PdfObject object)
          Use this method to add a PDF object to the PDF body.
 PdfIndirectObject addToBody(PdfObject object, PdfIndirectReference ref)
          Use this method to add a PDF object to the PDF body.
 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  PdfArray copyArray(PdfArray in, boolean keepStruct, boolean directRootKids)
          Translate a PRArray to a PdfArray.
protected  PdfDictionary copyDictionary(PdfDictionary in)
          Translate a PRDictionary to a PdfDictionary.
protected  PdfDictionary copyDictionary(PdfDictionary in, boolean keepStruct, boolean directRootKids)
          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  PdfIndirectReference copyIndirect(PRIndirectReference in, boolean keepStructure, boolean directRootKids)
          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  PdfObject copyObject(PdfObject in, boolean keepStruct, boolean directRootKids)
          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.
protected  void fixStructureTreeRoot(HashSet<PdfCopy.RefKey> activeKeys, HashSet<PdfName> activeClassMaps)
           
protected  void fixTaggedStructure()
           
protected  void flushIndirectObjects()
           
protected  void flushTaggedObjects()
          Fix structure of tagged document: remove unused objects, remove unused items from class map, fix xref table due to removed objects.
 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)
           
protected  Counter getCounter()
           
 PdfImportedPage getImportedPage(PdfReader reader, int pageNumber)
          Grabs a page from the input document
 PdfImportedPage getImportedPage(PdfReader reader, int pageNumber, boolean keepTaggedPdfStructure)
           
protected  PdfImportedPage getImportedPageImpl(PdfReader reader, int pageNumber)
           
 boolean isRotateContents()
          Getter for property rotateContents.
protected  boolean isStructTreeRootReference(PdfIndirectReference prRef)
           
protected  int setFromIPage(PdfImportedPage iPage)
          convenience method.
protected  void setFromReader(PdfReader reader)
          convenience method.
 void setPageEvent(PdfPageEvent event)
          Setting page events isn't possible with Pdf(Smart)Copy.
 void setRotateContents(boolean rotateContents)
          Setter for property rotateContents.
 
Methods inherited from class com.itextpdf.text.pdf.PdfWriter
add, addCalculationOrder, addDeveloperExtension, addDirectImageSimple, addDirectImageSimple, addFileAttachment, addFileAttachment, addFileAttachment, addJavaScript, addJavaScript, addJavaScript, addJavaScript, addJavaScript, addJavaScript, addNamedDestination, addNamedDestinations, addOCGRadioGroup, addPageDictEntry, addSharedObjectsToBody, addToBody, addToBody, addToBody, addToBody, addViewerPreference, addXFormsToBody, buildStructTreeRootForTagged, checkPdfIsoConformance, checkPdfIsoConformance, clearTextWrap, createXmpMetadata, fillOCProperties, getAcroForm, getBoxSize, getCompressionLevel, getCurrentDocumentSize, getCurrentPageNumber, getDefaultColorspace, getDirectContent, getDirectContentUnder, getExtraCatalog, getGroup, getIndirectReferenceNumber, getInfo, getInstance, getInstance, getNewObjectNumber, getOCProperties, getOs, getPageDictEntries, getPageEvent, getPageNumber, getPageReference, getPageSize, getPdfIndirectReference, getPdfIsoConformance, getPdfReaderInstance, getPDFXConformance, getReferenceJBIG2Globals, getRootOutline, getRunDirection, getSpaceCharRatio, getStructureTreeRoot, getTabs, getTtfUnicodeWriter, getVerticalPosition, getXmpWriter, isFullCompression, isPageEmpty, isPdfIso, isPdfX, isRgbTransparencyBlending, isStrictImageSequence, isTagged, isUserProperties, lockLayer, open, releaseTemplate, reorderPages, resetPageDictEntries, setAdditionalAction, setAtLeastPdfVersion, setBoxSize, setCollection, setCompressionLevel, setCropBoxSize, setDefaultColorspace, setDuration, setEncryption, setEncryption, setEncryption, setEncryption, setEncryption, setFullCompression, setGroup, setInitialLeading, setLanguage, setLinearPageMode, setOpenAction, setOpenAction, setOutlines, setOutputIntents, setOutputIntents, setOutputIntents, setPageAction, setPageEmpty, setPageLabels, setPageViewport, setPageXmpMetadata, setPdfVersion, setPdfVersion, setPDFXConformance, setRgbTransparencyBlending, setRunDirection, setSigFlags, setSpaceCharRatio, setStrictImageSequence, setTabs, setTagged, setThumbnail, setTransition, setUserProperties, setUserunit, setViewerPreferences, setXmpMetadata, writeKeyInfo, writeOutlines
 
Methods inherited from class com.itextpdf.text.DocWriter
add, addTabs, flush, getISOBytes, isCloseStream, isPaused, newPage, pause, resetPageCount, resume, setCloseStream, 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

COUNTER

protected static Counter COUNTER

indirects

protected HashMap<PdfCopy.RefKey,com.itextpdf.text.pdf.PdfCopy.IndirectReferences> indirects

indirectMap

protected HashMap<PdfReader,HashMap<PdfCopy.RefKey,com.itextpdf.text.pdf.PdfCopy.IndirectReferences>> indirectMap

parentObjects

protected HashMap<PdfObject,PdfObject> parentObjects

disableIndirects

protected HashSet<PdfObject> disableIndirects

reader

protected PdfReader reader

acroForm

protected PdfIndirectReference acroForm

namePtr

protected int[] namePtr

fieldArray

protected PdfArray fieldArray

fieldTemplates

protected HashSet<PdfTemplate> fieldTemplates

structTreeRootReference

protected PRIndirectReference structTreeRootReference

indirectObjects

protected HashMap<PdfCopy.RefKey,PdfIndirectObject> indirectObjects

savedObjects

protected ArrayList<PdfIndirectObject> savedObjects

importedPages

protected ArrayList<PdfCopy.ImportedPage> importedPages

streams

protected HashSet<PdfCopy.RefKey> streams

updateRootKids

protected boolean updateRootKids
Constructor Detail

PdfCopy

public PdfCopy(Document document,
               OutputStream os)
        throws DocumentException
Constructor

Parameters:
document - document
os - outputstream
Throws:
DocumentException
Method Detail

getCounter

protected Counter getCounter()
Overrides:
getCounter in class PdfWriter

setPageEvent

public void setPageEvent(PdfPageEvent event)
Setting page events isn't possible with Pdf(Smart)Copy. Use the PageStamp class if you want to add content to copied pages.

Overrides:
setPageEvent in class PdfWriter
Parameters:
event - the PdfPageEvent for this document
See Also:
PdfWriter.setPageEvent(com.itextpdf.text.pdf.PdfPageEvent)

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

getImportedPage

public PdfImportedPage getImportedPage(PdfReader reader,
                                       int pageNumber,
                                       boolean keepTaggedPdfStructure)
                                throws BadPdfFormatException
Throws:
BadPdfFormatException

fixStructureTreeRoot

protected void fixStructureTreeRoot(HashSet<PdfCopy.RefKey> activeKeys,
                                    HashSet<PdfName> activeClassMaps)

getImportedPageImpl

protected PdfImportedPage getImportedPageImpl(PdfReader reader,
                                              int pageNumber)

copyIndirect

protected PdfIndirectReference copyIndirect(PRIndirectReference in,
                                            boolean keepStructure,
                                            boolean directRootKids)
                                     throws 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:
IOException
BadPdfFormatException

copyIndirect

protected PdfIndirectReference copyIndirect(PRIndirectReference in)
                                     throws 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:
IOException
BadPdfFormatException

copyDictionary

protected PdfDictionary copyDictionary(PdfDictionary in,
                                       boolean keepStruct,
                                       boolean directRootKids)
                                throws IOException,
                                       BadPdfFormatException
Translate a PRDictionary to a PdfDictionary. Also translate all of the objects contained in it.

Throws:
IOException
BadPdfFormatException

copyDictionary

protected PdfDictionary copyDictionary(PdfDictionary in)
                                throws IOException,
                                       BadPdfFormatException
Translate a PRDictionary to a PdfDictionary. Also translate all of the objects contained in it.

Throws:
IOException
BadPdfFormatException

copyStream

protected PdfStream copyStream(PRStream in)
                        throws IOException,
                               BadPdfFormatException
Translate a PRStream to a PdfStream. The data part copies itself.

Throws:
IOException
BadPdfFormatException

copyArray

protected PdfArray copyArray(PdfArray in,
                             boolean keepStruct,
                             boolean directRootKids)
                      throws IOException,
                             BadPdfFormatException
Translate a PRArray to a PdfArray. Also translate all of the objects contained in it

Throws:
IOException
BadPdfFormatException

copyArray

protected PdfArray copyArray(PdfArray in)
                      throws IOException,
                             BadPdfFormatException
Translate a PRArray to a PdfArray. Also translate all of the objects contained in it

Throws:
IOException
BadPdfFormatException

copyObject

protected PdfObject copyObject(PdfObject in,
                               boolean keepStruct,
                               boolean directRootKids)
                        throws IOException,
                               BadPdfFormatException
Translate a PR-object to a Pdf-object

Throws:
IOException
BadPdfFormatException

copyObject

protected PdfObject copyObject(PdfObject in)
                        throws IOException,
                               BadPdfFormatException
Translate a PR-object to a Pdf-object

Throws:
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 IOException,
                    BadPdfFormatException
Add an imported page to our output

Parameters:
iPage - an imported page
Throws:
IOException, - BadPdfFormatException
IOException
BadPdfFormatException

addPage

public void addPage(Rectangle rect,
                    int rotation)
             throws DocumentException
Adds a blank page.

Parameters:
rect - The page dimension
rotation - The rotation angle in degrees
Throws:
DocumentException
Since:
2.1.5

addToBody

public PdfIndirectObject addToBody(PdfObject object,
                                   PdfIndirectReference ref)
                            throws IOException
Description copied from class: PdfWriter
Use this method to add a PDF object to the PDF body. Use this method only if you know what you're doing!

Overrides:
addToBody in class PdfWriter
Returns:
a PdfIndirectObject
Throws:
IOException

addToBody

public PdfIndirectObject addToBody(PdfObject object)
                            throws IOException
Description copied from class: PdfWriter
Use this method to add a PDF object to the PDF body. Use this method only if you know what you're doing!

Overrides:
addToBody in class PdfWriter
Returns:
a PdfIndirectObject
Throws:
IOException

flushTaggedObjects

protected void flushTaggedObjects()
                           throws IOException
Description copied from class: PdfWriter
Fix structure of tagged document: remove unused objects, remove unused items from class map, fix xref table due to removed objects.

Overrides:
flushTaggedObjects in class PdfWriter
Throws:
IOException

fixTaggedStructure

protected void fixTaggedStructure()
                           throws IOException
Throws:
IOException

flushIndirectObjects

protected void flushIndirectObjects()
                             throws IOException
Throws:
IOException

copyAcroForm

public void copyAcroForm(PdfReader reader)
                  throws 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
IOException
BadPdfFormatException

getCatalog

protected PdfDictionary getCatalog(PdfIndirectReference rootObj)
Overrides:
getCatalog in class PdfWriter

isStructTreeRootReference

protected boolean isStructTreeRootReference(PdfIndirectReference prRef)

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.itextpdf.text.pdf.PdfAnnotation)

freeReader

public void freeReader(PdfReader reader)
                throws 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:
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


Copyright © 2013. All Rights Reserved.