Example usage for com.itextpdf.text.pdf PdfReader PdfReader

List of usage examples for com.itextpdf.text.pdf PdfReader PdfReader

Introduction

In this page you can find the example usage for com.itextpdf.text.pdf PdfReader PdfReader.

Prototype

public PdfReader(final PdfReader reader) 

Source Link

Document

Creates an independent duplicate.

Usage

From source file:de.mat.utils.pdftools.PdfResize.java

License:Mozilla Public License

/**
/**/*from ww w. j a  v a2 s . com*/
 * <h4>FeatureDomain:</h4>
 *     PublishingTools
 * <h4>FeatureDescription:</h4>
 *     scales and move comntents of the pdf pages from fileSrc and output to
 *     fileNew
 * <h4>FeatureResult:</h4>
 *   <ul>
 *     <li>create PDF - fileNew
 *   </ul> 
 * <h4>FeatureKeywords:</h4>
 *     PDF Publishing
 * @param fileSrc - source-pdf
 * @param fileNew - scaled dest-pdf
 * @param factorX - scaling x
 * @param factorY - scaling y
 * @param pixelLeft - move right
 * @param pixelTop - move down
 * @throws Exception
 */
public static void resizePdf(String fileSrc, String fileNew, float factorX, float factorY, float pixelLeft,
        float pixelTop) throws Exception {

    // open reader
    PdfReader reader = new PdfReader(fileSrc);

    // get pagebasedata
    int pageCount = reader.getNumberOfPages();
    Rectangle psize = reader.getPageSize(1);
    float width = psize.getHeight();
    float height = psize.getWidth();

    // open writer
    Document documentNew = new Document(new Rectangle(height * factorY, width * factorX));
    PdfWriter writerNew = PdfWriter.getInstance(documentNew, new FileOutputStream(fileNew));
    documentNew.open();
    PdfContentByte cb = writerNew.getDirectContent();

    // iterate pages
    int i = 0;
    while (i < pageCount) {
        i++;
        // imoport page from reader and scale it to writer
        documentNew.newPage();
        PdfImportedPage page = writerNew.getImportedPage(reader, i);
        cb.addTemplate(page, factorX, 0, 0, factorY, pixelLeft, pixelTop);

        if (LOGGER.isInfoEnabled())
            LOGGER.info("AddPage " + i + " from:" + fileSrc + " to:" + fileNew);
    }

    documentNew.close();
    writerNew.close();
}

From source file:de.mat.utils.pdftools.PdfSort4Print.java

License:Mozilla Public License

