首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pdfbox将PDF拆分成具有不同页面范围和文件名的多个文件

Pdfbox将PDF拆分成具有不同页面范围和文件名的多个文件
EN

Stack Overflow用户
提问于 2016-10-24 15:20:21
回答 4查看 7.3K关注 0票数 1

我有个问题要问Apache PDFBox。是否可以用不同的页面范围和文件名将pdf文件拆分成不同的文件?

示例:

  • 第1-5页文件名: page 1.pdf
  • 第6页文件名:第2.pdf部分
  • 第7-10页文件名:第3.pdf部分
  • ..。
EN

回答 4

Stack Overflow用户

发布于 2019-08-26 09:24:54

这可能太晚了,但这是给未来读者的一个解决方案。

使用PDFBOX 2.0+

代码语言:javascript
运行
复制
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();
        }
    }
}

我把这种方法称为:

代码语言:javascript
运行
复制
splitPdf(1, 20)

解释

这里,我将pdfs分成20页。随时可以根据你的需要改变号码。

以下是.setSplitAtPage()的文档

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

从docs:--这将告诉拆分算法在何处拆分页面。缺省值为1,因此每个页面都将成为一个新文档。如果是两页,那么每一份文件将包含2页。如果源文档有5页,它将分成3个新文档、2个包含2页的文档和1个包含1页的文档。

startend变量仅用于文件名。

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2018-07-19 15:52:46

希望这能帮上忙

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2020-03-19 17:12:17

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

代码语言:javascript
运行
复制
    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();
        }
    }
}

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

代码语言:javascript
运行
复制
splitter.setEndPage(toPage);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40221977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档