- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了检查上传的 PDF 文件是否符合基本 PDF/A 一致性,我需要将它们作为 PdfADocuments 读取。但从版本 7.1.6 开始,这不再有效,而是抛出 PdfException(PdfException.PdfReaderHasBeenAlreadyUtilized)
class Controller
...
// get uploaded data into PdfDocument, which is passed
// on to different services.
InputStream filecontent = fileupload.getInputStream();
int read = 0;
byte[] bytes = new byte[1024];
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
while ((read = filecontent.read(bytes,0,bytes.length)) != -1) {
filesize += read;
buffer.write(bytes, 0, read);
}
ByteArrayInputStream input = new ByteArrayInputStream(buffer.toByteArray());
PdfReader reader = new PdfReader(input);
PdfWriter writer = new PdfWriter(new ByteArrayOutputStream());
PdfDocument pdf = new PdfDocument(reader, writer);
AnalyzerService analyzer = new AnalyzerService();
if(analyzer.analyze(pdf)) {
otherService.doSomethingWith(pdf);
}
...
<小时/>
class AnalyzerService
...
public boolean analyze(PdfDocument pdf) {
PdfADocument pdfa = new PdfADocument(
pdf.getReader(), pdf.getWriter() <-- PdfException here
);
...
}
iText 7.1.5 及之前版本均有效。
在 7.1.6 中,我得到“com.itextpdf.kernel.PdfException:给定的 PdfReader 实例已被利用。PdfReader 无法重复使用,请创建一个新实例。”
看来我需要从 PdfDocument 中获取字节作为 byte[],然后从中创建一个新的 PdfReader。我尝试从 pdf.getReader().getOutputStream().toByteArray() 获取它们,但这不起作用。
目前我对如何从给定的 PdfDocument 创建 PdfADocument 感到非常困惑。
最佳答案
您的方法对 PdfDocument
和 PdfADocument
使用相同的 PdfReader
和(更糟糕)相同的 PdfWriter
代码 > 实例。由于两者都可以操作 PdfReader
并写入 PdfWriter
,这种情况可能会导致编写器中出现垃圾,因此您不应这样做。
简单地始终将同时具有读者和作者的文档视为正在进行的工作,不能将其视为已完成的文档文件,例如摘录用于中间检查。
当您想要检查上传的 PDF 文件时,为什么不直接从 buffer.toByteArray()
转发 byte[]
到 analyze
方法来创建一个单独的阅读器(如果需要的话,还可以创建一个文档)?这确实会检查上传的文件...
此外,如果您的输入文档可能符合 PDF/A 规范并在这种情况下进行特殊处理,那么您是否也应该将其作为 PdfADocument
进行操作(如果是)? IE。您是否应该首先检查分析器的一致性,并在积极的情况下在 Controller 类中使用 PdfADocument
?
关于java - 如何从 itext7 中的现有 PdfDocument 打开 PdfADocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56350284/
为了检查上传的 PDF 文件是否符合基本 PDF/A 一致性,我需要将它们作为 PdfADocuments 读取。但从版本 7.1.6 开始,这不再有效,而是抛出 PdfException(PdfEx
我是一名优秀的程序员,十分优秀!