public static void sortPdfPages(String pdfSourceFile, String pdfDestinationFile, int perPage) throws Exception {
    PdfImportedPage page = null;/* ww  w. j  a  v  a2 s.  c  o m*/

    if (perPage != 2 && perPage != 4) {
        throw new IllegalArgumentException(
                "Sorry, perPage must only be " + "2 or 4. All other is not implemented yet :-(");
    }

    // #######
    // # fill to odd pagecount
    // #######

    // create reader
    PdfReader readerOrig = new PdfReader(pdfSourceFile);

    // calc data
    int countPage = readerOrig.getNumberOfPages();
    int blaetter = new Double(Math.ceil((countPage + 0.0) / perPage / 2)).intValue();
    int zielPages = (blaetter * perPage * 2) - countPage;

    if (LOGGER.isInfoEnabled())
        LOGGER.info("CurPages: " + countPage + " Blaetter:" + blaetter + " AddPage:" + zielPages);

    // add sites
    String oddFile = pdfDestinationFile + ".filled.pdf";
    PdfStamper stamper = new PdfStamper(readerOrig, new FileOutputStream(oddFile));
    // add empty pages
    for (int i = 1; i <= zielPages; i++) {
        if (LOGGER.isDebugEnabled())
            LOGGER.debug("addEmptyPage: " + i);
        stamper.insertPage(readerOrig.getNumberOfPages() + 1, readerOrig.getPageSizeWithRotation(1));
    }
    stamper.close();
    readerOrig.close();

    // ########
    // # read new odd document and sort pages
    // ########
    // step 1: create new reader
    PdfReader readerOdd = new PdfReader(oddFile);

    // create writerSorted
    String sortedFile = pdfDestinationFile;
    Document documentSorted = new Document(readerOrig.getPageSizeWithRotation(1));
    PdfCopy writerSorted = new PdfCopy(documentSorted, new FileOutputStream(sortedFile));
    documentSorted.open();

    // add pages in calced order
    List<Integer> lstPageNr = new ArrayList<Integer>();
    int pageCount = readerOdd.getNumberOfPages();
    int startseite = 1;
    for (int i = 1; i <= blaetter; i++) {
        if (perPage == 2) {
            startseite = ((i - 1) * perPage) + 1;

            if (LOGGER.isDebugEnabled())
                LOGGER.debug("Blatt:" + i + " Startseite: " + startseite);
            // front top
            lstPageNr.add(new Integer(pageCount - startseite + 1));
            // front bottom
            lstPageNr.add(new Integer(startseite));

            // back top
            lstPageNr.add(new Integer(startseite + 1));
            // back bottom
            lstPageNr.add(new Integer(pageCount - startseite + 1 - 1));
        } else if (perPage == 4) {
            startseite = ((i - 1) * perPage) + 1;

            if (LOGGER.isDebugEnabled())
                LOGGER.debug("Blatt:" + i + " Startseite: " + startseite);

            // front top left
            lstPageNr.add(new Integer(pageCount - startseite + 1));
            // front top right
            lstPageNr.add(new Integer(startseite));
            // front bottom lefts
            lstPageNr.add(new Integer(pageCount - startseite + 1 - 2));
            // front bottom right
            lstPageNr.add(new Integer(startseite + 2));

            // back top left
            lstPageNr.add(new Integer(startseite + 1));
            // back top right
            lstPageNr.add(new Integer(pageCount - startseite + 1 - 1));
            // back bottom left
            lstPageNr.add(new Integer(startseite + 1 + 2));
            // back bottom right
            lstPageNr.add(new Integer(pageCount - startseite + 1 - 1 - 2));
        } else {
            throw new IllegalArgumentException(
                    "Sorry, perPage must " + "only be 2 or 4. All other is not implemented yet :-(");
        }
    }
    if (LOGGER.isInfoEnabled())
        LOGGER.info("Seiten:" + lstPageNr.size());

    // copy pages
    for (Iterator iter = lstPageNr.iterator(); iter.hasNext();) {
        int pageNum = ((Integer) iter.next()).intValue();
        if (LOGGER.isDebugEnabled())
            LOGGER.debug("addSortPage: " + pageNum);
        page = writerSorted.getImportedPage(readerOdd, pageNum);
        writerSorted.addPage(page);
    }

    // close everything
    documentSorted.close();
    writerSorted.close();
    readerOdd.close();

    // delete Tmp-File
    File file = new File(oddFile);
    file.delete();
}

From source file:de.mpg.escidoc.services.extraction.ExtractionChain.java

License:Open Source License

