Save This Page
Home » iText-src-2.1.3 » com.lowagie » text » pdf » [javadoc | source]
com.lowagie.text.pdf
public class: PdfStamper [javadoc | source]
java.lang.Object
   com.lowagie.text.pdf.PdfStamper

All Implemented Interfaces:
    PdfViewerPreferences, PdfEncryptionSettings

Applies extra content to the pages of a PDF document. This extra content can be all the objects allowed in PdfContentByte including pages from other Pdfs. The original PDF will keep all the interactive elements including bookmarks, links and form fields.

It is also possible to change the field values and to flatten them. New fields can be added but not flattened.

Field Summary
protected  PdfStamperImp stamper    The writer 
Constructor:
 public PdfStamper(PdfReader reader,
    OutputStream os) throws IOException, DocumentException 
    Starts the process of adding extra content to an existing PDF document.
    Parameters:
    reader - the original document. It cannot be reused
    os - the output stream
    Throws:
    DocumentException - on error
    IOException - on error
 public PdfStamper(PdfReader reader,
    OutputStream os,
    char pdfVersion) throws IOException, DocumentException 
    Starts the process of adding extra content to an existing PDF document.
    Parameters:
    reader - the original document. It cannot be reused
    os - the output stream
    pdfVersion - the new pdf version or '\0' to keep the same version as the original document
    Throws:
    DocumentException - on error
    IOException - on error
 public PdfStamper(PdfReader reader,
    OutputStream os,
    char pdfVersion,
    boolean append) throws IOException, DocumentException 
    Starts the process of adding extra content to an existing PDF document, possibly as a new revision.
    Parameters:
    reader - the original document. It cannot be reused
    os - the output stream
    pdfVersion - the new pdf version or '\0' to keep the same version as the original document
    append - if true appends the document changes as a new revision. This is only useful for multiple signatures as nothing is gained in speed or memory
    Throws:
    DocumentException - on error
    IOException - on error
