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

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

Introduction

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

Prototype


@Override
public void close() 

Source Link

Document

Signals that the Document was closed and that no other Elements will be added.

Usage

From source file:eu.mrbussy.pdfsplitter.Application.java

License:Open Source License

/**
 * Split the given PDF file into multiple files using pages.
 * /*ww  w.ja  v  a 2s .c o m*/
 * @param filename
 *            - Name of the PDF to split
 * @param useSubFolder
 *            - Use a separate folder to place the files in.
 */
public static void SplitFile(File file, boolean useSubFolder) {
    PdfReader reader = null;
    String format = null;

    if (useSubFolder)
        format = "%1$s%2$s%4$s%2$s_%%03d.%3$s";
    else
        format = "%1$s%2$s_%%03d.%3$s";

    String splitFile = String.format(format, FilenameUtils.getFullPath(file.getAbsolutePath()),
            FilenameUtils.getBaseName(file.getAbsolutePath()),
            FilenameUtils.getExtension(file.getAbsolutePath()), IOUtils.DIR_SEPARATOR);

    try {
        reader = new PdfReader(new FileInputStream(file));

        if (reader.getNumberOfPages() > 0) {
            for (int pageNum = 1; pageNum <= reader.getNumberOfPages(); pageNum++) {
                System.out.println(String.format(splitFile, pageNum));
                String filename = String.format(splitFile, pageNum);
                Document document = new Document(reader.getPageSizeWithRotation(1));
                PdfCopy writer = new PdfCopy(document, new FileOutputStream(filename));
                document.open();
                // Copy the page from the original
                PdfImportedPage page = writer.getImportedPage(reader, pageNum);
                writer.addPage(page);
                document.close();
                writer.close();
            }
        }
    } catch (Exception ex) {
        // TODO Implement exception handling
        ex.printStackTrace(System.err);
    } finally {
        if (reader != null)
            // Always close the stream
            reader.close();
    }
}

From source file:eu.mrbussy.pdfsplitter.Splitter.java

License:Open Source License

/**
 * Split the given PDF file into multiple files using pages.
 * /*from   w  w  w  .j a  v  a 2s.  c  o  m*/
 * @param filename
 *            - Name of the PDF to split
 * @param useSubFolder
 *            - Use a separate folder to place the files in.
 */
public static void Run(File file, boolean useSubFolder) {
    PdfReader reader = null;
    String format = null;

    if (useSubFolder) {
        format = "%1$s%2$s%4$s"; // Directory format
        try {
            FileUtils.forceMkdir(
                    new File(String.format(format, FilenameUtils.getFullPath(file.getAbsolutePath()),
                            FilenameUtils.getBaseName(file.getAbsolutePath()),
                            FilenameUtils.getExtension(file.getAbsolutePath()), IOUtils.DIR_SEPARATOR)));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        format = "%1$s%2$s%4$s%2$s_%%03d.%3$s"; // Directory format + filename
    } else
        format = "%1$s%2$s_%%03d.%3$s";

    String splitFile = String.format(format, FilenameUtils.getFullPath(file.getAbsolutePath()),
            FilenameUtils.getBaseName(file.getAbsolutePath()),
            FilenameUtils.getExtension(file.getAbsolutePath()), IOUtils.DIR_SEPARATOR);

    try {
        reader = new PdfReader(new FileInputStream(file));

        if (reader.getNumberOfPages() > 0) {
            for (int pageNum = 1; pageNum <= reader.getNumberOfPages(); pageNum++) {
                System.out.println(String.format(splitFile, pageNum));
                String filename = String.format(splitFile, pageNum);
                Document document = new Document(reader.getPageSizeWithRotation(1));
                PdfCopy writer = new PdfCopy(document, new FileOutputStream(filename));
                document.open();
                // Copy the page from the original
                PdfImportedPage page = writer.getImportedPage(reader, pageNum);
                writer.addPage(page);
                document.close();
                writer.close();
            }
        }
    } catch (Exception ex) {
        // TODO Implement exception handling
        ex.printStackTrace(System.err);
    } finally {
        if (reader != null)
            // Always close the stream
            reader.close();
    }
}

From source file:mergevoucher.MainJFrame.java

private void deletePages(File file, String str) throws IOException, DocumentException {
    //open the old pdf file and open a blank new one 
    String fullFileName = file.getPath();
    //System.out.println(fullFileName);
    PdfReader reader = new PdfReader(fullFileName);
    Document document = new Document(reader.getPageSizeWithRotation(1));
    String out = fullFileName.replaceFirst(".pdf", "(new).pdf");
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(out));
    document.open();//from www  .  j  a  v  a  2s  .c o m
    int pdfPageNumber = reader.getNumberOfPages(); //get pdf page number
    //change pageNumber string to int array
    Boolean[] preservePages = getPages(pdfPageNumber, str);
    //copy pages except need delete to new pdf file
    for (int i = 1; i <= pdfPageNumber; i++) {
        //filter not preserve pages 
        if (preservePages[i]) { //if preserve,copy;else bypass
            //String content = PdfTextExtractor.getTextFromPage(reader, i); //?i;
            copy.addPage(copy.getImportedPage(reader, i));
        }
    }
    System.out.println("New pdf file is:" + fullFileName.replaceFirst(".pdf", "(new).pdf"));
    //close files 
    reader.close();
    document.close();
    copy.close();
}