public ExtractionResult doExtract(String infileName, String outfileName) {
    File outfile = new File(outfileName);

    Date stepStart = new Date();
    Date current;//w w w . java2  s .com

    logger.info("Extracting PDF content ----------------------------------------");
    logger.info("Infile: " + infileName);
    logger.info("Outfile: " + outfileName);

    logger.info(stepStart + " -- started");

    // xPDF

    try {
        logger.info("Extracting with xPDF");

        StringBuffer command = new StringBuffer(2048);
        command.append(System.getProperty("os.name").contains("Windows") ? pdftotext + " -enc UTF-8 "
                : "/usr/bin/pdftotext -enc UTF-8 ");
        command.append(infileName);
        command.append(" ");
        command.append(outfileName);

        Process proc = Runtime.getRuntime().exec(command.toString());

        StreamGobbler inputGobbler = new StreamGobbler(proc.getInputStream(), "xPDF");
        StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "xPDF");

        inputGobbler.start();
        errorGobbler.start();

        int exitCode = proc.waitFor();

        if (proc.exitValue() == 0) {

            if (verbose) {
                BufferedReader bufferedReader = new BufferedReader(
                        new InputStreamReader(new FileInputStream(outfile), "UTF-8"));
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    logger.info(line);
                }
                bufferedReader.close();
            }
            current = new Date();
            logger.info(current + " -- finished successfully");
            logger.info("Extraction took " + (current.getTime() - stepStart.getTime()));

            return ExtractionResult.OK;
        }
    } catch (Exception e) {
        logger.warn("Error extracting PDF with xPDF:");
        logger.warn(e.getStackTrace());
    }

    current = new Date();
    logger.info(current + " -- finished unsuccessfully");
    logger.info("Extraction attempt took " + (current.getTime() - stepStart.getTime()));

    // PDFBox
    try {
        logger.info("Extracting with PDFBox");
        stepStart = new Date();

        StringBuffer command = new StringBuffer(1024);
        command.append(System.getProperty("os.name").contains("Windows")
                ? "java -Dfile.encoding=UTF-8 -jar " + pdfboxAppJar + " ExtractText "
                : "/usr/bin/java -Dfile.encoding=UTF-8 -jar " + pdfboxAppJar + " ExtractText ");
        command.append(infileName);
        command.append(" ");
        command.append(outfileName);

        Process proc = Runtime.getRuntime().exec(command.toString());
        StreamGobbler inputGobbler = new StreamGobbler(proc.getInputStream(), "PDFBox");
        StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "PDFBox");

        inputGobbler.start();
        errorGobbler.start();

        int exitCode = proc.waitFor();

        if (exitCode == 0) {

            if (verbose) {
                BufferedReader bufferedReader = new BufferedReader(
                        new InputStreamReader(new FileInputStream(outfile), "UTF-8"));
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    logger.info(line);
                }
                bufferedReader.close();
            }
            current = new Date();
            logger.info(current + " -- finished successfully");
            logger.info("Extraction took " + (current.getTime() - stepStart.getTime()));

            return ExtractionResult.OK;
        }
    } catch (Exception e) {
        logger.warn("Error extracting PDF with PDFBox:");
        logger.warn(e.getStackTrace());
    }

    current = new Date();
    logger.info(current + " -- finished unsuccessfully");
    logger.info("Extraction attempt took " + (current.getTime() - stepStart.getTime()));

    // iText
    try {
        logger.info("Extracting with iText");
        stepStart = new Date();

        PdfReader reader = new PdfReader(infileName);
        int numberOfPages = reader.getNumberOfPages();

        outputStreamWriter = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8");
        for (int i = 0; i < numberOfPages; i++) {
            outputStreamWriter.write(PdfTextExtractor.getTextFromPage(reader, i + 1));
        }

        if (verbose) {
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(new FileInputStream(outfile), "UTF-8"));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                logger.info(line);
            }
            bufferedReader.close();
        }

        current = new Date();
        logger.info(current + " -- finished successfully");
        logger.info("Extraction took " + (current.getTime() - stepStart.getTime()));

        return ExtractionResult.OK;

    } catch (Exception e) {
        logger.warn("Error extracting PDF with iText:", e);
    }

    // tika

    InputStream stream = null;

    try {
        logger.info("Extracting with Tika");
        stepStart = new Date();

        stream = TikaInputStream.get(new File(infileName));

        ContentHandler handler = new BodyContentHandler(TIKA_CONTENT_SIZE);

        new AutoDetectParser().parse(stream, handler, new Metadata(), new ParseContext());

        String content = handler.toString();

        FileUtils.writeStringToFile(outfile, content);

        stream.close();

        if (verbose) {
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(new FileInputStream(outfile), "UTF-8"));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                logger.info(line);
            }
            bufferedReader.close();
        }

        current = new Date();
        logger.info(current + " -- finished successfully");
        logger.info("Extraction took " + (current.getTime() - stepStart.getTime()));

        return ExtractionResult.OK;

    } catch (Exception e) {
        logger.warn("Error extracting Tika:", e);
        try {
            stream.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }

    current = new Date();
    logger.warn(current + " -- finished unsuccessfully");
    logger.info("Extraction attempt took " + (current.getTime() - stepStart.getTime()));

    logger.info("... giving up");

    return ExtractionResult.FAILURE;
}

From source file:de.offis.health.icardea.cied.pdf.extractor.PDFiText5Extractor.java

License:GNU General Public License

