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

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

Introduction

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

Prototype

public void close() 

Source Link

Document

Closes the reader, and any underlying stream or data source used to create the reader

Usage

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

License:Open Source License

/**
 * method that check is single pdf has a User password protected, set userProtection = true if BadPasswordException;
 * @param File//w w  w .j a  va 2s  . c o  m
 */
private void hasProtection(File file) {
    PdfReader reader = null;
    try {
        reader = new PdfReader(file.getPath());
        if (reader != null) {
            if (reader.isEncrypted()) {
                ownerProtection = true;
            }
            reader.close();
        }
    } catch (BadPasswordException e) {
        userProtection = true;
    } catch (IOException e) {
        logger.error("Exception", e);
        PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG);
    }
}

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

License:Open Source License

/**
 * //  ww  w .  j a  va 2s.c o m
 * @param timeDirResult
 * @param resultFilePath
 * @param imageSelected
 * @param inlineImgSelected
 * @return TRUE if the extraction went good
 */
private boolean extractImgSel(String timeDirResult, String resultFilePath,
        HashMap<String, RenderedImageAttributes> imageSelected,
        HashMap<String, RenderedImageAttributes> inlineImgSelected) {

    final Properties messages = factory.getMessages();
    String result = timeDirResult + "/" + "Img_%s.%s";
    PdfReader reader = null;
    boolean retExtract = true;

    try {
        reader = new PdfReader(resultFilePath);
        Set<String> keys = imageSelected.keySet();
        Iterator<String> i = keys.iterator();
        int z = 1;
        while (i.hasNext()) {
            BufferedImage buff = null;
            String key = i.next();
            RenderedImageAttributes imgAttr = imageSelected.get(key);
            String flip = imgAttr.getFlip();
            String rotate = imgAttr.getRotate();
            int ref = imgAttr.getReference();

            PdfObject o = reader.getPdfObject(ref);
            PdfStream stream = (PdfStream) o;
            PdfImageObject io = null;
            try {
                io = new PdfImageObject((PRStream) stream);
            } catch (UnsupportedPdfException updfe) {
                try {
                    buff = CustomExtraImgReader.readIndexedPNG(ref, resultFilePath);
                    buff = PdfTrickUtils.adjustImage(buff, flip, rotate);
                    String type = "png";
                    String filename = String.format(result, z, type);
                    File outputfile = new File(filename);
                    ImageIO.write(buff, type, outputfile);
                } catch (Exception e) {
                    logger.error("Exception", e);
                    PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG);
                }
            }

            if (io != null) {
                String type = io.getFileType();
                String filename = String.format(result, z, type);
                BufferedImage buffPic = null;
                try {
                    if (type.equalsIgnoreCase("JBIG2")) {
                        buffPic = CustomExtraImgReader.readJBIG2(io);
                    } else {
                        buffPic = io.getBufferedImage();
                    }
                } catch (IIOException e) {
                    byte[] imageByteArray = io.getImageAsBytes();
                    try {
                        buffPic = CustomExtraImgReader.readCMYK_JPG(imageByteArray);
                    } catch (Exception ex) {
                        logger.error("Exception", e);
                        PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG);
                    }
                }

                // check if image contains a mask image
                BufferedImage buffMask = null;
                PdfDictionary imageDictionary = io.getDictionary();
                PRStream maskStream = (PRStream) imageDictionary.getAsStream(PdfName.SMASK);

                if (maskStream != null) {
                    // i have an smask object i check that is not a jpeg format, because this may cause some problem on offscreen rendering
                    // usually all imges with mask are png ... and there aren't problem, if image is jpg i discard the mask :)
                    if (!type.equalsIgnoreCase("jpg")) {
                        PdfImageObject maskImage = new PdfImageObject(maskStream);
                        buffMask = maskImage.getBufferedImage();

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

                if (buff != null) {
                    buff = PdfTrickUtils.adjustImage(buff, flip, rotate);

                    //particular cases of encoding
                    String encode = "";
                    if (type.equalsIgnoreCase("jp2")) {
                        encode = "jpeg 2000";
                    } else if (type.equalsIgnoreCase("jbig2")) {
                        encode = "jpeg";
                        filename = String.format(result, z, "jpg");
                    } else {
                        encode = type;
                    }

                    File outputfile = new File(filename);
                    ImageIO.write(buff, encode, outputfile);
                }
            }
            z++;
        }
        reader.close();
        if (inlineImgSelected.size() > 0) {
            extractInlineImgSel(timeDirResult, inlineImgSelected, z);
        }
        PdfTrickMessages.append("INFO", messages.getProperty("tmsg_19"));
    } catch (Exception e) {
        logger.error("Exception", e);
        PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG);
        retExtract = false;
    }
    return retExtract;
}

