diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java index b024879b..c50285b1 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java @@ -70,7 +70,7 @@ public class SplitPdfBySectionsController { for (int i = 0; i < splitDocumentsBoas.size(); i++) { ByteArrayOutputStream baos = splitDocumentsBoas.get(i); int sectionNum = (i % (horiz * verti)) + 1; - String fileName = filename + "_" + pageNum + "_" + sectionNum + ".pdf"; + String fileName = filename + "_" + pageNum + "_" + sectionNum + ".pdf"; byte[] pdf = baos.toByteArray(); ZipEntry pdfEntry = new ZipEntry(fileName); zipOut.putNextEntry(pdfEntry); @@ -137,7 +137,4 @@ public class SplitPdfBySectionsController { return splitDocuments; } - - - } diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineController.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineController.java index 274c3f03..31652e18 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineController.java @@ -2,11 +2,11 @@ package stirling.software.SPDF.controller.api.pipeline; import java.io.ByteArrayOutputStream; import java.io.InputStream; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import java.util.HashMap; -import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -82,46 +82,45 @@ public class PipelineController { return null; } + // Create a ByteArrayOutputStream to hold the zip + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ZipOutputStream zipOut = new ZipOutputStream(baos); - // Create a ByteArrayOutputStream to hold the zip - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ZipOutputStream zipOut = new ZipOutputStream(baos); + // A map to keep track of filenames and their counts + Map filenameCount = new HashMap<>(); - // A map to keep track of filenames and their counts - Map filenameCount = new HashMap<>(); + // Loop through each file and add it to the zip + for (Resource file : outputFiles) { + String originalFilename = file.getFilename(); + String filename = originalFilename; - // Loop through each file and add it to the zip - for (Resource file : outputFiles) { - String originalFilename = file.getFilename(); - String filename = originalFilename; + // Check if the filename already exists, and modify it if necessary + if (filenameCount.containsKey(originalFilename)) { + int count = filenameCount.get(originalFilename); + String baseName = originalFilename.replaceAll("\\.[^.]*$", ""); + String extension = originalFilename.replaceAll("^.*\\.", ""); + filename = baseName + "(" + count + ")." + extension; + filenameCount.put(originalFilename, count + 1); + } else { + filenameCount.put(originalFilename, 1); + } - // Check if the filename already exists, and modify it if necessary - if (filenameCount.containsKey(originalFilename)) { - int count = filenameCount.get(originalFilename); - String baseName = originalFilename.replaceAll("\\.[^.]*$", ""); - String extension = originalFilename.replaceAll("^.*\\.", ""); - filename = baseName + "(" + count + ")." + extension; - filenameCount.put(originalFilename, count + 1); - } else { - filenameCount.put(originalFilename, 1); - } + ZipEntry zipEntry = new ZipEntry(filename); + zipOut.putNextEntry(zipEntry); - ZipEntry zipEntry = new ZipEntry(filename); - zipOut.putNextEntry(zipEntry); + // Read the file into a byte array + InputStream is = file.getInputStream(); + byte[] bytes = new byte[(int) file.contentLength()]; + is.read(bytes); - // Read the file into a byte array - InputStream is = file.getInputStream(); - byte[] bytes = new byte[(int) file.contentLength()]; - is.read(bytes); + // Write the bytes of the file to the zip + zipOut.write(bytes, 0, bytes.length); + zipOut.closeEntry(); - // Write the bytes of the file to the zip - zipOut.write(bytes, 0, bytes.length); - zipOut.closeEntry(); + is.close(); + } - is.close(); - } - - zipOut.close(); + zipOut.close(); logger.info("Returning zipped file response..."); return WebResponseUtils.boasToWebResponse( diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java index 3e39a65e..34dcb613 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java @@ -223,7 +223,7 @@ public class PipelineProcessor { // If the operation is "auto-rename", generate a new filename. // This is a simple example of generating a filename using current timestamp. // Modify as per your needs. - + newFilename = extractFilename(response); } else { // Otherwise, keep the original filename. @@ -248,28 +248,27 @@ public class PipelineProcessor { return newOutputFiles; } + public String extractFilename(ResponseEntity response) { + String filename = "default-filename.ext"; // Default filename if not found -public String extractFilename(ResponseEntity response) { - String filename = "default-filename.ext"; // Default filename if not found + HttpHeaders headers = response.getHeaders(); + String contentDisposition = headers.getFirst(HttpHeaders.CONTENT_DISPOSITION); - HttpHeaders headers = response.getHeaders(); - String contentDisposition = headers.getFirst(HttpHeaders.CONTENT_DISPOSITION); + if (contentDisposition != null && !contentDisposition.isEmpty()) { + String[] parts = contentDisposition.split(";"); + for (String part : parts) { + if (part.trim().startsWith("filename")) { + // Extracts filename and removes quotes if present + filename = part.split("=")[1].trim().replace("\"", ""); + filename = URLDecoder.decode(filename, StandardCharsets.UTF_8); - if (contentDisposition != null && !contentDisposition.isEmpty()) { - String[] parts = contentDisposition.split(";"); - for (String part : parts) { - if (part.trim().startsWith("filename")) { - // Extracts filename and removes quotes if present - filename = part.split("=")[1].trim().replace("\"", ""); - filename = URLDecoder.decode(filename, StandardCharsets.UTF_8); - - break; + break; + } } } - } - return filename; -} + return filename; + } List generateInputFiles(File[] files) throws Exception { if (files == null || files.length == 0) {