Чтобы проверить загруженные файлы 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 в виде байта [], а затем создать из него новый PdfReader. Я пытался получить их из pdf.getReader (). GetOutputStream (). ToByteArray (), но это не работает.
В настоящий момент я совершенно растерялся, как создать этот PdfADocument из данного PdfDocument.