Мы получаем периодические исключения от нашего генератора PDF, который работает в док-контейнере в облаке. Одна часть генератора обрабатывает получение документа SVG и загрузку его в PDF. Каждые 100 звонков он выдает следующее исключение из
importPageAsForm (tmpSVGPdf, 0).
java.io.IOException: COSStream has been closed and cannot be read. Perhaps its enclosing PDDocument has been closed?
Нам не удалось воспроизвести эту проблему локально.
Сначала мы создадим pdf, который будет содержать загруженный svg:
PDDocument pdf = new PDDocument();
PDPage page = new PDPage(new PDRectangle(width, height));
pdf.addPage(page);
Затем мы открываем поток PDF и поток вывода для транскодера svg.
try(PDPageContentStream stream = new PDPageContentStream(pdf, page, PDPageContentStream.AppendMode.APPEND,false, true))
try (ByteArrayOutputStream byteStream = new ByteArrayOutputStream())
Когда мы нажимаем importPageAsForm ниже, мы передаем временный SVG-документ, и где-то внутри этой функции он достигает COSStream, который закрыт. Мы запускаем функцию локально с теми же данными, и она всегда работает нормально.
TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(element.getEncodedData().getBytes()));
TranscoderOutput output = new TranscoderOutput(byteStream);
pdfTranscoder.transcode(input, output);
PDDocument tmpSVGPdf = PDDocument.load(byteStream.toByteArray());
LayerUtility layerUtil = new LayerUtility(pdf);
PDFormXObject svgObj = layerUtil.importPageAsForm(tmpSVGPdf, 0);
stream.drawForm(svgObj);
return Optional.of(pdf);