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:org.gmdev.pdftrick.utils.CustomExtraImgReader.java

License:Open Source License

/**
 * Read a png image with if all other method fails
 * @param ref/*from w  ww  .  j  a  v  a2  s.c om*/
 * @param resultFile
 * @return The BufferedImage obj
 * @throws IOException
 * @throws ImageReadException
 */
public static BufferedImage readIndexedPNG(int ref, String resultFile) throws IOException, ImageReadException {

    PdfReader reader = new PdfReader(resultFile);
    PRStream stream = (PRStream) reader.getPdfObject(ref);
    PdfDictionary dic = stream;
    byte[] content = PdfReader.getStreamBytesRaw(stream);

    int width = dic.getAsNumber(PdfName.WIDTH).intValue();
    int height = dic.getAsNumber(PdfName.HEIGHT).intValue();
    int pngBitDepth = dic.getAsNumber(PdfName.BITSPERCOMPONENT).intValue();

    PdfObject colorspace = dic.getDirectObject(PdfName.COLORSPACE);
    PdfArray decode = dic.getAsArray(PdfName.DECODE);
    PdfArray carray = (PdfArray) colorspace;
    PdfObject id2 = carray.getDirectObject(3);

    byte[] palette = null;
    if (id2 instanceof PdfString) {
        palette = ((PdfString) id2).getBytes();
    } else if (id2 instanceof PRStream) {
        palette = PdfReader.getStreamBytes(((PRStream) id2));
    }

    Map<PdfName, FilterHandlers.FilterHandler> handlers = new HashMap<PdfName, FilterHandlers.FilterHandler>(
            FilterHandlers.getDefaultFilterHandlers());
    byte[] imageBytes = PdfReader.decodeBytes(content, dic, handlers);

    int stride = (width * pngBitDepth + 7) / 8;
    ByteArrayOutputStream ms = new ByteArrayOutputStream();
    PngWriter png = new PngWriter(ms);

    if (decode != null) {
        if (pngBitDepth == 1) {
            // if the decode array is 1,0, then we need to invert the image
            if (decode.getAsNumber(0).intValue() == 1 && decode.getAsNumber(1).intValue() == 0) {
                int len = imageBytes.length;
                for (int t = 0; t < len; ++t) {
                    imageBytes[t] ^= 0xff;
                }
            } else {
                // if the decode array is 0,1, do nothing.  It's possible that the array could be 0,0 or 1,1 - but that would be silly, so we'll just ignore that case
            }
        } else {
            // todo: add decode transformation for other depths
        }
    }
    int pngColorType = 0;
    png.writeHeader(width, height, pngBitDepth, pngColorType);

    if (palette != null) {
        png.writePalette(palette);
    }
    png.writeData(imageBytes, stride);
    png.writeEnd();

    imageBytes = ms.toByteArray();

    InputStream in = new ByteArrayInputStream(imageBytes);
    ImageInputStream ima_stream = ImageIO.createImageInputStream(in);

    BufferedImage buffImg = null;
    BufferedImage buffPic = ImageIO.read(ima_stream);

    // check if image contains a mask image ... experimental for this type of image
    BufferedImage buffMask = null;
    PRStream maskStream = (PRStream) dic.getAsStream(PdfName.SMASK);
    if (maskStream != null) {
        PdfImageObject maskImage = new PdfImageObject(maskStream);
        buffMask = maskImage.getBufferedImage();

        Image img = PdfTrickUtils.TransformGrayToTransparency(buffMask);
        buffImg = PdfTrickUtils.ApplyTransparency(buffPic, img);
    } else {
        buffImg = buffPic;
    }

    reader.close();
    ms.close();
    in.close();
    return buffImg;
}

From source file:org.h819.commons.file.MyPDFUtils.java

/**
 *  pdf ? pdf// w  w w.  j a v  a  2s . com
 *
 * @param srcPdf      the original PDF
 * @param destPdf     the resulting PDF
 * @param imageFactor The multiplication factor for the image (?  imageFacto =0.5f)
 * @throws IOException
 * @throws DocumentException
 */