public boolean openDocument(String fullPDFFilePath) throws IOException, Exception {
    boolean returnCode = false;

    if (fullPDFFilePath == null) {
        throw new Exception("There is no full path to a file given.");
    } // end if/*from   ww w  . j  av a  2s. c o m*/

    File pdfFile = new File(fullPDFFilePath);
    if (pdfFile.isFile() && pdfFile.canRead()) {
        this.fullPDFFilePath = pdfFile.getAbsolutePath();
        this.fullPDFDirectoryPath = pdfFile.getPath();

        logger.debug("FilePath.....: " + this.fullPDFFilePath);
        logger.debug("DirectoryPath: " + this.fullPDFDirectoryPath);

        // Open the PDF file
        pdfReader = new PdfReader(pdfFile.getAbsolutePath());

        logger.debug("PDF contains pages: " + pdfReader.getNumberOfPages());

        // Remove reference to the file object as it is no longer needed (cleanup)
        pdfFile = null;

        returnCode = true;
    } else {
        throw new Exception("The given PDF file is not a file or not readable (check permissions).");
    } // end if..else
    return returnCode;
}

From source file:de.pribluda.pirate.barser.BudgetParser20102011.java

/**
 * parse and process document//  w w  w . j a va2  s  .  c o  m
 *
 * @param args argv[0] desigfnates pdf file to process
 */
public static void main(String[] args) throws IOException {

    if (args.length < 1) {
        System.err.println("usage: budgetParser <pdf file name>");
        System.exit(-1);
    }

    // open PDF file
    final PdfReader pdfReader = new PdfReader(args[0]);
    final BudgetParser20102011 budgetParser = new BudgetParser20102011();

    DBCollection coll = connectMongo();

    budgetParser.processFile(pdfReader, coll);
}

From source file:de.rub.dez6a3.jpdfsigner.control.ITextSigner.java

License:Open Source License

public ByteArrayOutputStream doSign(byte[] pdf, Rectangle stampPos, int pageNmbrForStamp) throws IOException,
        DocumentException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {
    Certificate[] chain = signCert.toArray(new Certificate[0]);

    PdfReader reader = new PdfReader(pdf);
    ByteArrayOutputStream byteOS = new ByteArrayOutputStream();
    PdfStamper stp = PdfStamper.createSignature(reader, byteOS, '\0', null, true);
    PdfSignatureAppearance sap = stp.getSignatureAppearance();
    if (stampPos != null) {
        sap.setVisibleSignature(//from w ww.j av a  2  s  .c  o  m
                new com.itextpdf.text.Rectangle(stampPos.x, stampPos.y, stampPos.width, stampPos.height),
                pageNmbrForStamp, null);
        sap.setRenderingMode(PdfSignatureAppearance.RenderingMode.NAME_AND_DESCRIPTION);
        sap.setAcro6Layers(true);
    }
    //        Siganture Appearance

    PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, new PdfName("adbe.pkcs7.detached"));
    log.info("Creating signature with reason: " + ParamValidator.getInstance().getSignatureReason());
    sap.setReason(ParamValidator.getInstance().getSignatureReason());
    sap.setLocation("Ruhr-Universitt Bochum");
    Image i = Image.getInstance(getClass().getResource("/de/rub/dez6a3/jpdfsigner/resources/images/sign.png"));
    sap.setImage(i);
    sap.setCrypto((PrivateKey) signPrivKey, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
    dic.setReason(ParamValidator.getInstance().getSignatureReason());
    dic.setLocation("Ruhr-Universitt Bochum");
    sap.setCryptoDictionary(dic);
    // preserve some space for the contents
    int contentEstimated = 15000;
    HashMap<PdfName, Integer> exc = new HashMap<PdfName, Integer>();
    exc.put(PdfName.CONTENTS, new Integer(contentEstimated * 2 + 2));
    sap.preClose(exc);
    // make the digest
    InputStream data = sap.getRangeStream();
    MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
    byte buf[] = new byte[8192];
    int n;
    while ((n = data.read(buf)) > 0) {
        messageDigest.update(buf, 0, n);
    }
    byte hash[] = messageDigest.digest();
    Calendar cal = Calendar.getInstance();
    // If we add a time stamp:
    TSAClient tsc = new TSAClientBouncyCastle("http://zeitstempel.dfn.de/");
    // Create the signature

    PdfPKCS7 sgn;
    try {
        sgn = new PdfPKCS7((PrivateKey) signPrivKey, chain, null, "SHA1", null, false);
        byte sh[] = sgn.getAuthenticatedAttributeBytes(hash, cal, null);
        sgn.update(sh, 0, sh.length);
        byte[] encodedSig = sgn.getEncodedPKCS7(hash, cal, tsc, null);

        if (contentEstimated + 2 < encodedSig.length) {
            throw new DocumentException("Not enough space");
        }

        byte[] paddedSig = new byte[contentEstimated];
        System.arraycopy(encodedSig, 0, paddedSig, 0, encodedSig.length);
        // Replace the contents
        PdfDictionary dic2 = new PdfDictionary();
        dic2.put(PdfName.CONTENTS, new PdfString(paddedSig).setHexWriting(true));
        sap.close(dic2);
    } catch (NoSuchProviderException ex) {
        ex.printStackTrace();
    }
    return byteOS;
}