Method from com.lowagie.text.pdf.PdfStamper Summary:
addAnnotation,   addComments,   addFileAttachment,   addFileAttachment,   addJavaScript,   addViewerPreference,   close,   createSignature,   createSignature,   createSignature,   getAcroFields,   getImportedPage,   getMoreInfo,   getOverContent,   getPdfLayers,   getReader,   getSignatureAppearance,   getUnderContent,   getWriter,   insertPage,   isFullCompression,   isRotateContents,   makePackage,   makePackage,   partialFormFlattening,   replacePage,   setDuration,   setEncryption,   setEncryption,   setEncryption,   setEncryption,   setEncryption,   setFormFlattening,   setFreeTextFlattening,   setFullCompression,   setMoreInfo,   setOutlines,   setPageAction,   setRotateContents,   setThumbnail,   setTransition,   setViewerPreferences,   setXmpMetadata
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from com.lowagie.text.pdf.PdfStamper Detail:
 public  void addAnnotation(PdfAnnotation annot,
    int page) 
 public  void addComments(FdfReader fdf) throws IOException 
    Adds the comments present in an FDF file.
 public  void addFileAttachment(String description,
    PdfFileSpecification fs) throws IOException 
    Adds a file attachment at the document level. Existing attachments will be kept.
 public  void addFileAttachment(String description,
    byte[] fileStore,
    String file,
    String fileDisplay) throws IOException 
    Adds a file attachment at the document level. Existing attachments will be kept.
 public  void addJavaScript(String js) 
    Adds a JavaScript action at the document level. When the document opens all this JavaScript runs. The existing JavaScript will be replaced.
 public  void addViewerPreference(PdfName key,
    PdfObject value) 
    Adds a viewer preference
 public  void close() throws IOException, DocumentException 
    Closes the document. No more content can be written after the document is closed.

    If closing a signed document with an external signature the closing must be done in the PdfSignatureAppearance instance.

 public static PdfStamper createSignature(PdfReader reader,
    OutputStream os,
    char pdfVersion) throws IOException, DocumentException 
    Applies a digital signature to a document. The returned PdfStamper can be used normally as the signature is only applied when closing.

    Note that the pdf is created in memory.

    A possible use is:

    KeyStore ks = KeyStore.getInstance("pkcs12");
    ks.load(new FileInputStream("my_private_key.pfx"), "my_password".toCharArray());
    String alias = (String)ks.aliases().nextElement();
    PrivateKey key = (PrivateKey)ks.getKey(alias, "my_password".toCharArray());
    Certificate[] chain = ks.getCertificateChain(alias);
    PdfReader reader = new PdfReader("original.pdf");
    FileOutputStream fout = new FileOutputStream("signed.pdf");
    PdfStamper stp = PdfStamper.createSignature(reader, fout, '\0');
    PdfSignatureAppearance sap = stp.getSignatureAppearance();
    sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
    sap.setReason("I'm the author");
    sap.setLocation("Lisbon");
    // comment next line to have an invisible signature
    sap.setVisibleSignature(new Rectangle(100, 100, 200, 200), 1, null);
    stp.close();
    
 public static PdfStamper createSignature(PdfReader reader,
    OutputStream os,
    char pdfVersion,
    File tempFile) throws IOException, DocumentException 
    Applies a digital signature to a document. The returned PdfStamper can be used normally as the signature is only applied when closing.

    A possible use is:

    KeyStore ks = KeyStore.getInstance("pkcs12");
    ks.load(new FileInputStream("my_private_key.pfx"), "my_password".toCharArray());
    String alias = (String)ks.aliases().nextElement();
    PrivateKey key = (PrivateKey)ks.getKey(alias, "my_password".toCharArray());
    Certificate[] chain = ks.getCertificateChain(alias);
    PdfReader reader = new PdfReader("original.pdf");
    FileOutputStream fout = new FileOutputStream("signed.pdf");
    PdfStamper stp = PdfStamper.createSignature(reader, fout, '\0', new File("/temp"));
    PdfSignatureAppearance sap = stp.getSignatureAppearance();
    sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
    sap.setReason("I'm the author");
    sap.setLocation("Lisbon");
    // comment next line to have an invisible signature
    sap.setVisibleSignature(new Rectangle(100, 100, 200, 200), 1, null);
    stp.close();
    
 public static PdfStamper createSignature(PdfReader reader,
    OutputStream os,
    char pdfVersion,
    File tempFile,
    boolean append) throws IOException, DocumentException 
    Applies a digital signature to a document, possibly as a new revision, making possible multiple signatures. The returned PdfStamper can be used normally as the signature is only applied when closing.

    A possible use for adding a signature without invalidating an existing one is:

    KeyStore ks = KeyStore.getInstance("pkcs12");
    ks.load(new FileInputStream("my_private_key.pfx"), "my_password".toCharArray());
    String alias = (String)ks.aliases().nextElement();
    PrivateKey key = (PrivateKey)ks.getKey(alias, "my_password".toCharArray());
    Certificate[] chain = ks.getCertificateChain(alias);
    PdfReader reader = new PdfReader("original.pdf");
    FileOutputStream fout = new FileOutputStream("signed.pdf");
    PdfStamper stp = PdfStamper.createSignature(reader, fout, '\0', new
    File("/temp"), true);
    PdfSignatureAppearance sap = stp.getSignatureAppearance();
    sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
    sap.setReason("I'm the author");
    sap.setLocation("Lisbon");
    // comment next line to have an invisible signature
    sap.setVisibleSignature(new Rectangle(100, 100, 200, 200), 1, null);
    stp.close();
    
 public AcroFields getAcroFields() 
    Gets the AcroFields object that allows to get and set field values and to merge FDF forms.
 public PdfImportedPage getImportedPage(PdfReader reader,
    int pageNumber) 
    Gets a page from other PDF document. Note that calling this method more than once with the same parameters will retrieve the same object.
 public HashMap getMoreInfo() 
    Gets the optional String map to add or change values in the info dictionary.
 public PdfContentByte getOverContent(int pageNum) 
    Gets a PdfContentByte to write over the page of the original document.
 public Map getPdfLayers() 
    Gets the PdfLayer objects in an existing document as a Map with the names/titles of the layers as keys.
 public PdfReader getReader() 
    Gets the underlying PdfReader.
 public PdfSignatureAppearance getSignatureAppearance() 
    Gets the signing instance. The appearances and other parameters can the be set.
 public PdfContentByte getUnderContent(int pageNum) 
    Gets a PdfContentByte to write under the page of the original document.
 public PdfWriter getWriter() 
    Gets the underlying PdfWriter.
 public  void insertPage(int pageNumber,
    Rectangle mediabox) 
    Inserts a blank page. All the pages above and including pageNumber will be shifted up. If pageNumber is bigger than the total number of pages the new page will be the last one.
 public boolean isFullCompression() 
    Gets the 1.5 compression status.
 public boolean isRotateContents() 
    Checks if the content is automatically adjusted to compensate the original page rotation.
 public  void makePackage(PdfName initialView) 
    This is the most simple way to change a PDF into a portable collection. Choose one of the following names:
    • PdfName.D (detailed view)
    • PdfName.T (tiled view)
    • PdfName.H (hidden)
    Pass this name as a parameter and your PDF will be a portable collection with all the embedded and attached files as entries.
 public  void makePackage(PdfCollection collection) 
    Adds or replaces the Collection Dictionary in the Catalog.
 public boolean partialFormFlattening(String name) 
    Adds name to the list of fields that will be flattened on close, all the other fields will remain. If this method is never called or is called with invalid field names, all the fields will be flattened.

    Calling setFormFlattening(true) is needed to have any kind of flattening.

 public  void replacePage(PdfReader r,
    int pageImported,
    int pageReplaced) 
    Replaces a page from this document with a page from other document. Only the content is replaced not the fields and annotations. This method must be called before getOverContent() or getUndercontent() are called for the same page.
 public  void setDuration(int seconds,
    int page) 
    Sets the display duration for the page (for presentations)
 public  void setEncryption(Certificate[] certs,
    int[] permissions,
    int encryptionType) throws DocumentException 
    Sets the certificate encryption options for this document. An array of one or more public certificates must be provided together with an array of the same size for the permissions for each certificate. The open permissions for the document can be AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations, AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. The permissions can be combined by ORing them. Optionally DO_NOT_ENCRYPT_METADATA can be ored to output the metadata in cleartext
 public  void setEncryption(byte[] userPassword,
    byte[] ownerPassword,
    int permissions,
    boolean strength128Bits) throws DocumentException 
    Sets the encryption options for this document. The userPassword and the ownerPassword can be null or have zero length. In this case the ownerPassword is replaced by a random string. The open permissions for the document can be AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations, AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. The permissions can be combined by ORing them.
 public  void setEncryption(byte[] userPassword,
    byte[] ownerPassword,
    int permissions,
    int encryptionType) throws DocumentException 
    Sets the encryption options for this document. The userPassword and the ownerPassword can be null or have zero length. In this case the ownerPassword is replaced by a random string. The open permissions for the document can be AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations, AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. The permissions can be combined by ORing them.
 public  void setEncryption(boolean strength,
    String userPassword,
    String ownerPassword,
    int permissions) throws DocumentException 
    Sets the encryption options for this document. The userPassword and the ownerPassword can be null or have zero length. In this case the ownerPassword is replaced by a random string. The open permissions for the document can be AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations, AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. The permissions can be combined by ORing them.
 public  void setEncryption(int encryptionType,
    String userPassword,
    String ownerPassword,
    int permissions) throws DocumentException 
    Sets the encryption options for this document. The userPassword and the ownerPassword can be null or have zero length. In this case the ownerPassword is replaced by a random string. The open permissions for the document can be AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations, AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting. The permissions can be combined by ORing them.
 public  void setFormFlattening(boolean flat) 
 public  void setFreeTextFlattening(boolean flat) 
    Determines if the FreeText annotations are flattened on close.
 public  void setFullCompression() 
    Sets the document's compression to the new 1.5 mode with object streams and xref streams. It can be set at any time but once set it can't be unset.
 public  void setMoreInfo(HashMap moreInfo) 
    An optional String map to add or change values in the info dictionary. Entries with null values delete the key in the original info dictionary
 public  void setOutlines(List outlines) 
 public  void setPageAction(PdfName actionType,
    PdfAction action,
    int page) throws PdfException 
    Sets the open and close page additional action.
 public  void setRotateContents(boolean rotateContents) 
    Flags the content to be automatically adjusted to compensate the original page rotation. The default is true.
 public  void setThumbnail(Image image,
    int page) throws PdfException, DocumentException 
    Sets the thumbnail image for a page.
 public  void setTransition(PdfTransition transition,
    int page) 
    Sets the transition for the page
 public  void setViewerPreferences(int preferences) 
    Sets the viewer preferences.
 public  void setXmpMetadata(byte[] xmp) 
    Sets the XMP metadata.