public static void compressPdf(File srcPdf, File destPdf, float imageFactor)
        throws IOException, DocumentException {

    PdfReader reader = new PdfReader(srcPdf.getAbsolutePath());
    int n = reader.getXrefSize();
    PdfObject object;
    PRStream stream;
    // Look for image and manipulate image stream
    for (int i = 0; i < n; i++) {
        object = reader.getPdfObject(i);
        if (object == null || !object.isStream())
            continue;
        stream = (PRStream) object;
        if (!PdfName.IMAGE.equals(stream.getAsName(PdfName.SUBTYPE)))
            continue;
        if (!PdfName.DCTDECODE.equals(stream.getAsName(PdfName.FILTER)))
            continue;
        PdfImageObject image = new PdfImageObject(stream);
        BufferedImage bi = image.getBufferedImage();
        if (bi == null)
            continue;
        int width = (int) (bi.getWidth() * imageFactor);
        int height = (int) (bi.getHeight() * imageFactor);
        if (width <= 0 || height <= 0)
            continue;
        BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        AffineTransform at = AffineTransform.getScaleInstance(imageFactor, imageFactor);
        Graphics2D g = img.createGraphics();
        g.drawRenderedImage(bi, at);
        ByteArrayOutputStream imgBytes = new ByteArrayOutputStream();
        ImageIO.write(img, "JPG", imgBytes);
        stream.clear();
        stream.setData(imgBytes.toByteArray(), false, PRStream.NO_COMPRESSION);
        stream.put(PdfName.TYPE, PdfName.XOBJECT);
        stream.put(PdfName.SUBTYPE, PdfName.IMAGE);
        stream.put(PdfName.FILTER, PdfName.DCTDECODE);
        stream.put(PdfName.WIDTH, new PdfNumber(width));
        stream.put(PdfName.HEIGHT, new PdfNumber(height));
        stream.put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
        stream.put(PdfName.COLORSPACE, PdfName.DEVICERGB);
    }
    reader.removeUnusedObjects();
    // Save altered PDF
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destPdf.getAbsolutePath()));
    stamper.setFullCompression();
    stamper.close();
    reader.close();
}

From source file:org.jfree.chart.swt.ChartPdf.java

License:Open Source License

public static void saveChartAsPDF(File file, JFreeChart chart, int width, int height)
        throws DocumentException, FileNotFoundException, IOException {
    if (chart != null) {
        boolean success = false;
        String old = null;//from  w w w.j  a  va2 s  .c om
        File oldFile = null;
        boolean append = file.exists();
        if (append) {
            old = file.getAbsolutePath() + ".old"; //$NON-NLS-1$
            oldFile = new File(old);
            oldFile.delete();
            file.renameTo(oldFile);
        }
        try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file))) {
            // convert chart to PDF with iText:
            Rectangle pagesize = new Rectangle(width, height);
            if (append) {
                PdfReader reader = new PdfReader(old);
                PdfStamper stamper = new PdfStamper(reader, out);
                try {
                    int n = reader.getNumberOfPages() + 1;
                    stamper.insertPage(n, pagesize);
                    PdfContentByte overContent = stamper.getOverContent(n);
                    writeChart(chart, width, height, overContent);
                    ColumnText ct = new ColumnText(overContent);
                    ct.setSimpleColumn(width - 50, 50, width - 12, height, 150, Element.ALIGN_RIGHT);
                    Paragraph paragraph = new Paragraph(String.valueOf(n),
                            new Font(FontFamily.HELVETICA, 9, Font.NORMAL, BaseColor.DARK_GRAY));
                    paragraph.setAlignment(Element.ALIGN_RIGHT);
                    ct.addElement(paragraph);
                    ct.go();
                    success = true;
                } finally {
                    stamper.close();
                    reader.close();
                    oldFile.delete();
                }
            } else {
                Document document = new Document(pagesize, 50, 50, 50, 50);
                document.addCreationDate();
                document.addCreator(Constants.APPLICATION_NAME);
                document.addAuthor(System.getProperty("user.name")); //$NON-NLS-1$
                try {
                    PdfWriter writer = PdfWriter.getInstance(document, out);
                    document.open();
                    writeChart(chart, width, height, writer.getDirectContent());
                    success = true;
                } finally {
                    document.close();
                }
            }
        }
        if (!success) {
            file.delete();
            if (oldFile != null)
                oldFile.renameTo(file);
        }
    }
}

From source file:org.jrimum.bopepo.excludes.PDFs.java

License:Apache License