From source file:de.rub.dez6a3.jpdfsigner.control.JPodPDFViewer.java

License:Open Source License

@Override
public ArrayList getAttachments() throws IOException {
    ArrayList files = new ArrayList();
    PdfReader reader = new PdfReader(conf.getPDFFile());
    PdfDictionary root = reader.getCatalog();
    PdfDictionary documentnames = root.getAsDict(PdfName.NAMES);
    PdfDictionary embeddedfiles = documentnames.getAsDict(PdfName.EMBEDDEDFILES);
    PdfArray filespecs = embeddedfiles.getAsArray(PdfName.NAMES);
    PdfDictionary filespec;/* w ww . j a v a 2  s .c  om*/
    PdfDictionary refs;
    for (int i = 0; i < filespecs.size();) {
        filespecs.getAsName(i++);
        filespec = filespecs.getAsDict(i++);
        refs = filespec.getAsDict(PdfName.EF);
        Iterator it = refs.getKeys().iterator();
        while (it.hasNext()) {
            PdfName key = (PdfName) it.next();
            if (key.toString().equals("/F")) {

                String filename = "-";
                String desc = "-";
                int size = -1;
                String moddate = "-";
                String compsize = "-";
                PdfObject pdfobj = null;

                try {
                    filename = filespec.getAsString(key).toString();
                } catch (Exception e) {
                    log.warn("Cannot load attachment-name - " + e.getMessage());
                }
                try {
                    desc = filespec.getAsString(PdfName.DESC).toString();
                } catch (Exception e) {
                    log.warn("Cannot load attachment-description - " + e.getMessage());
                }
                byte[] attBytes = null;
                try {
                    PRStream stream = (PRStream) PdfReader.getPdfObject(refs.getAsIndirectObject(key));
                    attBytes = PdfReader.getStreamBytes(stream);
                    size = attBytes.length;
                } catch (Exception e) {
                    log.warn("Cannot load attachment-size - " + e.getMessage());
                }
                try {
                    pdfobj = PdfReader.getPdfObject(refs.getAsIndirectObject(key));
                } catch (Exception e) {
                    log.warn("Cannot load attachment-pdfobject - " + e.getMessage());
                }

                Hashtable fileData = new Hashtable();
                fileData.put(ATTACHMENT_FILENAME_STRING, filename); //filename
                fileData.put(ATTACHMENT_DESCRIPTION_STRING, desc); //Description
                fileData.put(ATTACHMENT_SIZE_INT, size); //size
                fileData.put(ATTACHMENT_BYTES_ARR, attBytes); //bytes
                files.add(fileData);
            }
        }
    }
    return files;
}

From source file:de.rub.dez6a3.jpdfsigner.view.SignatureValidPanel.java

License:Open Source License

