gpt4 book ai didi

java - 如何从 itext7 中的现有 PdfDocument 打开 PdfADocument?

转载 作者:行者123 更新时间:2023-12-02 09:50:29 26 4
gpt4 key购买 nike

为了检查上传的 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 感到非常困惑。

最佳答案

您的方法对 PdfDocumentPdfADocument 使用相同的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com