public static Map<String, Collection<BufferedImage>> getImages(byte[] pdf) throws IOException {
    PdfReader reader = new PdfReader(pdf);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    ImageRenderListener listener = new ImageRenderListener();
    for (int i = 1; i <= reader.getNumberOfPages(); i++) {
        parser.processContent(i, listener);
    }/*from ww  w. jav a 2  s . c  om*/
    reader.close();
    return listener.getImages();
}

From source file:org.karsha.document.PDFBookmark.java

License:Open Source License

public LinkedHashMap splitPDFByBookmarks(byte[] pdf) {
    try {//from www.ja  v a  2 s . c o m
        PdfReader reader = new PdfReader(pdf);
        //List of bookmarks: each bookmark is a map with values for title, page, etc
        List<HashMap<String, Object>> bookmarks = SimpleBookmark.getBookmark(reader);
        for (int i = 0; i < bookmarks.size(); i++) {
            HashMap bm = bookmarks.get(i);
            HashMap nextBM = i == bookmarks.size() - 1 ? null : bookmarks.get(i + 1);
            HashMap previBM;
            if (i == 0) {
                previBM = bookmarks.get(i);
            } else {
                previBM = bookmarks.get(i - 1);
            }

            //String title = ((String) bm.get("Title")).split(" ")[1]; //get only the up to 2nd word
            if ((String) bm.get("Title") != null && (String) bm.get("Page") != null) {

                String title = ((String) bm.get("Title"));
                // log.debug("Titel: " + title);

                //  System.out.println((String) bm.get("Page"));
                String startPage = ((String) bm.get("Page")).split(" ")[0];
                //String startPage = ((String) bm.get("Page"));
                String startPageNextBM = nextBM == null ? "" + (reader.getNumberOfPages() + 1)
                        : ((String) nextBM.get("Page")).split(" ")[0];
                //log.debug("Page: " + startPage);
                // log.debug("------------------");

                parsePdf(reader, title, ((String) previBM.get("Title")), Integer.valueOf(startPage),
                        Integer.valueOf(startPageNextBM));

                // extractBookmarkToPDF(reader, Integer.valueOf(startPage), Integer.valueOf(startPageNextBM), title + ".pdf", outputFolder);
            }
        }
    } catch (IOException e) {
        //log.error(e.getMessage());
    }
    return docsSeperated;
}

From source file:org.la3.pdfunlock.PdfUnlock.java

License:BSD License

private void launch(String[] args) throws Exception {
    parseOptions(args);/* www.j a v a2  s  .c  om*/

    System.err.println("Unlocking " + lockedFile + " to " + unlockedFile);

    PdfReader reader;
    if (password == null) {
        reader = new PdfReader(lockedFile);
    } else {
        reader = new PdfReader(lockedFile, password.getBytes());
    }
    PdfEncryptor.encrypt(reader, new FileOutputStream(unlockedFile), null, null,
            PdfWriter.ALLOW_ASSEMBLY | PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_DEGRADED_PRINTING
                    | PdfWriter.ALLOW_FILL_IN | PdfWriter.ALLOW_MODIFY_ANNOTATIONS
                    | PdfWriter.ALLOW_MODIFY_CONTENTS | PdfWriter.ALLOW_PRINTING
                    | PdfWriter.ALLOW_SCREENREADERS,
            false);

    System.err.println("PDF Unlocked successfully!");
    System.exit(0);
}

From source file:org.mortagne.budget.internal.transaction.io.lcl.pdf.LCLPDFTransactionReader.java

License:Open Source License

public void open() throws IOException {
    close();//from   w w  w  .  ja v  a 2 s. co  m

    List<DefaultTransaction> transactions = new ArrayList<DefaultTransaction>();

    // Parse transactions
    PdfReader reader = new PdfReader(this.transationStream);

    int nb = reader.getNumberOfPages();

    double currentTotal;
    try {
        LCLLocationTextExtractionStrategy strategy = parsePage(reader, 1, transactions, null);
        currentTotal = strategy.getPreviousTotal();

        for (int i = 2; i <= nb; ++i) {
            strategy = parsePage(reader, i, transactions, strategy.getLastType());
        }

    } finally {
        reader.close();
    }

    // Order transactions

    Collections.sort(transactions, new Comparator<DefaultTransaction>() {
        public int compare(DefaultTransaction t1, DefaultTransaction t2) {
            return t1.getRealDate().compareTo(t2.getRealDate());
        }
    });

    // Set total

    Date currentDate = null;
    for (DefaultTransaction transaction : transactions) {
        // total
        currentTotal += transaction.getValue();
        transaction.setTotal(currentTotal);

        // date
        if (!transaction.getRealDate().equals(currentDate)) {
            currentDate = transaction.getDate();
        }
    }

    // Iterator
    this.it = transactions.iterator();
}

