From 2399da689386c2fbc891a1ad0f06f033ab101439 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Tue, 19 May 2026 23:03:44 +0100 Subject: [PATCH] migrate exportUpdatedPages from bytes to stream (#6201) Co-authored-by: ConnorYoh <40631091+ConnorYoh@users.noreply.github.com> --- .../api/converters/ConvertPdfJsonController.java | 11 +++++++---- .../SPDF/service/PdfJsonConversionService.java | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPdfJsonController.java b/app/core/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPdfJsonController.java index d68cfad72..371e63ffa 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPdfJsonController.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPdfJsonController.java @@ -184,8 +184,6 @@ public class ConvertPdfJsonController { validateJobAccess(jobId); - byte[] pdfBytes = pdfJsonConversionService.exportUpdatedPages(jobId, document); - String baseName = (filename != null && !filename.isBlank()) ? FILE_EXTENSION_PATTERN @@ -197,13 +195,18 @@ public class ConvertPdfJsonController { .orElse("document"); String docName = baseName.endsWith(".pdf") ? baseName : baseName + ".pdf"; TempFile tempOut = tempFileManager.createManagedTempFile(".pdf"); + try (OutputStream os = Files.newOutputStream(tempOut.getPath())) { + pdfJsonConversionService.exportUpdatedPages(jobId, document, os); + } catch (Exception e) { + tempOut.close(); + throw e; + } try { - Files.write(tempOut.getPath(), pdfBytes); + return WebResponseUtils.pdfFileToWebResponse(tempOut, docName); } catch (Exception e) { tempOut.close(); throw e; } - return WebResponseUtils.pdfFileToWebResponse(tempOut, docName); } @GetMapping(value = "/pdf/text-editor/page/{jobId}/{pageNumber}") diff --git a/app/core/src/main/java/stirling/software/SPDF/service/PdfJsonConversionService.java b/app/core/src/main/java/stirling/software/SPDF/service/PdfJsonConversionService.java index 331c79008..1eed1d275 100644 --- a/app/core/src/main/java/stirling/software/SPDF/service/PdfJsonConversionService.java +++ b/app/core/src/main/java/stirling/software/SPDF/service/PdfJsonConversionService.java @@ -6490,7 +6490,8 @@ public class PdfJsonConversionService { objectMapper.writeValue(out, pageFonts); } - public byte[] exportUpdatedPages(String jobId, PdfJsonDocument updates) throws IOException { + public void exportUpdatedPages(String jobId, PdfJsonDocument updates, OutputStream outputStream) + throws IOException { if (jobId == null || jobId.isBlank()) { throw new IllegalArgumentException("jobId is required for incremental export"); } @@ -6513,7 +6514,8 @@ public class PdfJsonConversionService { log.debug( "Incremental export requested with no page updates; returning cached PDF for jobId {}", jobId); - return cached.getPdfBytes(); + outputStream.write(cached.getPdfBytes()); + return; } try (PDDocument document = pdfDocumentFactory.load(cached.getPdfBytes(), true)) { @@ -6580,7 +6582,8 @@ public class PdfJsonConversionService { log.debug( "Incremental export for jobId {} resulted in no page updates; returning cached PDF", jobId); - return cached.getPdfBytes(); + outputStream.write(cached.getPdfBytes()); + return; } ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -6603,7 +6606,7 @@ public class PdfJsonConversionService { "Incremental export complete for jobId {} (pages updated: {})", jobId, updatedPages.stream().map(i -> i + 1).sorted().toList()); - return updatedBytes; + outputStream.write(updatedBytes); } }