我读过如何使用Apache PDFbox拆分PDF的帖子?以及如何在Java中将两个PDF文件合并为一个?但是,它只演示了如何在每个页面上拆分它或将其拆分为相等的卡盘,addSource()的合并API似乎只有File、String和InputStream,而不是PDDocument。
我想插入一个一页的pdf文件到一个较大的pdf文件的3个地方(比方说100页)指定的页码,例如第3页,第7页和第10页。因此,我需要拆分较大的文档在第3、7、10页,然后插入一页pdf文档,然后合并所有拆分的部分在一个新的pdf文件。
PDDocument doc;
PDDocument onePage;
Splitter splitDoc = new Splitter();
PDFMergerUtility mergedDoc = new PDFMergerUtility();
onePage = PDDocument.load("/path/onepage.pdf");
doc = PDDocument.load("/path/hundredpages.pdf");
splitDoc.setSplitAtPage(1); // inefficient
// is there a better solution for split?
List<PDDocument> splitDocs = splitDoc.split(doc);
for (int i=0; i<splitDocs.size(); i++) {
if (i==2 || i==7 || i==10) { // only to demonstrate
mergeFiles.addSource(onePage); // see comment below
} else {
// doesn't accept PDDocument
// what's the alternative without resorting to InputStream
mergeFiles.addSource(splitDocs.remove(0));
}
}
mergedDoc.setDestinationFileName("/path/mergeddoc.pdf");
mergedDoc.mergeDocuments();
我错在哪里,还是有更好的办法?
这个答案是关于你实际想要达到的目标,即。
我想插入一个一页的pdf文件到一个较大的pdf文件的3个地方(比方说100页)指定的页码,例如第3页,第7页和第10页。
而不是你认为你必须为此做什么,即。
PDDocument document = ...;
PDDocument singlePageDocument = ...;
PDPage singlePage = (PDPage) singlePageDocument.getDocumentCatalog().getAllPages().get(0);
PDPageNode rootPages = document.getDocumentCatalog().getPages();
rootPages.getKids().add(3-1, singlePage);
singlePage.setParent(rootPages);
singlePage = new PDPage(new COSDictionary(singlePage.getCOSDictionary()));
rootPages.getKids().add(7-1, singlePage);
singlePage = new PDPage(new COSDictionary(singlePage.getCOSDictionary()));
rootPages.getKids().add(10-1, singlePage);
rootPages.updateCount();
document.save(...);
但是,请注意,这段代码假设是一个扁平的页面树。在更深的页面树的情况下,必须以不同的方式遍历页面列表:要插入一个页面作为第N个文档页面,您不能简单地将其添加到页面根的位置n-1处,而是必须逐个检查其子页面,并且如果出现内部的PDPageNode
对象,您必须读取其count
值以检查其包含的页面数;如果这个数字意味着要插入的位置包含在内部,则必须递归到内部的pdpageNode
对象中。
我有pdf文件。需要将它们导入系统并按页面分割。单独的页面=单独的文件。 我尝试使用FPDF和FPDI: 有些文件工作良好,但有些文件我得到了错误: 致命错误:未捕获异常“setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException”,消息为“此PDF文档已加密,无法使用Fpdi处理” 据我所知,这个文件是加密的(但我可以毫无问题地打
在java Web应用程序中使用PDFBox。我有一个代表多页绘图或蓝图的PDF文件。还有其他PDF文件表示对父文件的修改。我想将这些页面插入到第1页和第2页之间的父PDF文件中。 我找到了关于合并和添加页面的文章,但不完全是我需要的。 一些指导会很有帮助。 到目前为止我的代码:
问题内容: 我正在使用Apache PDFBox处理Java应用程序中的PDF文件。我想在每个页面上分割一个PDF文档。 是否有可能做到这一点Apache PDFBox?如果是这样,怎么办? 问题答案: 可以使用来实现。 这是一个示例代码,它将在每个页面上拆分文档: 您可以使用来控制每个拆分的PDF的页数。
我需要根据发票编号拆分pdf。例如发票号D0000003011,所有pdf页面应合并为单个pdf,依此类推。我怎样才能做到。..
我正在使用PDFbox下载PDF。我想在中间添加一些新页面。 此代码在PDF结尾处插入新页面。如何在另一个位置插入页面?
在我的项目中,我按书签拆分了一个pdf文件。应该创建一个新的pdf文件,其中包含拆分的页面和一些新的书签。 这将导致以下异常: 线程“main”java.io.ioException中的异常:COSStream已关闭,无法读取。也许它所附的PDDocument已经关闭了? 如果删除行,则新的pdf包含拆分的页面(没有例外),但显然不包含书签。我想我尝试添加书签的方式有问题。 我的代码: Stack