From source file:org.opencps.pki.PdfSigner.java

License:Open Source License

/**
 * Compute digest hash/*from   ww  w. j ava  2  s .com*/
 */
protected byte[] computeDigest(float llx, float lly, float urx, float ury) throws SignatureException {
    byte digestHash[] = null;
    int contentEstimated = 8192;
    try {
        PdfReader reader = new PdfReader(getOriginFilePath());
        FileOutputStream os = new FileOutputStream(getTempFilePath());
        PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
        PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
        signatureFieldName = appearance.getNewSigName();
        TSAClient tsaClient = null;
        appearance.setCertificate(getCertificate());
        String tsaUrl = CertificateUtil.getTSAURL(getCertificate());
        if (tsaUrl != null) {
            tsaClient = new TSAClientBouncyCastle(tsaUrl);
        }
        if (tsaClient != null) {
            LtvTimestamp.timestamp(appearance, tsaClient, signatureFieldName);
            contentEstimated += 4096;
        }

        appearance.setSignDate(signDate);
        CertificateInfo certInfo = new CertificateInfo(getCertificate());
        appearance.setLocation(certInfo.getOrganizationUnit());
        appearance.setReason("Document is signed by " + certInfo.getCommonName());
        appearance.setContact(certInfo.getCommonName());
        if (!isVisible) {
            appearance.setVisibleSignature(new Rectangle(0, 0, 0, 0), 1, signatureFieldName);
        } else {
            if (signatureImage != null) {
                appearance.setSignatureGraphic(signatureImage.getImage());
                appearance.setRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC);
            } else {
                appearance.setLayer2Text(certInfo.getCommonName());
            }
            appearance.setVisibleSignature(new Rectangle(llx, lly, urx, ury), 1, signatureFieldName);
        }

        ExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE,
                PdfName.ADBE_PKCS7_DETACHED);
        MakeSignature.signExternalContainer(appearance, external, contentEstimated);

        digestHash = DigestAlgorithms.digest(appearance.getRangeStream(),
                digest.getMessageDigest(getHashAlgorithm().toString()));

        reader.close();
        os.close();
    } catch (Exception e) {
        throw new SignatureException(e.getMessage(), e);
    }
    return digestHash;
}

From source file:org.opencps.pki.PdfSigner.java

License:Open Source License

/**
 * Sign document with external signature container
 *///from  w w  w  .java  2 s.  c o m
protected Boolean signExternal(ExternalSignatureContainer container, String filePath)
        throws SignatureException {
    if (signatureFieldName == null || signatureFieldName.length() == 0) {
        throw new SignatureException("You must set signature field name before sign the document");
    }
    Boolean signed = false;
    try {
        OutputStream os = new FileOutputStream(getSignedFilePath());
        PdfReader reader = new PdfReader(filePath);
        if (!reader.isEncrypted()) {
            MakeSignature.signDeferred(reader, signatureFieldName, os, container);
            reader.close();
            os.close();
            signed = true;
        }
    } catch (Exception e) {
        throw new SignatureException(e.getMessage(), e);
    }
    return signed;
}

From source file:org.opencps.pki.PdfVerifier.java

License:Open Source License

/**
 * (non-Javadoc)//w w w  .j  a  v a  2 s .  c  o  m
 * @see org.opencps.pki.Verifier#getSignatureInfo()
 */
public List<SignatureInfo> getSignatureInfo(InputStream inputStream) {
    List<SignatureInfo> list = new ArrayList<SignatureInfo>();
    try {
        PdfReader reader = new PdfReader(inputStream);
        AcroFields fields = reader.getAcroFields();
        ArrayList<String> names = fields.getSignatureNames();
        for (String name : names) {
            PdfPKCS7 pkcs7 = fields.verifySignature(name);
            list.add(new PdfSignatureInfo(pkcs7));
        }
    } catch (Exception e) {
        throw new RuntimeException(e.getMessage(), e);
    }
    return list;
}