我正在使用PDFbox下载PDF。我想在中间添加一些新页面。
PDPage page = new PDPage();
pdoc.addPage(page);
此代码将新页面插入PDF的末尾。 如何在其他位置插入页面?
答案 0 :(得分:3)
使用PDF-Box创建PDF时的结果
doc.getDocumentCatalog().getPages().getKids();
是一个单一的列表。它包含序列中的所有页面。
PDPageNode
|- Page1
|- Page2
|- Page3
如果PDF不是用PDF-Box创建的,则可能不是这样,而是所有页面的PDPageNode都可以在树形结构中布局
PDPageNode
|-Page1
|-PDPageNode
| |- Page2
| |- Page3
|- Page4
在这种情况下,其他答案中提到的示例代码将不起作用。相反,您可以使用以下
public void addPage(PDDocument doc, final int index, final PDRectangle size) {
// Use the normal method if the page comes after all other pages
if (index >= doc.getNumberOfPages())
doc.addPage(new PDPage(size));
else {
final PDPage page = new PDPage(size);
// Find the existing page that is currently at the index
// the new page will be
final PDPage nextPage = (PDPage) doc.getDocumentCatalog().getAllPages().get(index);
// Get the node the current page is stored in
PDPageNode pageNode = nextPage.getParent();
// Set the appropriate node as the new pages parent
page.setParent(pageNode);
// Insert the new page in the node at the index of the current page is stored
// this shifts all pages in the node forward
pageNode.getKids().add(pageNode.getKids().indexOf(nextPage), page);
// Update the current node and all parent nodes
while (pageNode != null) {
pageNode.updateCount();
pageNode = pageNode.getParent();
}
}
}
答案 1 :(得分:1)
也许这会有所帮助: Apache PDFBox: Move the last page to first Page
您似乎无法直接插入页面,因此您必须重新排列列表。
您也可以尝试
PDDocument doc = PDDocument.load( file );
// Open this pdf to edit.
PDPage page = new PDPage();
PDPageNode rootPages = doc.getDocumentCatalog().getPages();
rootPages.getKids().add(100, page );
//Write some text page.setParent( rootPages );
rootPages.updateCount();
doc.save( file );
doc.close();
但这似乎只适用于pdfbox创建的pdf。
答案 2 :(得分:0)
您可以使用以下方法将页面添加到另一个页面之前:
PDPageTree pages = document.getDocumentCatalog().getPages();
pages.insertBefore(page, pages.get(0)); //0 - index of the page before that you wish to add your new page
或在另一页之后显示:
PDPageTree pages = document.getDocumentCatalog().getPages();
pages.insertAfter(page, pages.get(0)); //0 index of the page after that you wish to add your new page
通过PDFBox v2.0.21测试