从 PDF 导出页面子集

Exporting a subset of pages from a PDF

我想从 PDF 文件中获取部分页面。基本上我给函数一个文件,将它分成几页,然后创建一个新文件,只包含起始页和结束页之间的页面。当用户输入页码时,我需要更正从 0 开始的列表。这是我的代码。

     public static String SplitPdf(File source, Integer startPage, Integer endPage) throws Exception {

        String sourceFileName = source.getAbsolutePath().replace("\", "/");
        File file = new File(sourceFileName);

        PDDocument document = PDDocument.load(file);
        Splitter splitter = new Splitter();
        List<PDDocument> pages = splitter.split(document);

        Integer correctedStartPage = startPage < 1 ? 1 : startPage - 1;
        Integer correctedEndPage = endPage < 1 ? 1 : endPage - 1;

        if (pages.size() <= correctedStartPage) throw new Exception("Start page: " + startPage + " No of pages: " + pages.size());
        if (pages.size() <= correctedEndPage) throw new Exception("End page: " + endPage + " No of pages: " + pages.size());
        if (startPage > endPage)
            throw new Exception("Start page before end page. Start page: " + startPage + " End page: " + endPage);

        PDDocument newDoc = new PDDocument();
        String filePath = file.getParent() + "\" + FilenameUtils.getBaseName(file.getName()) + "-fittingPart" +
                "." + FilenameUtils.getExtension(file.getName());

        for (int i = correctedStartPage; i <= correctedEndPage; i++) {

            PDDocument currentPage = pages.get(i);
            PDPage page = currentPage.getPage(0);
            newDoc.addPage(page);
            currentPage.close();
        }

        newDoc.save(filePath);
        newDoc.close();

        return filePath;
    }

我得到的错误是:

COSStream已关闭,无法读取。也许其封闭的 PDDocument 已关闭?

我检查过文件是否存在

据我所知,我没有过早关闭 PDDocument...有什么想法吗?

PS:我需要使用 apache PDFBox 而不是其他库

您需要关闭所有 PDDocument 对象、源对象和您使用 splitter 生成的对象,而不仅仅是最终对象。您还应该使用拆分器方法 setStartPage()setEndPage() 而不是创建所有这些中间文档然后获取第一个文件,从而使您的生活更轻松。确保仅在所有对象都已保存后才关闭对象(由于可能共享资源)