我可以使用iText从PDF中删除单个页面的功能

时间:2014-04-16 18:16:48

标签: java pdf itext

类似:How can I remove blank page from PDF in iText

我试图制作一个可以使用iText 5.5.x从PDF中删除页面的通用功能。

我写了一个函数,它通常可以正常工作。但我收到了用户的抱怨,这个功能曾经一度完全破坏了PDF。

我的代码有什么问题让它变得多么糟糕?

public static void removePageFromPDF(File thePDFFile, int pageIndexNotZeroBased) throws InterruptedException, Exception {       
        PdfReader reader = new PdfReader(thePDFFile.getAbsolutePath());
        File tmpNewFile = File.createTempFile("pdfRemoveFile", "pdfouttemp.pdf");
        FileOutputStream fos = new FileOutputStream(tmpNewFile);
        com.itextpdf.text.Document d = new com.itextpdf.text.Document();
        PdfCopy copy = new PdfCopy(d, fos);
        d.open();
        for (int i = 1; i <= reader.getNumberOfPages(); ++i) {
            if (i != pageIndexNotZeroBased) {
                copy.addPage(copy.getImportedPage(reader, i));
            }
        }
        copy.freeReader(reader);
        reader.close();
        d.close();
        fos.close();
        FileUtils.copyFile(tmpNewFile, thePDFFile);
        tmpNewFile.delete();
    }

1 个答案:

答案 0 :(得分:3)

请阅读我的书的chapter 6。您会看到有两种方法可以选择页面,一种使用PdfCopy,另一种使用PdfStamper。使用PdfStamper的方法比你拥有的方法简单得多,而且它也更可靠:

PdfReader reader = new PdfReader(src);
reader.selectPages("!2");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();