我对Apache PDFBox有疑问。是否可以将pdf文件拆分为具有不同页面范围和文件名的不同文件?
示例:
答案 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个文档包含一页。
start
和end
变量仅用于文件名。
希望这会有所帮助!