我正在使用PDFbox下载PDF。我想在中间添加一些新页面。
PDPage page = new PDPage();
pdoc.addPage(page);
此代码在PDF结尾处插入新页面。如何在另一个位置插入页面?
您可以在另一个页面之前添加您的页面:
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
也许这会有帮助:Apache PDFBox:将最后一页移到第一页
似乎你不能直接插入页面,所以你必须重新排列列表。
你也可以试试
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。
当使用PDF-Box创建PDF时
doc.getDocumentCatalog().getPages().getKids();
这是一个简单的列表。它按顺序包含所有页面。
PDPageNode
|- Page1
|- Page2
|- Page3
如果PDF不是用PDF框创建的,那么这可能不是真的,而是所有页面的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();
}
}
}
我正在尝试创建一个简单的pdf多页文档中的字段。为此,我有一个模板pdf,在代码中,我根据需要多次克隆这个模板,以便创建文档本身。 问题是在其中插入一些数据。我尝试插入到文档中的数据类型不应该在不同的页面中改变。相反,它在所有页面中保持静态,就像“pages”数字表示文档中包含的页面数。 现在,在我的模板pdf中,我有一些文本字段,例如,“shipper1”和“pages”。我希望能够将我的数据插
我试过以下方法。它似乎使每个页面后面的空白页的方向和大小是源PDF页面的方向和大小,但源PDF页面的方向和大小似乎是前一个空白页的方向和大小:
我想删除PDF中每个页面的底部部分,但不改变页面大小,什么是推荐的方式在PDFBOX中的java中做到这一点?如何删除页脚从PDF中的每个页面? 是否有可能使用PDRectgle删除其中的所有文本/图像? 我所尝试的片段,使用setCropBox矩形似乎失去页面大小,也许cropBox不打算这样做? 在pdfbox cookbook示例中,我能找到的最接近的例子是如何删除整个页面,但这不是我想要的
问题内容: 如何使用PDFBox从PDF文档中读取特定页面(具有页码)? 问题答案: 这应该工作: 如本教程的“ 书签”部分中所示 更新2015年,版本2.0.0快照 似乎已将其删除并放回(?)。 getPage 在2.0.0 javadoc中。要使用它: 该 getAllPages 方法已更名 GETPAGES
问题内容: 我正在尝试使用具有以下代码的iText 7创建PDF文档,并且生成时,我的PDF文档内容在同一页面中重叠(即,在第1页中)。 我看到了 document.newPage(); iText 7中缺少该方法。如何在itext 7中不使用pdfDocumet.copyPages(…)或PDFmerger将页面添加到我的PDF文档中。 问题答案: 在iText 7中,该方法已成为区域中断的特殊