- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在运行这段代码时遇到了一些麻烦。目标是将 pdf 与 PDDocument 对象中加载的 pdf 合并。我不想使用 PdfBox 的 mergeUtility 因为它意味着关闭 PDDocument 对象。我有很多数据要处理,我使用循环来处理它。加载和关闭 PDDocument 将花费太多时间和资源(也许我错了,但感觉就是这样)。
这是我的方法:
for (String path:pathList) {
/* ... */
if(path.endsWith("pdf")){
File pdfToMerge = new File(path);
try(PDDocument pdfToMergeDocument = PDDocument.load(pdfToMerge)){
for (int pageIndex = 0; pageIndex < pdfToMergeDocument.getNumberOfPages(); pageIndex++){
PDPage page = pdfToMergeDocument.getPage(pageIndex);
doc.addPage(page);
}
}catch (IOException e){
System.out.println("Pdf : " + path + ANSI_RED + " [FAILED]" + ANSI_RESET);
continue;
}finally {
System.out.println("Pdf : " + path + ANSI_GREEN +" [OK]" + ANSI_RESET);
}
}
}
doc.save("src/Kairos/OutPut/"+pdfName[pdfName.length - 1]+".pdf");
doc.close();
错误发生在我尝试保存文档时,第 65 行。
我收到此错误消息:
Exception in thread "main" java.io.IOException: COSStream has been closed and cannot be read. Perhaps its enclosing PDDocument has been closed?
at org.apache.pdfbox.cos.COSStream.checkClosed(COSStream.java:83)
at org.apache.pdfbox.cos.COSStream.createRawInputStream(COSStream.java:133)
at org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1214)
at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:402)
at org.apache.pdfbox.cos.COSObject.accept(COSObject.java:158)
at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:521)
at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:459)
at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:443)
at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1108)
at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:449)
at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1381)
at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1268)
at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1334)
at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1305)
at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1293)
at Kairos.Main.main(Main.java:65)
最佳答案
考虑一下:您在 pathList
中有一个 String
的列表,然后遍历它。
在第一个循环结束时,您保存 doc
并关闭它。
然后你再次循环并尝试保存doc
。您在上一次迭代中关闭了它。
如果您的目标是将pathList
中的所有pdf 的内容放入doc
指向的pdf 中,则必须将其关闭outside 循环,在遍历所有 pathList
之后。
编辑:
正如 Tilman Hausherr 所指出的,还有另一个问题。当您调用 addPage
时,您并不是在复制原始页面,而是或多或少地链接到它。由于您使用的是 try-with-resources 构造,原始文件在 try-catch
构造结束时关闭,这意味着,一旦退出构造,您将丢失任何引用到原来的页面。所以你必须在 before 退出 try-catch
之前保存,或者你使用 importPage
来代替,这会制作一个副本(然后调用 addPage
无论如何)。所以
PDPage page = pdfToMergeDocument.getPage(pageIndex);
doc.importPage(page);
编辑 2:
当然,这个答案现在是错误的,因为 OP 在原始问题中发布了错误的代码 :) 我会把它留在这里,以备不时之需。
关于java - 使用 PdfBox 添加页面后尝试保存 PDF 时出现 "IOException: COSStream has been closed and cannot be read",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57267528/
我在使用 PDFBox 以 Java 编写的一些代码时遇到问题。我正在尝试根据从 Excel 电子表格读取的值使用特定表单填充 PDF。下面是我的类文件。 import java.io.FileInp
本质上,我试图用 Java 创建一个小工具,从某种用户输入中获取文本,考虑一个普通的文本框,并用它创建一个 PDF 文件。 到目前为止,我已经成功地利用我对 PDFBox 的基本知识快速地抓取了一些东
我尝试使用 PDFBox 库编辑 PDF 文件中的图像。我如何有仅适用于 jpeg 图像的示例。 ImageIO.read() 无法解码带有“png”后缀的图像。这是代码示例。所以我的问题是:如何对
我在运行这段代码时遇到了一些麻烦。目标是将 pdf 与 PDDocument 对象中加载的 pdf 合并。我不想使用 PdfBox 的 mergeUtility 因为它意味着关闭 PDDocument
我是一名优秀的程序员,十分优秀!