From source file:org.gmdev.pdftrick.render.PdfRenderLeft.java

License:Open Source License

/**
 * Render pdf resultfile thumbs in a left_panel, using threads pool
 *///ww w . j  a v a2 s. co m
public void pdfRender() {
    String imgPath = PdfTrickUtils.createImgFolder();
    int totPages = 0;

    // get the page number of the new generated pdf
    try {
        PdfReader reader = new PdfReader(factory.getResultFile());
        totPages = reader.getNumberOfPages();
        factory.setNumPages(totPages);
        reader.close();
    } catch (Exception e) {
        logger.error("Exception", e);
        PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG);
    }

    // system of thread that call native function and renderizing pdf cover in png images 
    boolean runPool = true;
    int division = totPages / 3;
    if (totPages < 3) {
        runPool = false;
        division = totPages;
    }

    DivisionThumb divisionThumbs = new DivisionThumb(division, imgPath);
    factory.gettContainer().setDivisionThumbs(divisionThumbs);

    Thread divisionThumbsThread = new Thread(divisionThumbs, "divisionThumbsThread");
    factory.gettContainer().setDivisionThumbsThread(divisionThumbsThread);
    divisionThumbsThread.start();

    if (runPool) {
        ExecPool execPool = new ExecPool(totPages, division, imgPath);
        factory.gettContainer().setExecPool(execPool);

        Thread execPoolThread = new Thread(execPool, "execPoolThread");
        factory.gettContainer().setExecPoolThread(execPoolThread);
        execPoolThread.start();
    }

    // thread that search and showing thumbnails 
    ShowThumbs showThumbs = new ShowThumbs();
    factory.gettContainer().setShowThumbs(showThumbs);

    Thread showThumbsThread = new Thread(showThumbs, "showThumbsThread");
    factory.gettContainer().setShowThumbsThread(showThumbsThread);
    showThumbsThread.start();
}

From source file:org.gmdev.pdftrick.thread.ImgThumb.java

License:Open Source License

/**
 * Render img thumbs contained in a page
 *//*from  w  w  w. j ava 2s .co  m*/
public void execute() {
    final Properties messages = factory.getMessages();
    final JPanel centerPanel = factory.getUserInterface().getCenter().getCenterPanel();

    SwingUtilities.invokeLater(new ManagePanelWait("thumb", "thumb_show"));
    try {
        PdfReader reader = null;
        ImageListenerShowThumb listener = null;

        reader = new PdfReader(factory.getResultFile());
        PdfReaderContentParser parser = new PdfReaderContentParser(reader);
        listener = new ImageListenerShowThumb(numberPage);

        parser.processContent(numberPage, listener);
        reader.close();

        String infoUnsupported = "";
        String infoAvailable = "";

        if (listener.getUnsupportedImage() > 0) {
            infoUnsupported = MessageFormat.format(messages.getProperty("dmsg_02"), numberPage);
        }
        if (listener.getNumImg() == 0) {
            final String noImgTitle = messages.getProperty("jmsg_08");
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JLabel noImageLabel = new JLabel(noImgTitle);
                    noImageLabel.setHorizontalAlignment(JLabel.CENTER);
                    noImageLabel.setVerticalAlignment(JLabel.CENTER);
                    noImageLabel.setFont(new Font("Verdana", 1, 20));
                    noImageLabel.setName("NoPicsImg");
                    centerPanel.setLayout(new GridBagLayout());
                    centerPanel.add(noImageLabel);
                    centerPanel.revalidate();
                    centerPanel.repaint();
                }
            });
            infoAvailable = MessageFormat.format(messages.getProperty("dmsg_03"), numberPage);
        } else {
            String t = listener.getNumImg() > 1 ? messages.getProperty("tmsg_15")
                    : messages.getProperty("tmsg_16");
            infoAvailable = listener.getNumImg() + " " + t;
        }
        PdfTrickMessages.append("INFO", infoUnsupported + infoAvailable);
    } catch (Exception e) {
        logger.error("Exception", e);
        PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG);
    }
    SwingUtilities.invokeLater(new ManagePanelWait("thumb", "thumb_hide"));
    finished = true;
}

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/*ww w  .j  a v a  2 s  . c o  m*/
 * @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