From source file:org.ednovo.gooru.domain.service.resource.ResourceServiceImpl.java

License:Open Source License

/**
 * @param mainFileUrl//from   w w  w.  jav a2s. com
 *            : PDF file that has to be splitted
 * @param splittedPageSize
 *            : Page size of each splitted files
 */
private static String splitAndSaveChapter(String mainFileUrl, int pageBeginNum, int pageEndNum, String name) {
    try {
        PdfReader reader = new PdfReader(mainFileUrl);

        int splittedPageSize = pageEndNum - pageBeginNum + 1;
        int pageNum = pageBeginNum;

        String chapterUrl = mainFileUrl.substring(0, mainFileUrl.indexOf(DOT_PDF)) + "-" + name + DOT_PDF;

        Document document = new Document(reader.getPageSizeWithRotation(1));

        FileOutputStream fos = new FileOutputStream(chapterUrl);
        PdfCopy writer = new PdfCopy(document, fos);
        Map<String, String> info = reader.getInfo();

        document.open();
        if ((info != null) && (info.get(_AUTHOR) != null)) {
            document.addAuthor(info.get(_AUTHOR));
        }

        document.addTitle(name);

        for (int offset = 0; offset < splittedPageSize && (pageNum + offset) < pageEndNum; offset++) {
            PdfImportedPage page = writer.getImportedPage(reader, pageNum + offset);
            writer.addPage(page);
        }

        document.close();
        writer.close();
        return chapterUrl;

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

From source file:oscar.dms.IncomingDocUtil.java

License:Open Source License

public static void deletePage(String queueId, String myPdfDir, String myPdfName, String PageNumberToDelete)
        throws Exception {
    long lastModified;
    String filePathName, tempFilePathName;

    tempFilePathName = getIncomingDocumentFilePath(queueId, myPdfDir) + File.separator + "T" + myPdfName;
    filePathName = getIncomingDocumentFilePathName(queueId, myPdfDir, myPdfName);

    File f = new File(filePathName);
    lastModified = f.lastModified();/*from   www .ja  v a2s  . co m*/
    f.setReadOnly();

    String deletePath = getIncomingDocumentDeletedFilePath(queueId, myPdfDir) + File.separator;
    String deletePathFileName = "";
    int index = myPdfName.indexOf(".pdf");

    String myPdfNameF = myPdfName.substring(0, index);
    String myPdfNameExt = myPdfName.substring(index, myPdfName.length());

    PdfReader reader = null;
    Document document = null;
    PdfCopy copy = null;
    PdfCopy deleteCopy = null;

    try {
        reader = new PdfReader(filePathName);
        deletePathFileName = deletePath + myPdfNameF + "d" + PageNumberToDelete + "of"
                + Integer.toString(reader.getNumberOfPages()) + myPdfNameExt;

        document = new Document(reader.getPageSizeWithRotation(1));
        copy = new PdfCopy(document, new FileOutputStream(tempFilePathName));
        deleteCopy = new PdfCopy(document, new FileOutputStream(deletePathFileName));
        document.open();

        for (int pageNumber = 1; pageNumber <= reader.getNumberOfPages(); pageNumber++) {
            if (!(pageNumber == (Integer.parseInt(PageNumberToDelete)))) {
                copy.addPage(copy.getImportedPage(reader, pageNumber));
            } else {
                deleteCopy.addPage(copy.getImportedPage(reader, pageNumber));
            }
        }
    } catch (Exception e) {
        throw (e);
    } finally {
        try {
            if (copy != null) {
                copy.close();
            }
            if (deleteCopy != null) {
                deleteCopy.close();
            }

            if (document != null) {
                document.close();
            }

            if (reader != null) {
                reader.close();
            }

        } catch (Exception e) {
            throw (e);
        }
    }

    boolean success;
    if (!oscar.OscarProperties.getInstance().getBooleanProperty("INCOMINGDOCUMENT_RECYCLEBIN", "true")) {
        File f1 = new File(deletePathFileName);
        success = f1.delete();
        if (!success) {
            throw new Exception("Error in deleting file:" + deletePathFileName);
        }
    }

    success = f.delete();
    if (success) {
        File f1 = new File(tempFilePathName);
        f1.setLastModified(lastModified);
        success = f1.renameTo(new File(filePathName));
        if (!success) {
            throw new Exception("Error in renaming file from:" + tempFilePathName + "to " + filePathName);
        }
    } else {
        throw new Exception("Error in deleting file:" + filePathName);
    }
}

From source file:oscar.dms.IncomingDocUtil.java

License:Open Source License

public static void extractPage(String queueId, String myPdfDir, String myPdfName, String pageNumbersToExtract)
        throws Exception {
    long lastModified;
    String filePathName, tempFilePathName;

    tempFilePathName = getIncomingDocumentFilePath(queueId, myPdfDir) + File.separator + "T" + myPdfName;
    filePathName = getIncomingDocumentFilePathName(queueId, myPdfDir, myPdfName);

    File f = new File(filePathName);
    lastModified = f.lastModified();// w  w w.  ja  v  a 2 s  . c o  m
    f.setReadOnly();

    String extractPath = getIncomingDocumentFilePath(queueId, myPdfDir) + File.separator;
    int index = myPdfName.toLowerCase().indexOf(".pdf");
    String myPdfNameF = myPdfName.substring(0, index);
    String myPdfNameExt = myPdfName.substring(index, myPdfName.length());

    ArrayList<String> extractList = new ArrayList<String>();
    int startPage, endPage;
    boolean cancelExtract = false;

    PdfReader reader = null;
    Document document = null;
    PdfCopy copy = null;
    PdfCopy extractCopy = null;

    try {
        reader = new PdfReader(filePathName);
        extractPath = extractPath + myPdfNameF + "E" + Integer.toString(reader.getNumberOfPages())
                + myPdfNameExt;

        for (int pgIndex = 0; pgIndex <= reader.getNumberOfPages(); pgIndex++) {
            extractList.add(pgIndex, "0");
        }

        String tmpPageNumbersToExtract = pageNumbersToExtract;
        String[] pageList = tmpPageNumbersToExtract.split(",");
        for (int i = 0; i < pageList.length; i++) {
            if (!pageList[i].isEmpty()) {
                String[] rangeList = pageList[i].split("-");
                if (rangeList.length > 2) {
                    cancelExtract = true;
                }
                for (int j = 0; j < rangeList.length; j++) {
                    if (!rangeList[j].matches("^[0-9]+$")) {
                        cancelExtract = true;
                    }
                }
                if (!cancelExtract) {
                    if (rangeList.length == 1) {
                        startPage = Integer.parseInt(rangeList[0], 10);
                        if (startPage > extractList.size() || startPage == 0) {
                            cancelExtract = true;
                        } else {
                            extractList.set(startPage, "1");
                        }
                    } else if (rangeList.length == 2) {
                        startPage = Integer.parseInt(rangeList[0], 10);
                        endPage = Integer.parseInt(rangeList[1], 10);

                        for (int k = startPage; k <= endPage; k++) {

                            if (k > extractList.size() || k == 0) {
                                cancelExtract = true;
                            } else {
                                extractList.set(k, "1");
                            }
                        }
                    }
                }
            }
        }
        if (!cancelExtract) {
            cancelExtract = true;
            for (int pageNumber = 1; pageNumber <= reader.getNumberOfPages(); pageNumber++) {
                if (!(extractList.get(pageNumber).equals("1"))) {
                    cancelExtract = false;
                }
            }
        }
        if (cancelExtract == true) {
            reader.close();
            throw new Exception(myPdfName + " : Invalid Pages to Extract " + pageNumbersToExtract);
        }

        document = new Document(reader.getPageSizeWithRotation(1));
        copy = new PdfCopy(document, new FileOutputStream(tempFilePathName));
        extractCopy = new PdfCopy(document, new FileOutputStream(extractPath));
        document.open();
        for (int pageNumber = 1; pageNumber <= reader.getNumberOfPages(); pageNumber++) {
            if (!(extractList.get(pageNumber).equals("1"))) {
                copy.addPage(copy.getImportedPage(reader, pageNumber));
            } else {
                extractCopy.addPage(copy.getImportedPage(reader, pageNumber));
            }
        }

    } catch (Exception e) {
        throw (e);
    } finally {
        try {
            if (copy != null) {
                copy.close();
            }
            if (extractCopy != null) {
                extractCopy.close();
            }

            if (document != null) {
                document.close();
            }

            if (reader != null) {
                reader.close();
            }

        } catch (Exception e) {
            throw (e);
        }
    }

    boolean success = f.delete();

    if (success) {
        File f1 = new File(tempFilePathName);
        f1.setLastModified(lastModified);
        success = f1.renameTo(new File(filePathName));
        if (!success) {
            throw new Exception("Error in renaming file from:" + tempFilePathName + "to " + filePathName);
        }

        File f2 = new File(extractPath);
        f2.setLastModified(lastModified);
    } else {
        throw new Exception("Error in deleting file:" + filePathName);
    }
}

From source file:pdfmt.pdf2image.java

License:Open Source License

/** 
 * Convert a PDF document to a TIF file 
 */// w  ww .  j a va  2 s .  c om
protected static void convert(String pdf, String tif, String destPdf) throws IOException {

    org.icepdf.core.pobjects.Document pdffile = new org.icepdf.core.pobjects.Document();

    try {
        pdffile.setFile(pdf);

    } catch (PDFException ex) {
        //  System.out.println("Error parsing PDF document " + ex); 
    } catch (PDFSecurityException ex) {
        //  System.out.println("Error encryption not supported " + ex); 
    } catch (FileNotFoundException ex) {
        // System.out.println("Error file not found " + ex); 
    } catch (IOException ex) {
        //  System.out.println("Error handling PDF document " + ex); 
    }

    int numPgs = pdffile.getNumberOfPages();

    try {
        // step 1: create new reader
        PdfReader r = new PdfReader(pdf);
        //  System.out.println("File Lenght:"  + r.getFileLength());
        RandomAccessFileOrArray raf = new RandomAccessFileOrArray(pdf);
        // System.out.println("Raf:" + raf);
        Document document = new Document(r.getPageSizeWithRotation(1));
        //           // step 2: create a writer that listens to the document
        PdfCopy writer = new PdfCopy(document, new FileOutputStream(destPdf));
        //           
        //           // step 3: we open the document
        document.open();
        //           // step 4: we add content
        PdfImportedPage page = null;
        //        
        //loop through each page and if the bs is larger than 20 than we know it is not blank.
        //if it is less than 20 than we don't include that blank page.

        float scale = 2.084f;
        float rotation = 0f;

        BufferedImage image[] = new BufferedImage[numPgs];

        for (int i = 0; i < numPgs; i++) {

            byte bContent[] = r.getPageContent(i + 1, raf);
            // System.out.println(bContent.toString());

            ByteArrayOutputStream bs = new ByteArrayOutputStream();
            //write the content to an output stream
            bs.write(bContent);

            //System.out.println("page content length of page " + i+1 + " = "
            //      + bs.size());

            /* 
             * Generate the image: 
             * Notes: 1275x1650 = 8.5 x 11 @ 150dpi ??? 
             */
            image[i] = (BufferedImage) pdffile.getPageImage(i, GraphicsRenderingHints.SCREEN,
                    Page.BOUNDARY_CROPBOX, rotation, scale);
            Iterator writers = ImageIO.getImageWritersByFormatName("TIFF");
            if (writers == null || !writers.hasNext()) {
                throw new RuntimeException("No writers for available.");

            }
            ImageWriter myWriter = (ImageWriter) writers.next();
            myWriter.setOutput(new FileImageOutputStream(new File(tif)));
            myWriter.prepareWriteSequence(null);
            ImageTypeSpecifier imageType = ImageTypeSpecifier.createFromRenderedImage(image[i]);
            IIOMetadata imageMetadata = myWriter.getDefaultImageMetadata(imageType, null);
            imageMetadata = createImageMetadata(imageMetadata);
            myWriter.writeToSequence(new IIOImage(image[i], null, imageMetadata), null);

            myWriter.dispose();
            image[i] = null;
            myWriter = null;

            FileInputStream in = new FileInputStream(tif);
            FileChannel channel = in.getChannel();
            ByteBuffer buffer = ByteBuffer.allocate((int) channel.size());
            channel.read(buffer);
            Image imageBlank;

            imageBlank = load(buffer.array());

            BufferedImage bufferedImage = imageToBufferedImage(imageBlank);
            boolean isBlank;
            isBlank = isBlank(bufferedImage);
            // System.out.println("isblank "+ isBlank);

            if (isBlank == false) {

                page = writer.getImportedPage(r, i + 1);
                writer.addPage(page);

            }
            bs.close();

            System.gc();
        }

        document.close();
        writer.close();
        raf.close();
        r.close();

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

From source file:pdfmt.RemoveBlankPdf.java

License:Open Source License

/**
 * Convert a PDF document to a TIF file.
 * /*from  ww w.  ja  v a2 s .  c om*/
 * @param pdf
 *            the pdf
 * @param tif
 *            the tif
 * @param destPdf
 *            the dest pdf
 * @throws IOException
 *             Signals that an I/O exception has occurred.
 */
protected void convert(String pdf, String tif, String destPdf) throws IOException {

    startTime = System.currentTimeMillis();
    logger.info("In the boolean convert(String pdf, String tif, String destPdf)");
    org.icepdf.core.pobjects.Document pdffile = new org.icepdf.core.pobjects.Document();

    try {

        pdffile.setFile(pdf);

    } catch (PDFException ex) {
        // System.out.println("Error parsing PDF document " + ex);
    } catch (PDFSecurityException ex) {
        // System.out.println("Error encryption not supported " + ex);
    } catch (FileNotFoundException ex) {
        // System.out.println("Error file not found " + ex);
    } catch (IOException ex) {
        // System.out.println("Error handling PDF document " + ex);
    }

    int numPgs = pdffile.getNumberOfPages();
    msg.setText(".....::::: Converting pages please wait :::::.....");
    addComponent(contentPane, msg, 10, 110, 200, 18);

    try {
        // step 1: create new reader
        PdfReader r = new PdfReader(pdf);
        // System.out.println("File Lenght:" + r.getFileLength());
        RandomAccessFileOrArray raf = new RandomAccessFileOrArray(pdf);
        // System.out.println("Raf:" + raf);
        Document document = new Document(r.getPageSizeWithRotation(1));
        // // step 2: create a writer that listens to the document
        PdfCopy writer = new PdfCopy(document, new FileOutputStream(destPdf));
        //           
        // // step 3: we open the document
        document.open();
        // // step 4: we add content
        PdfImportedPage page = null;

        float scale = 2.084f;
        float rotation = 0f;

        BufferedImage image[] = new BufferedImage[numPgs];

        // -------- CHANGE
        jprogress.setMaximum(numPgs);
        // -------- CHANGE

        for (int i = 0; i < numPgs; i++) {

            // -------- CHANGE
            jprogress.setValue(i + 1);
            // -------- CHANGE

            byte bContent[] = r.getPageContent(i + 1, raf);
            // System.out.println(bContent.toString());

            ByteArrayOutputStream bs = new ByteArrayOutputStream();
            // write the content to an output stream
            bs.write(bContent);

            // System.out.println("page content length of page " + i+1 +
            // " = "
            // + bs.size());

            /*
             * Generate the image: Notes: 1275x1650 = 8.5 x 11 @ 150dpi ???
             */
            image[i] = (BufferedImage) pdffile.getPageImage(i, GraphicsRenderingHints.SCREEN,
                    Page.BOUNDARY_CROPBOX, rotation, scale);
            Iterator writers = ImageIO.getImageWritersByFormatName("TIFF");
            if (writers == null || !writers.hasNext()) {
                throw new RuntimeException("No writers for available.");

            }
            ImageWriter myWriter = (ImageWriter) writers.next();
            myWriter.setOutput(new FileImageOutputStream(new File(tif)));
            myWriter.prepareWriteSequence(null);
            ImageTypeSpecifier imageType = ImageTypeSpecifier.createFromRenderedImage(image[i]);
            IIOMetadata imageMetadata = myWriter.getDefaultImageMetadata(imageType, null);
            imageMetadata = createImageMetadata(imageMetadata);
            myWriter.writeToSequence(new IIOImage(image[i], null, imageMetadata), null);

            myWriter.dispose();
            image[i] = null;
            myWriter = null;

            FileInputStream in = new FileInputStream(tif);
            FileChannel channel = in.getChannel();
            ByteBuffer buffer = ByteBuffer.allocate((int) channel.size());
            channel.read(buffer);
            Image imageBlank;

            imageBlank = load(buffer.array());

            BufferedImage bufferedImage = imageToBufferedImage(imageBlank);
            boolean isBlank;
            isBlank = isBlank(bufferedImage);
            // System.out.println("isblank "+ isBlank);
            boolean hasContent = false;
            File file = new File(TEMP_DIR + TEMP_EXTR_TEXT);

            try {
                FileWriter fileWriter = new FileWriter(file);

                PageText pageText = pdffile.getPageText(i);
                if (pageText != null && pageText.getPageLines() != null) {
                    fileWriter.write(pageText.toString());
                }

                // close the writer
                fileWriter.close();
                System.out.println(file.length());
                if (file.length() > 20) {
                    hasContent = true;

                }
                file.delete();

                System.out.println(TEMP_TIFF + " deleted");
            } catch (IOException e) {

                e.printStackTrace();
            }

            if (isBlank == false && hasContent == true) {

                page = writer.getImportedPage(r, i + 1);
                writer.addPage(page);

            }
            bs.close();
            in.close();
            File ft = new File(TEMP_DIR + TEMP_TIFF);
            boolean check = ft.delete();
            if (check == true) {
                System.out.println("Deleted");
            } else {
                System.out.println("Stuck");
            }
            System.gc();

        }

        document.close();
        writer.close();
        raf.close();
        r.close();
        stopTime = System.currentTimeMillis();
        logger.info("Exit boolean convert(String pdf, String tif, String destPdf) with time:    "
                + ((stopTime - startTime) / 1000));

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

From source file:spntoolsdata.pdf.util.RemoveBlankPageFromPDF.java

public static void removeBlankPdfPages(String source, String destination)
        throws IOException, DocumentException {
    PdfReader r = null;/* ww w.j  a v  a2 s . c  om*/
    RandomAccessSourceFactory rasf = null;
    RandomAccessFileOrArray raf = null;
    Document document = null;
    PdfCopy writer = null;

    try {
        r = new PdfReader(source);
        // deprecated
        //    RandomAccessFileOrArray raf
        //           = new RandomAccessFileOrArray(pdfSourceFile);
        // itext 5.4.1
        rasf = new RandomAccessSourceFactory();
        raf = new RandomAccessFileOrArray(rasf.createBestSource(source));
        document = new Document(r.getPageSizeWithRotation(1));
        writer = new PdfCopy(document, new FileOutputStream(destination));
        document.open();
        PdfImportedPage page = null;

        for (int i = 1; i <= r.getNumberOfPages(); i++) {
            // first check, examine the resource dictionary for /Font or
            // /XObject keys.  If either are present -> not blank.
            PdfDictionary pageDict = r.getPageN(i);
            PdfDictionary resDict = (PdfDictionary) pageDict.get(PdfName.RESOURCES);
            boolean noFontsOrImages = true;
            if (resDict != null) {
                noFontsOrImages = resDict.get(PdfName.FONT) == null && resDict.get(PdfName.XOBJECT) == null;
            }

            if (!noFontsOrImages) {
                byte bContent[] = r.getPageContent(i, raf);
                ByteArrayOutputStream bs = new ByteArrayOutputStream();
                bs.write(bContent);

                if (bs.size() > BLANK_THRESHOLD) {
                    page = writer.getImportedPage(r, i);
                    writer.addPage(page);
                }
            }
        }
    } finally {
        if (document != null)
            document.close();
        if (writer != null)
            writer.close();
        if (raf != null)
            raf.close();
        if (r != null)
            r.close();
    }
}