Class PdfAStamper

java.lang.Object
com.itextpdf.text.pdf.PdfStamper
com.itextpdf.text.pdf.PdfAStamper
All Implemented Interfaces:
PdfEncryptionSettings, PdfViewerPreferences

public class PdfAStamper extends PdfStamper
Extension of PdfStamper that will attempt to keep a file in conformance with the PDF/A standard.
See Also:
  • Constructor Details

    • PdfAStamper

      public PdfAStamper(PdfReader reader, OutputStream os, PdfAConformanceLevel conformanceLevel) throws DocumentException, IOException
      Starts the process of adding extra content to an existing PDF document keeping the document PDF/A conformant.
      Parameters:
      reader - the original document. It cannot be reused
      os - the output stream
      conformanceLevel - PDF/A conformance level of a new PDF document
      Throws:
      DocumentException - on error
      IOException - or error
    • PdfAStamper

      public PdfAStamper(PdfReader reader, OutputStream os, char pdfVersion, PdfAConformanceLevel conformanceLevel) throws DocumentException, IOException
      Starts the process of adding extra content to an existing PDF document keeping the document PDF/A conformant.
      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
      conformanceLevel - PDF/A conformance level of a new PDF document
      Throws:
      DocumentException - on error
      IOException - or error
    • PdfAStamper

      public PdfAStamper(PdfReader reader, OutputStream os, char pdfVersion, boolean append, PdfAConformanceLevel conformanceLevel) throws DocumentException, IOException
      Starts the process of adding extra content to an existing PDF document keeping the document PDF/A conformant.
      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
      conformanceLevel - PDF/A conformance level of a new PDF document
      Throws:
      DocumentException - on error
      IOException - or error
  • Method Details

    • createSignature

      public static PdfAStamper createSignature(PdfReader reader, OutputStream os, char pdfVersion, File tempFile, boolean append, PdfAConformanceLevel conformanceLevel) throws DocumentException, IOException
      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();
       
      Parameters:
      reader - the original document
      os - the output stream or null to keep the document in the temporary file
      pdfVersion - the new pdf version or '\0' to keep the same version as the original document
      tempFile - location of the temporary file. If it's a directory a temporary file will be created there. If it's a file it will be used directly. The file will be deleted on exit unless os is null. In that case the document can be retrieved directly from the temporary file. If it's null no temporary file will be created and memory will be used
      append - if true the signature and all the other content will be added as a new revision thus not invalidating existing signatures
      conformanceLevel - PDF/A conformance level of a new PDF document
      Returns:
      a PdfAStamper
      Throws:
      DocumentException - on error
      IOException - on error
    • createSignature

      public static PdfAStamper createSignature(PdfReader reader, OutputStream os, char pdfVersion, PdfAConformanceLevel conformanceLevel) throws DocumentException, IOException
      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();
       
      Parameters:
      reader - the original document
      os - the output stream
      pdfVersion - the new pdf version or '\0' to keep the same version as the original document
      conformanceLevel - PDF/A conformance level of a new PDF document
      Returns:
      a PdfAStamper
      Throws:
      DocumentException - on error
      IOException - on error
    • createSignature

      public static PdfAStamper createSignature(PdfReader reader, OutputStream os, char pdfVersion, File tempFile, PdfAConformanceLevel conformanceLevel) throws DocumentException, IOException
      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();
       
      Parameters:
      reader - the original document
      os - the output stream or null to keep the document in the temporary file
      pdfVersion - the new pdf version or '\0' to keep the same version as the original document
      tempFile - location of the temporary file. If it's a directory a temporary file will be created there. If it's a file it will be used directly. The file will be deleted on exit unless os is null. In that case the document can be retrieved directly from the temporary file. If it's null no temporary file will be created and memory will be used
      conformanceLevel - PDF/A conformance level of a new PDF document
      Returns:
      a PdfAStamper
      Throws:
      DocumentException - on error
      IOException - on error