/**
 * ??/*ww w .ja va 2 s  .  c  o  m*/
 *
 * @param srcPdf         ?
 * @param destPdf        
 * @param waterMarkText  ?
 * @param waterMarkImage ?
 */
public static void addWaterMarkFile(File srcPdf, File destPdf, String waterMarkText, File waterMarkImage)
        throws IOException, DocumentException {

    if (waterMarkText == null && waterMarkImage == null)
        throw new FileNotFoundException(waterMarkText + " " + waterMarkImage + " all null.");

    if (srcPdf == null || !srcPdf.exists() || !srcPdf.isFile())
        throw new FileNotFoundException("pdf file :  '" + srcPdf + "' does not exsit.");

    if (!FilenameUtils.getExtension(srcPdf.getAbsolutePath()).toLowerCase().equals("pdf"))
        return;

    if (waterMarkImage != null) {
        if (!waterMarkImage.exists() || !waterMarkImage.isFile())
            throw new FileNotFoundException("img file :  '" + srcPdf + "' does not exsit.");

        if (!FilenameUtils.getExtension(waterMarkImage.getAbsolutePath()).toLowerCase().equals("png"))
            throw new FileNotFoundException("image file '" + srcPdf
                    + "'  not png.(???? pdf )");
    }

    PdfReader reader = getPdfReader(srcPdf);

    int n = reader.getNumberOfPages();
    PdfStamper stamper = getPdfStamper(srcPdf, destPdf);

    //
    //        HashMap<String, String> moreInfo = new HashMap<String, String>();
    //        moreInfo.put("Author", "H819 create");
    //        moreInfo.put("Producer", "H819 Producer");
    //        Key = CreationDate, Value = D:20070425182920
    //        Key = Producer, Value = TH-OCR 2000 (C++/Win32)
    //        Key = Author, Value = TH-OCR 2000
    //        Key = Creator, Value = TH-OCR PDF Writer

    // stamp.setMoreInfo(moreInfo);

    // text
    Phrase text = null;
    if (waterMarkText != null) {
        //
        Font bfont = getPdfFont();
        bfont.setSize(35);
        bfont.setColor(new BaseColor(192, 192, 192));
        text = new Phrase(waterMarkText, bfont);
    }
    // image watermark
    Image img = null;
    float w = 0;
    float h = 0;
    if (waterMarkImage != null) {
        img = Image.getInstance(waterMarkImage.getAbsolutePath());
        w = img.getScaledWidth();
        h = img.getScaledHeight();
        //  img.
        img.setRotationDegrees(45);

    }

    // transparency
    PdfGState gs1 = new PdfGState();
    gs1.setFillOpacity(0.5f);
    // properties
    PdfContentByte over;
    Rectangle pageSize;
    float x, y;
    // loop over every page
    for (int i = 1; i <= n; i++) {
        pageSize = reader.getPageSizeWithRotation(i);
        x = (pageSize.getLeft() + pageSize.getRight()) / 2;
        y = (pageSize.getTop() + pageSize.getBottom()) / 2;
        //  pdf pdf ???
        over = stamper.getOverContent(i);
        // ?
        // over = stamp.getUnderContent(i);
        // ?? over.beginText(); over.endText(); ?
        // ,?,:????
        over.saveState(); //??
        over.setGState(gs1);

        if (waterMarkText != null && waterMarkImage != null) { // 
            if (i % 2 == 1) {
                ColumnText.showTextAligned(over, Element.ALIGN_CENTER, text, x, y, 45);
            } else
                over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2));
        } else if (waterMarkText != null) { //?

            ColumnText.showTextAligned(over, Element.ALIGN_CENTER, text, x, y, 45);
            //?? ,?, :?????
            // ...

        } else { //?
            over.addImage(img, w, 0, 0, h, x - (w / 2), y - (h / 2));
        }

        over.restoreState();//???
    }

    stamper.close();
    reader.close();

}

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

