【发布时间】:2019-05-28 21:30:31
【问题描述】:
为了检查上传的 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: Given PdfReader 实例已被使用。PdfReader 无法重复使用,请创建一个新实例。”
看来我需要从 PdfDocument 中获取字节作为字节 [],然后从中创建一个新的 PdfReader。我尝试从 pdf.getReader().getOutputStream().toByteArray() 中获取它们,但这不起作用。
目前我对如何从给定的 PdfDocument 创建 PdfADocument 感到很困惑。
【问题讨论】: