Pdfbox在具有不同页面范围和文件名的多个文件中拆分PDF

时间:2016-10-24 15:20:21

标签: pdf split range pdfbox

我对Apache PDFBox有疑问。是否可以将pdf文件拆分为具有不同页面范围和文件名的不同文件?

示例:

  • 第1页 - 5文件名:part1.pdf
  • 第6页filename:part2.pdf
  • 第7页 - 10文件名:part3.pdf
  • ...

3 个答案:

答案 0 :(得分:1)

这是我的答案。 和我一起工作很好

    private static void splitPdf(PDDocument document, String fileName, int fromPage, int toPage) {
    if (document.getNumberOfPages() > 20) {
        System.out.println(document.getDocumentInformation().getTitle());
        try {
            Splitter splitter = new Splitter();
            splitter.setStartPage(fromPage);
            splitter.setEndPage(toPage);
            splitter.setSplitAtPage(toPage); 
            List<PDDocument> splittedList = splitter.split(document);
            for (PDDocument doc : splittedList) {
                doc.save(PATH_SAVE_FILE + fileName + ".pdf"); 
                doc.close();                    
            }                 
            System.out.println("Save successful file : " + fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

您可能缺少的主要陈述是:

splitter.setEndPage(toPage);

答案 1 :(得分:0)

希望这会有所帮助

int fromPage = 1;
int toPage = 5 ;

File pdfFile = new File("<filePath-to-main-pdf>");
pdfDocument = PDDocument.load(pdfFile);

Splitter splitter = new Splitter();

splitter.setStartPage(fromPage);
splitter.setEndPage(toPage);
splitter.setSplitAtPage(toPage - fromPage +1 );

List<PDDocument> lst =splitter.split(pdfDocument);

PDDocument pdfDocPartial = lst.get(0);
File f = new File("<filePath-WithName>");
pdfDocPartial.save(f);

答案 2 :(得分:0)

这可能为时已晚,但这是供将来的读者使用的解决方案。

使用 PDFBOX 2.0 +

private static void splitPdf(int startIndex, int endIndex) {
    if (document.getNumberOfPages() > 20) {
        System.out.println(document.getDocumentInformation().getTitle());
        try {
            Splitter splitter = new Splitter();
            splitter.setSplitAtPage(endIndex - startIndex + 1);
            List<PDDocument> splittedList = splitter.split(document);
            int start = 1, end = 20;
            for (PDDocument doc : splittedList) {
                doc.save("/home/Downloads/pdfs/" + document.getDocumentInformation().getTitle()
                        + "_" + start + "_" + end + ".pdf");
                start = end + 1;
                end += 20;
                if (end > document.getNumberOfPages()) {
                    end = document.getNumberOfPages();
                }
                doc.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我将此方法称为:

splitPdf(1, 20)

说明

在这里,我将pdf分为20页。随时根据需要更改号码。

以下是.setSplitAtPage()的文档:

https://pdfbox.apache.org/docs/2.0.3/javadocs/org/apache/pdfbox/multipdf/Splitter.html

  

来自文档::这将告诉拆分算法将页面拆分到何处。默认值为1,因此每个页面都将成为一个新文档。如果是两个,则每个文档将包含2页。如果源文档有5页,它将分为3个新文档,2个文档包含2页和1个文档包含一页。

startend变量仅用于文件名。

希望这会有所帮助!