/**
 * ? pdf ??/*from w  w w  . ja va  2 s.  c om*/
 *
 * @param srcPdfFile  the original PDF
 * @param descPdfFile the resulting PDF
 * @throws java.io.IOException
 * @throws DocumentException
 */
public static void compressPdf(File srcPdfFile, File descPdfFile) throws IOException, DocumentException {

    if (srcPdfFile == null || !srcPdfFile.exists())
        throw new IOException("src pdf file '" + srcPdfFile + "' does not exsit.");

    PdfReader reader = getPdfReader(srcPdfFile);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(descPdfFile.getAbsoluteFile()),
            PdfWriter.VERSION_1_7);

    stamper.getWriter().setCompressionLevel(9);
    int total = reader.getNumberOfPages() + 1;
    for (int i = 1; i < total; i++) {
        reader.setPageContent(i, reader.getPageContent(i));
    }
    stamper.setFullCompression();
    stamper.close();
    reader.close();
}

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

/**
 *  pdf ? pdf/*from  w w w. ja 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:org.h819.commons.file.MyPDFUtils.java

/**
 * ?pdf//from www . j ava  2s .  co m
 *
 * @param srcPdfFile  the original PDF
 * @param descPdfFile the resulting PDF
 * @throws java.io.IOException
 * @throws DocumentException
 */
public static void decompressPdf(File srcPdfFile, File descPdfFile) throws IOException, DocumentException {

    if (srcPdfFile == null || !srcPdfFile.exists())
        throw new IOException("src pdf file '" + srcPdfFile + "' does not exsit.");

    PdfReader reader = getPdfReader(srcPdfFile);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(descPdfFile.getAbsoluteFile()));
    stamper.getWriter().setCompressionLevel(PdfStream.NO_COMPRESSION);
    int total = reader.getNumberOfPages() + 1;
    for (int i = 1; i < total; i++) {
        reader.setPageContent(i, reader.getPageContent(i));
    }
    stamper.close();
    reader.close();

}

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

/**
 * ??? pdf //www .  j  av a 2  s.  c  o m
 * windows 
 * "PDF Password Remover v4.0" ??
 *
 * @param srcPdf         pdf 
 * @param descPdf       ? pdf 
 * @param ownerPassword ??????
 * @param badDirectory  ?? pdf 
 * @throws java.io.IOException
 */
public static void decryptFile(File srcPdf, File descPdf, String ownerPassword, File badDirectory)
        throws IOException {

    String extension = FilenameUtils.getExtension(srcPdf.getAbsolutePath());

    if (!extension.equalsIgnoreCase("pdf"))
        return;

    // ??? 0 ?
    if (FileUtils.sizeOf(srcPdf) == 0) {
        logger.info("{} size =0 ,copy to {}", srcPdf.getAbsoluteFile(), badDirectory.getAbsoluteFile());
        FileUtils.copyDirectory(srcPdf, badDirectory, true);
        return;
    }

    try {

        PdfReader reader;
        if (ownerPassword != null)
            reader = getPdfReader(srcPdf, ownerPassword);
        else
            reader = getPdfReader(srcPdf);

        if (!reader.isEncrypted()) {// ?
            FileUtils.copyFile(srcPdf, descPdf);
            logger.info("not encrypted,copy {} to {} ", srcPdf.getAbsolutePath(), descPdf.getAbsoluteFile());
            return;
        }

        List<ExecParameter> list = new ArrayList(2);
        list.add(new ExecParameter("-i", srcPdf.getAbsolutePath())); // ? key  value
        list.add(new ExecParameter("-o", descPdf.getAbsolutePath()));
        //            list.add(new ExecParameter("-u", ""));
        //            list.add(new ExecParameter("-w", ""));
        MyExecUtils.exec(Paths.get(getPdfPdfdecryptExec()), list, 1);
        logger.info("decrypted {} to {}", srcPdf.getAbsolutePath(), descPdf.getAbsolutePath());
        // ??
        reader.close();

    } catch (BadPasswordException e) {
        // ???
        logger.info("{} has user password ,copy to {}", srcPdf.getAbsoluteFile(),
                badDirectory.getAbsoluteFile());
        FileUtils.copyFileToDirectory(srcPdf, badDirectory, true);
        e.printStackTrace();
        return;
    } catch (IOException e) {
        e.printStackTrace();
    }

}