public void verifySignature() {
    log.info("Verifying PDF signatures ...");
    try {/*from   ww  w.j a  v  a 2s.  co  m*/
        verifyer.verifySignature(new PdfReader(Configurator.getInstance().getPDFFile()),
                ParamValidator.getInstance().getTrustStore());
        trustCode = 0;
        parentBtn.setEnabled(true);
        parentBtn.setText(LanguageFactory.getText(LanguageFactory.TOOLBARPOPDOWNBUTTON_DOCUMENT_VALID));
        headline.setText(LanguageFactory.getText(LanguageFactory.SIGNATUREVALIDPANEL_VALID_PDF_SIG));
        icoLbl.setIcon(icon[0]);
        this.parentBtn.setIcon(validPdfIco);
        this.parentBtn.setDisabledIcon(validPdfIco);
    } catch (VerifySignatureException ex) {
        trustCode = -1;
        parentBtn.setEnabled(true);
        parentBtn.setText(LanguageFactory.getText(LanguageFactory.TOOLBARPOPDOWNBUTTON_DOCUMENT_INVALID));
        headline.setText(LanguageFactory.getText(LanguageFactory.SIGNATUREVALIDPANEL_INVALID_PDF_SIG));
        icoLbl.setIcon(icon[1]);
        this.parentBtn.setIcon(invalidPdfIco);
        this.parentBtn.setDisabledIcon(invalidPdfIco);
        log.warn("Cannot verify PDF-Signatures against truststore: " + ex.getMessage());
    } catch (Exception ex) {
        trustCode = -2;
        parentBtn.setEnabled(false);
        parentBtn.setText(LanguageFactory.getText(LanguageFactory.TOOLBARPOPDOWNBUTTON_DOCUMENT_UNKNOWN));
        headline.setText(LanguageFactory.getText(LanguageFactory.SIGNATUREVALIDPANEL_INVALID_PDF_SIG));
        icoLbl.setIcon(icon[1]);
        this.parentBtn.setIcon(unknownPdfIco);
        this.parentBtn.setDisabledIcon(unknownPdfIco);
        log.error("Cannot verify PDF-Signature due to a technical exception: " + ex.getMessage());
    }
    Configurator.getInstance().getSignatureView().updateTreeNodes();
    log.info("PDF verification done");

    setFont(new Font("Arial", Font.BOLD, 11));
    setForeground(new Color(60, 60, 60));
    setBackground(new Color(0, 0, 0, 0));
    setOpaque(false);

    if (verifyer.getIssuerName() != null) {
        issuer.setText(verifyer.getIssuerName());
    } else {
        issuer.setText(LanguageFactory.getText(LanguageFactory.SIGNATUREVALIDPANEL_UNKNOWN_USER));
    }
    if (verifyer.getSignedForName() != null) {
        issuedFor.setText(verifyer.getSignedForName());
    } else {
        issuedFor.setText(LanguageFactory.getText(LanguageFactory.SIGNATUREVALIDPANEL_UNKNOWN_USER));
    }

}

From source file:de.sign.SignMain.java

License:Open Source License

public void sign() throws DocumentException, IOException, GeneralSecurityException {

    PdfReader reader = new PdfReader(this.orgFile);
    OutputStream os = new FileOutputStream(this.orgFile.replace(".pdf", "SIGN.pdf"));
    PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');

    // Create appearance
    PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
    Rectangle cropBox = reader.getCropBox(1);
    float width = 50;
    float height = 50;
    Rectangle rectangle = new Rectangle(cropBox.getRight(width) - 20, cropBox.getTop(height) - 20,
            cropBox.getRight() - 20, cropBox.getTop() - 20);
    appearance.setVisibleSignature(rectangle, 1, "sig");
    appearance.setLocation(getHostname());
    appearance.setReason("Evidence of document integrity");
    appearance.setCertificationLevel(1); // 1 = CERTIFIED_NO_CHANGES_ALLOWED
    appearance.setAcro6Layers(false);/*from   ww w  .j  a  va  2  s .  c o  m*/
    appearance.setLayer2Text("");

    //Sign
    Security.addProvider(new BouncyCastleProvider());
    TSAClient tsc = new TSAClientBouncyCastle(this.tsa_URL);
    ExternalDigest digest = new BouncyCastleDigest();
    ExternalSignature signature = new PrivateKeySignature(getPrivateKey(), "SHA-1", "BC");
    MakeSignature.signDetached(appearance, digest, signature, getCertificateChain(), null, null, tsc, 0,
            CryptoStandard.CMS);
}

From source file:digiho.reading.java

public static void main(String[] args) {
    try {//from   ww w. j av  a 2s  .  co  m

        PdfReader reader = new PdfReader("G:\\43211688.pdf");
        System.out.println("This PDF has " + reader.getNumberOfPages() + " pages.");
        String page = PdfTextExtractor.getTextFromPage(reader, 2);
        System.out.println("Page Content:\n\n" + page + "\n\n");
        System.out.println("Is this document tampered: " + reader.isTampered());
        System.out.println("Is this document encrypted: " + reader.isEncrypted());

    } catch (IOException e) {
        e.printStackTrace();
    }

}