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

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

Introduction

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

Prototype

public int getXrefSize() 

Source Link

Document

Gets the number of xref objects.

Usage

From source file:be.roots.taconic.pricingguide.util.iTextUtil.java

License:Open Source License

public static byte[] embedFont(byte[] pdf, String fontFileName, String fontName)
        throws IOException, DocumentException {

    try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
        // the font file
        RandomAccessFile raf = new RandomAccessFile(fontFileName, "r");
        byte fontfile[] = new byte[(int) raf.length()];
        raf.readFully(fontfile);//from w w w . j  ava2s. c o m
        raf.close();
        // create a new stream for the font file
        PdfStream stream = new PdfStream(fontfile);
        stream.flateCompress();
        stream.put(PdfName.LENGTH1, new PdfNumber(fontfile.length));
        // create a reader object
        PdfReader reader = new PdfReader(pdf);
        int n = reader.getXrefSize();
        PdfObject object;
        PdfDictionary font;
        PdfStamper stamper = new PdfStamper(reader, baos);
        PdfName fontname = new PdfName(fontName);
        for (int i = 0; i < n; i++) {
            object = reader.getPdfObject(i);
            if (object == null || !object.isDictionary())
                continue;
            font = (PdfDictionary) object;
            if (PdfName.FONTDESCRIPTOR.equals(font.get(PdfName.TYPE1))
                    && fontname.equals(font.get(PdfName.FONTNAME))) {
                PdfIndirectObject objref = stamper.getWriter().addToBody(stream);
                font.put(PdfName.FONTFILE2, objref.getIndirectReference());
            }
        }
        stamper.close();
        reader.close();
        return baos.toByteArray();
    }
}

From source file:org.gmdev.pdftrick.engine.CheckFiles.java

License:Open Source License

/**
 * Check the number of images contained in the file's selection, if == 0 return false.
 * @param filesVett//  w w  w. ja v a  2 s .  c o m
 * @param messages
 * @return TRUE if the there is at least one image in the PDF files selection.
 */
private boolean checkNumberImages(ArrayList<File> filesVett, Properties messages) {
    boolean checkNumImg = false;
    Iterator<File> ite = filesVett.iterator();
    while (ite.hasNext()) {
        File item = ite.next();
        PdfReader reader = null;
        try {
            if (namePwd.containsKey(item.getName())) {
                reader = new PdfReader(item.getPath(), namePwd.get(item.getName()).getBytes());
            } else {
                reader = new PdfReader(item.getPath());
            }
            for (int i = 0; i < reader.getXrefSize(); i++) {
                PdfObject pdfobj = reader.getPdfObject(i);
                if (pdfobj == null || !pdfobj.isStream()) {
                    continue;
                }
                PdfStream stream = (PdfStream) pdfobj;
                PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
                if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
                    checkNumImg = true;
                    break;
                }
            }
            if (checkNumImg) {
                break;
            }
        } catch (IOException e) {
            logger.error("Exception", e);
            PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG);
        }
    }
    if (!checkNumImg) {
        PdfTrickMessages.append("WARNING", messages.getProperty("tmsg_21"));
    }
    return checkNumImg;
}

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

/**
 *  pdf ? pdf/* w  w  w .j  a  v  a2 s.co  m*/
 *
 * @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:pdfextract.ExtractInfo.java

public void extractImagesInfo() {
    try {//from ww  w. j  a va 2  s.  co m
        PdfReader chartReader = new PdfReader("vv.pdf");
        for (int i = 0; i < chartReader.getXrefSize(); i++) {
            PdfObject pdfobj = chartReader.getPdfObject(i);
            if (pdfobj != null && pdfobj.isStream()) {
                PdfStream stream = (PdfStream) pdfobj;
                PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
                //System.out.println("Stream subType: " + pdfsubtype); 
                if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
                    byte[] image = PdfReader.getStreamBytesRaw((PRStream) stream);
                    Image imageObject = Image.getInstance(image);
                    System.out.println("Resolution" + imageObject.getDpiX());
                    System.out.println("Height" + imageObject.getHeight());
                    System.out.println("Width" + imageObject.getWidth());

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

}

From source file:pdfextract.ExtractInfo.java

public void imageNew() throws IOException {
    PdfReader reader;

    File file = new File("vv.pdf");
    reader = new PdfReader(file.getAbsolutePath());
    for (int i = 0; i < reader.getXrefSize(); i++) {
        PdfObject pdfobj = reader.getPdfObject(i);
        if (pdfobj == null || !pdfobj.isStream()) {
            continue;
        }//from www.  j av a2 s  .  co  m
        PdfStream stream = (PdfStream) pdfobj;
        PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
        if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
            byte[] img = PdfReader.getStreamBytesRaw((PRStream) stream);
            FileOutputStream out = new FileOutputStream(
                    new File(file.getParentFile(), String.format("%1$05d", i) + ".jpg"));
            out.write(img);
            out.flush();
            out.close();
        }
    }
}