mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-11-01 01:21:18 +01:00 
			
		
		
		
	test
This commit is contained in:
		
							parent
							
								
									a9edb49723
								
							
						
					
					
						commit
						734d76a3b5
					
				@ -1,12 +1,13 @@
 | 
				
			|||||||
package stirling.software.SPDF;
 | 
					package stirling.software.SPDF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.SystemCommand;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.net.InetSocketAddress;
 | 
					import java.net.InetSocketAddress;
 | 
				
			||||||
import java.net.Socket;
 | 
					import java.net.Socket;
 | 
				
			||||||
import java.util.concurrent.ExecutorService;
 | 
					import java.util.concurrent.ExecutorService;
 | 
				
			||||||
import java.util.concurrent.Executors;
 | 
					import java.util.concurrent.Executors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.SystemCommand;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class LibreOfficeListener {
 | 
					public class LibreOfficeListener {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final long ACTIVITY_TIMEOUT = 20 * 60 * 1000; // 20 minutes
 | 
					    private static final long ACTIVITY_TIMEOUT = 20 * 60 * 1000; // 20 minutes
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF;
 | 
					package stirling.software.SPDF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.SystemCommand;
 | 
					 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
import java.nio.file.Paths;
 | 
					import java.nio.file.Paths;
 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
@ -11,6 +10,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
				
			|||||||
import org.springframework.core.env.Environment;
 | 
					import org.springframework.core.env.Environment;
 | 
				
			||||||
import org.springframework.scheduling.annotation.EnableScheduling;
 | 
					import org.springframework.scheduling.annotation.EnableScheduling;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.SystemCommand;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import jakarta.annotation.PostConstruct;
 | 
					import jakarta.annotation.PostConstruct;
 | 
				
			||||||
import stirling.software.SPDF.config.ConfigInitializer;
 | 
					import stirling.software.SPDF.config.ConfigInitializer;
 | 
				
			||||||
import stirling.software.SPDF.utils.GeneralUtils;
 | 
					import stirling.software.SPDF.utils.GeneralUtils;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api;
 | 
					package stirling.software.SPDF.controller.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.Color;
 | 
					import java.awt.Color;
 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
@ -22,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -137,6 +137,7 @@ public class MultiPageLayoutController {
 | 
				
			|||||||
        byte[] result = baos.toByteArray();
 | 
					        byte[] result = baos.toByteArray();
 | 
				
			||||||
        return WebResponseUtils.bytesToWebResponse(
 | 
					        return WebResponseUtils.bytesToWebResponse(
 | 
				
			||||||
                result,
 | 
					                result,
 | 
				
			||||||
                Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_layoutChanged.pdf");
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_layoutChanged.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api;
 | 
					package stirling.software.SPDF.controller.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
@ -21,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -77,7 +77,8 @@ public class PdfOverlayController {
 | 
				
			|||||||
                overlay.overlay(overlayGuide).save(outputStream);
 | 
					                overlay.overlay(overlayGuide).save(outputStream);
 | 
				
			||||||
                byte[] data = outputStream.toByteArray();
 | 
					                byte[] data = outputStream.toByteArray();
 | 
				
			||||||
                String outputFilename =
 | 
					                String outputFilename =
 | 
				
			||||||
                        Filenames.toSimpleFileName(baseFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
					                        Filenames.toSimpleFileName(baseFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                        .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
                                + "_overlayed.pdf"; // Remove file extension and append .pdf
 | 
					                                + "_overlayed.pdf"; // Remove file extension and append .pdf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return WebResponseUtils.bytesToWebResponse(
 | 
					                return WebResponseUtils.bytesToWebResponse(
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api;
 | 
					package stirling.software.SPDF.controller.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@ -17,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -58,7 +58,9 @@ public class RearrangePagesPDFController {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        return WebResponseUtils.pdfDocToWebResponse(
 | 
					        return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                document,
 | 
					                document,
 | 
				
			||||||
                Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_removed_pages.pdf");
 | 
					                Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_removed_pages.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private List<Integer> removeFirst(int totalPages) {
 | 
					    private List<Integer> removeFirst(int totalPages) {
 | 
				
			||||||
@ -212,7 +214,8 @@ public class RearrangePagesPDFController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            return WebResponseUtils.pdfDocToWebResponse(
 | 
					            return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                    document,
 | 
					                    document,
 | 
				
			||||||
                    Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
					                    Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                    .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
                            + "_rearranged.pdf");
 | 
					                            + "_rearranged.pdf");
 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
            logger.error("Failed rearranging documents", e);
 | 
					            logger.error("Failed rearranging documents", e);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api;
 | 
					package stirling.software.SPDF.controller.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.apache.pdfbox.Loader;
 | 
					import org.apache.pdfbox.Loader;
 | 
				
			||||||
@ -16,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -50,6 +50,8 @@ public class RotationController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return WebResponseUtils.pdfDocToWebResponse(
 | 
					        return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                document,
 | 
					                document,
 | 
				
			||||||
                Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_rotated.pdf");
 | 
					                Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_rotated.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api;
 | 
					package stirling.software.SPDF.controller.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
@ -23,6 +22,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -113,6 +113,7 @@ public class ScalePagesController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return WebResponseUtils.bytesToWebResponse(
 | 
					        return WebResponseUtils.bytesToWebResponse(
 | 
				
			||||||
                baos.toByteArray(),
 | 
					                baos.toByteArray(),
 | 
				
			||||||
                Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_scaled.pdf");
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_scaled.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api;
 | 
					package stirling.software.SPDF.controller.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
@ -24,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -84,7 +84,9 @@ public class SplitPDFController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Path zipFile = Files.createTempFile("split_documents", ".zip");
 | 
					        Path zipFile = Files.createTempFile("split_documents", ".zip");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
 | 
					        String filename =
 | 
				
			||||||
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename())
 | 
				
			||||||
 | 
					                        .replaceFirst("[.][^.]+$", "");
 | 
				
			||||||
        try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
 | 
					        try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
 | 
				
			||||||
            // loop through the split documents and write them to the zip file
 | 
					            // loop through the split documents and write them to the zip file
 | 
				
			||||||
            for (int i = 0; i < splitDocumentsBoas.size(); i++) {
 | 
					            for (int i = 0; i < splitDocumentsBoas.size(); i++) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api;
 | 
					package stirling.software.SPDF.controller.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
@ -27,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -65,7 +65,9 @@ public class SplitPdfBySectionsController {
 | 
				
			|||||||
        sourceDocument.close();
 | 
					        sourceDocument.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Path zipFile = Files.createTempFile("split_documents", ".zip");
 | 
					        Path zipFile = Files.createTempFile("split_documents", ".zip");
 | 
				
			||||||
        String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
 | 
					        String filename =
 | 
				
			||||||
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename())
 | 
				
			||||||
 | 
					                        .replaceFirst("[.][^.]+$", "");
 | 
				
			||||||
        byte[] data;
 | 
					        byte[] data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
 | 
					        try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api;
 | 
					package stirling.software.SPDF.controller.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
@ -21,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -121,7 +121,9 @@ public class SplitPdfBySizeController {
 | 
				
			|||||||
        sourceDocument.close();
 | 
					        sourceDocument.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Path zipFile = Files.createTempFile("split_documents", ".zip");
 | 
					        Path zipFile = Files.createTempFile("split_documents", ".zip");
 | 
				
			||||||
        String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
 | 
					        String filename =
 | 
				
			||||||
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename())
 | 
				
			||||||
 | 
					                        .replaceFirst("[.][^.]+$", "");
 | 
				
			||||||
        byte[] data;
 | 
					        byte[] data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
 | 
					        try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.converters;
 | 
					package stirling.software.SPDF.controller.api.converters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Qualifier;
 | 
					import org.springframework.beans.factory.annotation.Qualifier;
 | 
				
			||||||
import org.springframework.http.ResponseEntity;
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
@ -10,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.converters;
 | 
					package stirling.software.SPDF.controller.api.converters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.beans.factory.annotation.Qualifier;
 | 
					import org.springframework.beans.factory.annotation.Qualifier;
 | 
				
			||||||
import org.springframework.http.ResponseEntity;
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
@ -10,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.converters;
 | 
					package stirling.software.SPDF.controller.api.converters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.net.URLConnection;
 | 
					import java.net.URLConnection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -19,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -57,7 +57,9 @@ public class ConvertImgPDFController {
 | 
				
			|||||||
        // returns bytes for image
 | 
					        // returns bytes for image
 | 
				
			||||||
        boolean singleImage = "single".equals(singleOrMultiple);
 | 
					        boolean singleImage = "single".equals(singleOrMultiple);
 | 
				
			||||||
        byte[] result = null;
 | 
					        byte[] result = null;
 | 
				
			||||||
        String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
 | 
					        String filename =
 | 
				
			||||||
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename())
 | 
				
			||||||
 | 
					                        .replaceFirst("[.][^.]+$", "");
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            result =
 | 
					            result =
 | 
				
			||||||
                    PdfUtils.convertFromPdf(
 | 
					                    PdfUtils.convertFromPdf(
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.converters;
 | 
					package stirling.software.SPDF.controller.api.converters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -20,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.converters;
 | 
					package stirling.software.SPDF.controller.api.converters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
import java.nio.file.Path;
 | 
					import java.nio.file.Path;
 | 
				
			||||||
@ -17,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -90,7 +90,8 @@ public class ConvertOfficeController {
 | 
				
			|||||||
        byte[] pdfByteArray = convertToPdf(inputFile);
 | 
					        byte[] pdfByteArray = convertToPdf(inputFile);
 | 
				
			||||||
        return WebResponseUtils.bytesToWebResponse(
 | 
					        return WebResponseUtils.bytesToWebResponse(
 | 
				
			||||||
                pdfByteArray,
 | 
					                pdfByteArray,
 | 
				
			||||||
                Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
					                Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
                        + "_convertedToPDF.pdf");
 | 
					                        + "_convertedToPDF.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.converters;
 | 
					package stirling.software.SPDF.controller.api.converters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
import java.nio.file.Path;
 | 
					import java.nio.file.Path;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
@ -16,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -93,7 +93,8 @@ public class ConvertPDFToBookController {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String outputFilename =
 | 
					        String outputFilename =
 | 
				
			||||||
                Filenames.toSimpleFileName(fileInput.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
					                Filenames.toSimpleFileName(fileInput.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
                        + "."
 | 
					                        + "."
 | 
				
			||||||
                        + outputFormat; // Remove file extension and append .pdf
 | 
					                        + outputFormat; // Remove file extension and append .pdf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.converters;
 | 
					package stirling.software.SPDF.controller.api.converters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
import java.nio.file.Path;
 | 
					import java.nio.file.Path;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
@ -13,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -64,7 +64,9 @@ public class ConvertPDFToPDFA {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Return the optimized PDF as a response
 | 
					        // Return the optimized PDF as a response
 | 
				
			||||||
        String outputFilename =
 | 
					        String outputFilename =
 | 
				
			||||||
                Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_PDFA.pdf";
 | 
					                Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_PDFA.pdf";
 | 
				
			||||||
        return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
 | 
					        return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.filters;
 | 
					package stirling.software.SPDF.controller.api.filters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.apache.pdfbox.Loader;
 | 
					import org.apache.pdfbox.Loader;
 | 
				
			||||||
@ -14,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Comparator;
 | 
					import java.util.Comparator;
 | 
				
			||||||
@ -19,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -134,7 +134,8 @@ public class AutoRenameController {
 | 
				
			|||||||
            return WebResponseUtils.pdfDocToWebResponse(document, header + ".pdf");
 | 
					            return WebResponseUtils.pdfDocToWebResponse(document, header + ".pdf");
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            logger.info("File has no good title to be found");
 | 
					            logger.info("File has no good title to be found");
 | 
				
			||||||
            return WebResponseUtils.pdfDocToWebResponse(document, Filenames.toSimpleFileName(file.getOriginalFilename()));
 | 
					            return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
 | 
					                    document, Filenames.toSimpleFileName(file.getOriginalFilename()));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.image.BufferedImage;
 | 
					import java.awt.image.BufferedImage;
 | 
				
			||||||
import java.awt.image.DataBufferByte;
 | 
					import java.awt.image.DataBufferByte;
 | 
				
			||||||
import java.awt.image.DataBufferInt;
 | 
					import java.awt.image.DataBufferInt;
 | 
				
			||||||
@ -32,6 +31,7 @@ import com.google.zxing.PlanarYUVLuminanceSource;
 | 
				
			|||||||
import com.google.zxing.Result;
 | 
					import com.google.zxing.Result;
 | 
				
			||||||
import com.google.zxing.common.HybridBinarizer;
 | 
					import com.google.zxing.common.HybridBinarizer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -98,7 +98,9 @@ public class AutoSplitPdfController {
 | 
				
			|||||||
        document.close();
 | 
					        document.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Path zipFile = Files.createTempFile("split_documents", ".zip");
 | 
					        Path zipFile = Files.createTempFile("split_documents", ".zip");
 | 
				
			||||||
        String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
 | 
					        String filename =
 | 
				
			||||||
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename())
 | 
				
			||||||
 | 
					                        .replaceFirst("[.][^.]+$", "");
 | 
				
			||||||
        byte[] data;
 | 
					        byte[] data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
 | 
					        try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,25 +1,21 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.image.BufferedImage;
 | 
					import java.awt.image.BufferedImage;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					 | 
				
			||||||
import java.nio.file.Path;
 | 
					 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Arrays;
 | 
					 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.stream.Collectors;
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
import java.util.stream.IntStream;
 | 
					import java.util.stream.IntStream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.imageio.ImageIO;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.apache.pdfbox.Loader;
 | 
					import org.apache.pdfbox.Loader;
 | 
				
			||||||
import org.apache.pdfbox.pdmodel.PDDocument;
 | 
					import org.apache.pdfbox.pdmodel.PDDocument;
 | 
				
			||||||
import org.apache.pdfbox.pdmodel.PDPage;
 | 
					import org.apache.pdfbox.pdmodel.PDPage;
 | 
				
			||||||
import org.apache.pdfbox.pdmodel.PDPageTree;
 | 
					import org.apache.pdfbox.pdmodel.PDPageTree;
 | 
				
			||||||
import org.apache.pdfbox.rendering.PDFRenderer;
 | 
					import org.apache.pdfbox.rendering.PDFRenderer;
 | 
				
			||||||
import org.apache.pdfbox.text.PDFTextStripper;
 | 
					import org.apache.pdfbox.text.PDFTextStripper;
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
import org.springframework.http.HttpStatus;
 | 
					import org.springframework.http.HttpStatus;
 | 
				
			||||||
import org.springframework.http.ResponseEntity;
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
import org.springframework.web.bind.annotation.ModelAttribute;
 | 
					import org.springframework.web.bind.annotation.ModelAttribute;
 | 
				
			||||||
@ -28,12 +24,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest;
 | 
					import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest;
 | 
				
			||||||
import stirling.software.SPDF.utils.PdfUtils;
 | 
					import stirling.software.SPDF.utils.PdfUtils;
 | 
				
			||||||
import stirling.software.SPDF.utils.ProcessExecutor;
 | 
					 | 
				
			||||||
import stirling.software.SPDF.utils.WebResponseUtils;
 | 
					import stirling.software.SPDF.utils.WebResponseUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@RestController
 | 
					@RestController
 | 
				
			||||||
@ -41,6 +37,8 @@ import stirling.software.SPDF.utils.WebResponseUtils;
 | 
				
			|||||||
@Tag(name = "Misc", description = "Miscellaneous APIs")
 | 
					@Tag(name = "Misc", description = "Miscellaneous APIs")
 | 
				
			||||||
public class BlankPageController {
 | 
					public class BlankPageController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final Logger logger = LoggerFactory.getLogger(BlankPageController.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @PostMapping(consumes = "multipart/form-data", value = "/remove-blanks")
 | 
					    @PostMapping(consumes = "multipart/form-data", value = "/remove-blanks")
 | 
				
			||||||
    @Operation(
 | 
					    @Operation(
 | 
				
			||||||
            summary = "Remove blank pages from a PDF file",
 | 
					            summary = "Remove blank pages from a PDF file",
 | 
				
			||||||
@ -63,63 +61,35 @@ public class BlankPageController {
 | 
				
			|||||||
            PDFRenderer pdfRenderer = new PDFRenderer(document);
 | 
					            PDFRenderer pdfRenderer = new PDFRenderer(document);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (PDPage page : pages) {
 | 
					            for (PDPage page : pages) {
 | 
				
			||||||
                System.out.println("checking page " + pageIndex);
 | 
					                logger.info("checking page " + pageIndex);
 | 
				
			||||||
                textStripper.setStartPage(pageIndex + 1);
 | 
					                textStripper.setStartPage(pageIndex + 1);
 | 
				
			||||||
                textStripper.setEndPage(pageIndex + 1);
 | 
					                textStripper.setEndPage(pageIndex + 1);
 | 
				
			||||||
                String pageText = textStripper.getText(document);
 | 
					                String pageText = textStripper.getText(document);
 | 
				
			||||||
                boolean hasText = !pageText.trim().isEmpty();
 | 
					                boolean hasText = !pageText.trim().isEmpty();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Boolean blank = false;
 | 
				
			||||||
                if (hasText) {
 | 
					                if (hasText) {
 | 
				
			||||||
                    pagesToKeepIndex.add(pageIndex);
 | 
					                    logger.info("page " + pageIndex + " has text, not blank");
 | 
				
			||||||
                    System.out.println("page " + pageIndex + " has text");
 | 
					                    blank = false;
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    boolean hasImages = PdfUtils.hasImagesOnPage(page);
 | 
					                    boolean hasImages = PdfUtils.hasImagesOnPage(page);
 | 
				
			||||||
                    if (hasImages) {
 | 
					                    if (hasImages) {
 | 
				
			||||||
                        System.out.println("page " + pageIndex + " has image");
 | 
					                        logger.info("page " + pageIndex + " has image, running blank detection");
 | 
				
			||||||
 | 
					 | 
				
			||||||
                        Path tempFile = Files.createTempFile("image_", ".png");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        // Render image and save as temp file
 | 
					                        // Render image and save as temp file
 | 
				
			||||||
                        BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 300);
 | 
					                        BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 30);
 | 
				
			||||||
                        ImageIO.write(image, "png", tempFile.toFile());
 | 
					                        blank = isBlankImage(image, threshold, whitePercent, threshold);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                        List<String> command =
 | 
					 | 
				
			||||||
                                new ArrayList<>(
 | 
					 | 
				
			||||||
                                        Arrays.asList(
 | 
					 | 
				
			||||||
                                                "python",
 | 
					 | 
				
			||||||
                                                System.getProperty("user.dir")
 | 
					 | 
				
			||||||
                                                        + "/scripts/detect-blank-pages.py",
 | 
					 | 
				
			||||||
                                                tempFile.toString(),
 | 
					 | 
				
			||||||
                                                "--threshold",
 | 
					 | 
				
			||||||
                                                String.valueOf(threshold),
 | 
					 | 
				
			||||||
                                                "--white_percent",
 | 
					 | 
				
			||||||
                                                String.valueOf(whitePercent)));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        Boolean blank = false;
 | 
					 | 
				
			||||||
                        // Run CLI command
 | 
					 | 
				
			||||||
                        try {
 | 
					 | 
				
			||||||
                            ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV)
 | 
					 | 
				
			||||||
                                    .runCommandWithOutputHandling(command);
 | 
					 | 
				
			||||||
                        } catch (IOException e) {
 | 
					 | 
				
			||||||
                            // From detect-blank-pages.py
 | 
					 | 
				
			||||||
                            // Return code 1: The image is considered blank.
 | 
					 | 
				
			||||||
                            // Return code 0: The image is not considered blank.
 | 
					 | 
				
			||||||
                            // Since the process returned with a failure code, it should be blank.
 | 
					 | 
				
			||||||
                            blank = true;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if (blank) {
 | 
					 | 
				
			||||||
                            System.out.println("Skipping, Image was blank for page #" + pageIndex);
 | 
					 | 
				
			||||||
                        } else {
 | 
					 | 
				
			||||||
                            System.out.println(
 | 
					 | 
				
			||||||
                                    "page " + pageIndex + " has image which is not blank");
 | 
					 | 
				
			||||||
                            pagesToKeepIndex.add(pageIndex);
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (blank) {
 | 
				
			||||||
 | 
					                    logger.info("Skipping, Image was  blank for page #" + pageIndex);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    logger.info("page " + pageIndex + " has image which is not blank");
 | 
				
			||||||
 | 
					                    pagesToKeepIndex.add(pageIndex);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                pageIndex++;
 | 
					                pageIndex++;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            System.out.print("pagesToKeep=" + pagesToKeepIndex.size());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Remove pages not present in pagesToKeepIndex
 | 
					            // Remove pages not present in pagesToKeepIndex
 | 
				
			||||||
            List<Integer> pageIndices =
 | 
					            List<Integer> pageIndices =
 | 
				
			||||||
                    IntStream.range(0, pages.getCount()).boxed().collect(Collectors.toList());
 | 
					                    IntStream.range(0, pages.getCount()).boxed().collect(Collectors.toList());
 | 
				
			||||||
@ -132,7 +102,8 @@ public class BlankPageController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            return WebResponseUtils.pdfDocToWebResponse(
 | 
					            return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                    document,
 | 
					                    document,
 | 
				
			||||||
                    Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
					                    Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                    .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
                            + "_blanksRemoved.pdf");
 | 
					                            + "_blanksRemoved.pdf");
 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
@ -141,4 +112,30 @@ public class BlankPageController {
 | 
				
			|||||||
            if (document != null) document.close();
 | 
					            if (document != null) document.close();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static boolean isBlankImage(
 | 
				
			||||||
 | 
					            BufferedImage image, int threshold, double whitePercent, int blurSize) {
 | 
				
			||||||
 | 
					        if (image == null) {
 | 
				
			||||||
 | 
					            logger.info("Error: Image is null");
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Convert to binary image based on the threshold
 | 
				
			||||||
 | 
					        int whitePixels = 0;
 | 
				
			||||||
 | 
					        int totalPixels = image.getWidth() * image.getHeight();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (int i = 0; i < image.getHeight(); i++) {
 | 
				
			||||||
 | 
					            for (int j = 0; j < image.getWidth(); j++) {
 | 
				
			||||||
 | 
					                int color = image.getRGB(j, i) & 0xFF;
 | 
				
			||||||
 | 
					                if (color >= 255 - threshold) {
 | 
				
			||||||
 | 
					                    whitePixels++;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        double whitePixelPercentage = (whitePixels / (double) totalPixels) * 100;
 | 
				
			||||||
 | 
					        logger.info(String.format("Page has white pixel percent of %.2f%%", whitePixelPercentage));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return whitePixelPercentage >= whitePercent;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.Image;
 | 
					import java.awt.Image;
 | 
				
			||||||
import java.awt.image.BufferedImage;
 | 
					import java.awt.image.BufferedImage;
 | 
				
			||||||
import java.io.ByteArrayInputStream;
 | 
					import java.io.ByteArrayInputStream;
 | 
				
			||||||
@ -30,6 +29,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -265,7 +265,9 @@ public class CompressController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Return the optimized PDF as a response
 | 
					        // Return the optimized PDF as a response
 | 
				
			||||||
        String outputFilename =
 | 
					        String outputFilename =
 | 
				
			||||||
                Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_Optimized.pdf";
 | 
					                Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_Optimized.pdf";
 | 
				
			||||||
        return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
 | 
					        return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.Graphics2D;
 | 
					import java.awt.Graphics2D;
 | 
				
			||||||
import java.awt.Image;
 | 
					import java.awt.Image;
 | 
				
			||||||
import java.awt.image.BufferedImage;
 | 
					import java.awt.image.BufferedImage;
 | 
				
			||||||
@ -30,6 +29,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -67,7 +67,9 @@ public class ExtractImagesController {
 | 
				
			|||||||
        zos.setLevel(Deflater.BEST_COMPRESSION);
 | 
					        zos.setLevel(Deflater.BEST_COMPRESSION);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int imageIndex = 1;
 | 
					        int imageIndex = 1;
 | 
				
			||||||
        String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
 | 
					        String filename =
 | 
				
			||||||
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename())
 | 
				
			||||||
 | 
					                        .replaceFirst("[.][^.]+$", "");
 | 
				
			||||||
        int pageNum = 0;
 | 
					        int pageNum = 0;
 | 
				
			||||||
        Set<Integer> processedImages = new HashSet<>();
 | 
					        Set<Integer> processedImages = new HashSet<>();
 | 
				
			||||||
        // Iterate over each page
 | 
					        // Iterate over each page
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.Color;
 | 
					import java.awt.Color;
 | 
				
			||||||
import java.awt.geom.AffineTransform;
 | 
					import java.awt.geom.AffineTransform;
 | 
				
			||||||
import java.awt.image.AffineTransformOp;
 | 
					import java.awt.image.AffineTransformOp;
 | 
				
			||||||
@ -34,6 +33,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Hidden;
 | 
					import io.swagger.v3.oas.annotations.Hidden;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
@ -142,7 +142,9 @@ public class FakeScanControllerWIP {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Return the optimized PDF as a response
 | 
					        // Return the optimized PDF as a response
 | 
				
			||||||
        String outputFilename =
 | 
					        String outputFilename =
 | 
				
			||||||
                Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_scanned.pdf";
 | 
					                Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_scanned.pdf";
 | 
				
			||||||
        return WebResponseUtils.boasToWebResponse(baos, outputFilename);
 | 
					        return WebResponseUtils.boasToWebResponse(baos, outputFilename);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.text.ParseException;
 | 
					import java.text.ParseException;
 | 
				
			||||||
import java.text.SimpleDateFormat;
 | 
					import java.text.SimpleDateFormat;
 | 
				
			||||||
@ -19,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -165,6 +165,8 @@ public class MetadataController {
 | 
				
			|||||||
        document.setDocumentInformation(info);
 | 
					        document.setDocumentInformation(info);
 | 
				
			||||||
        return WebResponseUtils.pdfDocToWebResponse(
 | 
					        return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                document,
 | 
					                document,
 | 
				
			||||||
                Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_metadata.pdf");
 | 
					                Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_metadata.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.FileOutputStream;
 | 
					import java.io.FileOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
@ -25,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -183,12 +183,16 @@ public class OCRController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Return the OCR processed PDF as a response
 | 
					        // Return the OCR processed PDF as a response
 | 
				
			||||||
        String outputFilename =
 | 
					        String outputFilename =
 | 
				
			||||||
                Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_OCR.pdf";
 | 
					                Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_OCR.pdf";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (sidecar != null && sidecar) {
 | 
					        if (sidecar != null && sidecar) {
 | 
				
			||||||
            // Create a zip file containing both the PDF and the text file
 | 
					            // Create a zip file containing both the PDF and the text file
 | 
				
			||||||
            String outputZipFilename =
 | 
					            String outputZipFilename =
 | 
				
			||||||
                    Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_OCR.zip";
 | 
					                    Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                    .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                            + "_OCR.zip";
 | 
				
			||||||
            Path tempZipFile = Files.createTempFile("output_", ".zip");
 | 
					            Path tempZipFile = Files.createTempFile("output_", ".zip");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            try (ZipOutputStream zipOut =
 | 
					            try (ZipOutputStream zipOut =
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.slf4j.Logger;
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
@ -13,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -45,7 +45,9 @@ public class OverlayImageController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            return WebResponseUtils.bytesToWebResponse(
 | 
					            return WebResponseUtils.bytesToWebResponse(
 | 
				
			||||||
                    result,
 | 
					                    result,
 | 
				
			||||||
                    Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_overlayed.pdf");
 | 
					                    Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                    .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                            + "_overlayed.pdf");
 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
            logger.error("Failed to add image to PDF", e);
 | 
					            logger.error("Failed to add image to PDF", e);
 | 
				
			||||||
            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 | 
					            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@ -22,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -146,7 +146,8 @@ public class PageNumbersController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return WebResponseUtils.bytesToWebResponse(
 | 
					        return WebResponseUtils.bytesToWebResponse(
 | 
				
			||||||
                baos.toByteArray(),
 | 
					                baos.toByteArray(),
 | 
				
			||||||
                Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_numbersAdded.pdf",
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_numbersAdded.pdf",
 | 
				
			||||||
                MediaType.APPLICATION_PDF);
 | 
					                MediaType.APPLICATION_PDF);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
import java.nio.file.Path;
 | 
					import java.nio.file.Path;
 | 
				
			||||||
@ -16,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -66,7 +66,9 @@ public class RepairController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Return the optimized PDF as a response
 | 
					        // Return the optimized PDF as a response
 | 
				
			||||||
        String outputFilename =
 | 
					        String outputFilename =
 | 
				
			||||||
                Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_repaired.pdf";
 | 
					                Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_repaired.pdf";
 | 
				
			||||||
        return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
 | 
					        return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.nio.charset.StandardCharsets;
 | 
					import java.nio.charset.StandardCharsets;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -17,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -55,7 +55,8 @@ public class ShowJavascript {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                        script +=
 | 
					                        script +=
 | 
				
			||||||
                                "// File: "
 | 
					                                "// File: "
 | 
				
			||||||
                                        + Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
					                                        + Filenames.toSimpleFileName(
 | 
				
			||||||
 | 
					                                                inputFile.getOriginalFilename())
 | 
				
			||||||
                                        + ", Script: "
 | 
					                                        + ", Script: "
 | 
				
			||||||
                                        + name
 | 
					                                        + name
 | 
				
			||||||
                                        + "\n"
 | 
					                                        + "\n"
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.misc;
 | 
					package stirling.software.SPDF.controller.api.misc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.Color;
 | 
					import java.awt.Color;
 | 
				
			||||||
import java.awt.image.BufferedImage;
 | 
					import java.awt.image.BufferedImage;
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
@ -8,6 +7,7 @@ import java.io.FileOutputStream;
 | 
				
			|||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.io.InputStream;
 | 
					import java.io.InputStream;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.imageio.ImageIO;
 | 
					import javax.imageio.ImageIO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -33,6 +33,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,6 +53,7 @@ public class StampController {
 | 
				
			|||||||
    public ResponseEntity<byte[]> addStamp(@ModelAttribute AddStampRequest request)
 | 
					    public ResponseEntity<byte[]> addStamp(@ModelAttribute AddStampRequest request)
 | 
				
			||||||
            throws IOException, Exception {
 | 
					            throws IOException, Exception {
 | 
				
			||||||
        MultipartFile pdfFile = request.getFileInput();
 | 
					        MultipartFile pdfFile = request.getFileInput();
 | 
				
			||||||
 | 
					        List<Integer> pageNumbers = request.getPageNumbersList();
 | 
				
			||||||
        String watermarkType = request.getStampType();
 | 
					        String watermarkType = request.getStampType();
 | 
				
			||||||
        String watermarkText = request.getStampText();
 | 
					        String watermarkText = request.getStampText();
 | 
				
			||||||
        MultipartFile watermarkImage = request.getStampImage();
 | 
					        MultipartFile watermarkImage = request.getStampImage();
 | 
				
			||||||
@ -87,49 +89,58 @@ public class StampController {
 | 
				
			|||||||
        // Load the input PDF
 | 
					        // Load the input PDF
 | 
				
			||||||
        PDDocument document = Loader.loadPDF(pdfFile.getBytes());
 | 
					        PDDocument document = Loader.loadPDF(pdfFile.getBytes());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (PDPage page : document.getPages()) {
 | 
					        for (int pageIndex : pageNumbers) {
 | 
				
			||||||
            PDPageContentStream contentStream =
 | 
					            // Convert 1-based index to 0-based index required by
 | 
				
			||||||
                    new PDPageContentStream(
 | 
					            // document.getPages().get(index)
 | 
				
			||||||
                            document, page, PDPageContentStream.AppendMode.APPEND, true, true);
 | 
					            int zeroBasedIndex = pageIndex - 1;
 | 
				
			||||||
 | 
					            // Check if the zeroBasedIndex is within the range of the document's pages
 | 
				
			||||||
 | 
					            if (zeroBasedIndex >= 0 && zeroBasedIndex < document.getNumberOfPages()) {
 | 
				
			||||||
 | 
					                PDPage page = document.getPage(zeroBasedIndex);
 | 
				
			||||||
 | 
					                PDPageContentStream contentStream =
 | 
				
			||||||
 | 
					                        new PDPageContentStream(
 | 
				
			||||||
 | 
					                                document, page, PDPageContentStream.AppendMode.APPEND, true, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
 | 
					                PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
 | 
				
			||||||
            graphicsState.setNonStrokingAlphaConstant(opacity);
 | 
					                graphicsState.setNonStrokingAlphaConstant(opacity);
 | 
				
			||||||
            contentStream.setGraphicsStateParameters(graphicsState);
 | 
					                contentStream.setGraphicsStateParameters(graphicsState);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if ("text".equalsIgnoreCase(watermarkType)) {
 | 
					                if ("text".equalsIgnoreCase(watermarkType)) {
 | 
				
			||||||
                addTextStamp(
 | 
					                    addTextStamp(
 | 
				
			||||||
                        contentStream,
 | 
					                            contentStream,
 | 
				
			||||||
                        watermarkText,
 | 
					                            watermarkText,
 | 
				
			||||||
                        document,
 | 
					                            document,
 | 
				
			||||||
                        page,
 | 
					                            page,
 | 
				
			||||||
                        rotation,
 | 
					                            rotation,
 | 
				
			||||||
                        position,
 | 
					                            position,
 | 
				
			||||||
                        fontSize,
 | 
					                            fontSize,
 | 
				
			||||||
                        alphabet,
 | 
					                            alphabet,
 | 
				
			||||||
                        overrideX,
 | 
					                            overrideX,
 | 
				
			||||||
                        overrideY,
 | 
					                            overrideY,
 | 
				
			||||||
                        marginFactor,
 | 
					                            marginFactor,
 | 
				
			||||||
                        customColor);
 | 
					                            customColor);
 | 
				
			||||||
            } else if ("image".equalsIgnoreCase(watermarkType)) {
 | 
					                } else if ("image".equalsIgnoreCase(watermarkType)) {
 | 
				
			||||||
                addImageStamp(
 | 
					                    addImageStamp(
 | 
				
			||||||
                        contentStream,
 | 
					                            contentStream,
 | 
				
			||||||
                        watermarkImage,
 | 
					                            watermarkImage,
 | 
				
			||||||
                        document,
 | 
					                            document,
 | 
				
			||||||
                        page,
 | 
					                            page,
 | 
				
			||||||
                        rotation,
 | 
					                            rotation,
 | 
				
			||||||
                        position,
 | 
					                            position,
 | 
				
			||||||
                        fontSize,
 | 
					                            fontSize,
 | 
				
			||||||
                        overrideX,
 | 
					                            overrideX,
 | 
				
			||||||
                        overrideY,
 | 
					                            overrideY,
 | 
				
			||||||
                        marginFactor);
 | 
					                            marginFactor);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                contentStream.close();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            contentStream.close();
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return WebResponseUtils.pdfDocToWebResponse(
 | 
					        return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                document,
 | 
					                document,
 | 
				
			||||||
                Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_watermarked.pdf");
 | 
					                Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_stamped.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void addTextStamp(
 | 
					    private void addTextStamp(
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.pipeline;
 | 
					package stirling.software.SPDF.controller.api.pipeline;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import io.github.pixee.security.ZipSecurity;
 | 
					 | 
				
			||||||
import java.io.ByteArrayInputStream;
 | 
					import java.io.ByteArrayInputStream;
 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
@ -38,6 +36,9 @@ import org.springframework.util.MultiValueMap;
 | 
				
			|||||||
import org.springframework.web.client.RestTemplate;
 | 
					import org.springframework.web.client.RestTemplate;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
 | 
					import io.github.pixee.security.ZipSecurity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import jakarta.servlet.ServletContext;
 | 
					import jakarta.servlet.ServletContext;
 | 
				
			||||||
import stirling.software.SPDF.SPdfApplication;
 | 
					import stirling.software.SPDF.SPdfApplication;
 | 
				
			||||||
import stirling.software.SPDF.model.PipelineConfig;
 | 
					import stirling.software.SPDF.model.PipelineConfig;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.security;
 | 
					package stirling.software.SPDF.controller.api.security;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayInputStream;
 | 
					import java.io.ByteArrayInputStream;
 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
@ -43,6 +42,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -124,7 +124,9 @@ public class CertSignController {
 | 
				
			|||||||
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
 | 
					        ByteArrayOutputStream baos = new ByteArrayOutputStream();
 | 
				
			||||||
        sign(pdf.getBytes(), baos, createSignature, name, location, reason);
 | 
					        sign(pdf.getBytes(), baos, createSignature, name, location, reason);
 | 
				
			||||||
        return WebResponseUtils.boasToWebResponse(
 | 
					        return WebResponseUtils.boasToWebResponse(
 | 
				
			||||||
                baos, Filenames.toSimpleFileName(pdf.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_signed.pdf");
 | 
					                baos,
 | 
				
			||||||
 | 
					                Filenames.toSimpleFileName(pdf.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_signed.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static void sign(
 | 
					    private static void sign(
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.security;
 | 
					package stirling.software.SPDF.controller.api.security;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.apache.pdfbox.Loader;
 | 
					import org.apache.pdfbox.Loader;
 | 
				
			||||||
@ -16,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -44,7 +44,8 @@ public class PasswordController {
 | 
				
			|||||||
        document.setAllSecurityToBeRemoved(true);
 | 
					        document.setAllSecurityToBeRemoved(true);
 | 
				
			||||||
        return WebResponseUtils.pdfDocToWebResponse(
 | 
					        return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                document,
 | 
					                document,
 | 
				
			||||||
                Filenames.toSimpleFileName(fileInput.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
					                Filenames.toSimpleFileName(fileInput.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
                        + "_password_removed.pdf");
 | 
					                        + "_password_removed.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -89,10 +90,13 @@ public class PasswordController {
 | 
				
			|||||||
        if ("".equals(ownerPassword) && "".equals(password))
 | 
					        if ("".equals(ownerPassword) && "".equals(password))
 | 
				
			||||||
            return WebResponseUtils.pdfDocToWebResponse(
 | 
					            return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                    document,
 | 
					                    document,
 | 
				
			||||||
                    Filenames.toSimpleFileName(fileInput.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
					                    Filenames.toSimpleFileName(fileInput.getOriginalFilename())
 | 
				
			||||||
 | 
					                                    .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
                            + "_permissions.pdf");
 | 
					                            + "_permissions.pdf");
 | 
				
			||||||
        return WebResponseUtils.pdfDocToWebResponse(
 | 
					        return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                document,
 | 
					                document,
 | 
				
			||||||
                Filenames.toSimpleFileName(fileInput.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_passworded.pdf");
 | 
					                Filenames.toSimpleFileName(fileInput.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_passworded.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.security;
 | 
					package stirling.software.SPDF.controller.api.security;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.Color;
 | 
					import java.awt.Color;
 | 
				
			||||||
import java.awt.image.BufferedImage;
 | 
					import java.awt.image.BufferedImage;
 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
@ -26,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -105,7 +105,8 @@ public class RedactController {
 | 
				
			|||||||
        byte[] pdfContent = baos.toByteArray();
 | 
					        byte[] pdfContent = baos.toByteArray();
 | 
				
			||||||
        return WebResponseUtils.bytesToWebResponse(
 | 
					        return WebResponseUtils.bytesToWebResponse(
 | 
				
			||||||
                pdfContent,
 | 
					                pdfContent,
 | 
				
			||||||
                Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_redacted.pdf");
 | 
					                Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_redacted.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void redactFoundText(
 | 
					    private void redactFoundText(
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.security;
 | 
					package stirling.software.SPDF.controller.api.security;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.apache.pdfbox.Loader;
 | 
					import org.apache.pdfbox.Loader;
 | 
				
			||||||
@ -29,6 +28,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -77,7 +77,8 @@ public class SanitizeController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            return WebResponseUtils.pdfDocToWebResponse(
 | 
					            return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                    document,
 | 
					                    document,
 | 
				
			||||||
                    Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
 | 
					                    Filenames.toSimpleFileName(inputFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                    .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
                            + "_sanitized.pdf");
 | 
					                            + "_sanitized.pdf");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.controller.api.security;
 | 
					package stirling.software.SPDF.controller.api.security;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.Color;
 | 
					import java.awt.Color;
 | 
				
			||||||
import java.awt.image.BufferedImage;
 | 
					import java.awt.image.BufferedImage;
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
@ -32,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.Operation;
 | 
					import io.swagger.v3.oas.annotations.Operation;
 | 
				
			||||||
import io.swagger.v3.oas.annotations.tags.Tag;
 | 
					import io.swagger.v3.oas.annotations.tags.Tag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -106,7 +106,9 @@ public class WatermarkController {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return WebResponseUtils.pdfDocToWebResponse(
 | 
					        return WebResponseUtils.pdfDocToWebResponse(
 | 
				
			||||||
                document,
 | 
					                document,
 | 
				
			||||||
                Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_watermarked.pdf");
 | 
					                Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
 | 
				
			||||||
 | 
					                                .replaceFirst("[.][^.]+$", "")
 | 
				
			||||||
 | 
					                        + "_watermarked.pdf");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void addTextWatermark(
 | 
					    private void addTextWatermark(
 | 
				
			||||||
 | 
				
			|||||||
@ -6,11 +6,11 @@ import io.swagger.v3.oas.annotations.media.Schema;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import lombok.Data;
 | 
					import lombok.Data;
 | 
				
			||||||
import lombok.EqualsAndHashCode;
 | 
					import lombok.EqualsAndHashCode;
 | 
				
			||||||
import stirling.software.SPDF.model.api.PDFFile;
 | 
					import stirling.software.SPDF.model.api.PDFWithPageNums;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Data
 | 
					@Data
 | 
				
			||||||
@EqualsAndHashCode(callSuper = true)
 | 
					@EqualsAndHashCode(callSuper = true)
 | 
				
			||||||
public class AddStampRequest extends PDFFile {
 | 
					public class AddStampRequest extends PDFWithPageNums {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Schema(
 | 
					    @Schema(
 | 
				
			||||||
            description = "The stamp type (text or image)",
 | 
					            description = "The stamp type (text or image)",
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.utils;
 | 
					package stirling.software.SPDF.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.ZipSecurity;
 | 
					 | 
				
			||||||
import java.io.ByteArrayInputStream;
 | 
					import java.io.ByteArrayInputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.nio.charset.StandardCharsets;
 | 
					import java.nio.charset.StandardCharsets;
 | 
				
			||||||
@ -13,6 +12,8 @@ import java.util.stream.Stream;
 | 
				
			|||||||
import java.util.zip.ZipEntry;
 | 
					import java.util.zip.ZipEntry;
 | 
				
			||||||
import java.util.zip.ZipInputStream;
 | 
					import java.util.zip.ZipInputStream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.ZipSecurity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest;
 | 
					import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest;
 | 
				
			||||||
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
 | 
					import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -145,7 +146,8 @@ public class FileToPdf {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static Path unzipAndGetMainHtml(byte[] fileBytes) throws IOException {
 | 
					    private static Path unzipAndGetMainHtml(byte[] fileBytes) throws IOException {
 | 
				
			||||||
        Path tempDirectory = Files.createTempDirectory("unzipped_");
 | 
					        Path tempDirectory = Files.createTempDirectory("unzipped_");
 | 
				
			||||||
        try (ZipInputStream zipIn = ZipSecurity.createHardenedInputStream(new ByteArrayInputStream(fileBytes))) {
 | 
					        try (ZipInputStream zipIn =
 | 
				
			||||||
 | 
					                ZipSecurity.createHardenedInputStream(new ByteArrayInputStream(fileBytes))) {
 | 
				
			||||||
            ZipEntry entry = zipIn.getNextEntry();
 | 
					            ZipEntry entry = zipIn.getNextEntry();
 | 
				
			||||||
            while (entry != null) {
 | 
					            while (entry != null) {
 | 
				
			||||||
                Path filePath = tempDirectory.resolve(entry.getName());
 | 
					                Path filePath = tempDirectory.resolve(entry.getName());
 | 
				
			||||||
 | 
				
			|||||||
@ -1,13 +1,10 @@
 | 
				
			|||||||
package stirling.software.SPDF.utils;
 | 
					package stirling.software.SPDF.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.HostValidator;
 | 
					 | 
				
			||||||
import io.github.pixee.security.Urls;
 | 
					 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.FileOutputStream;
 | 
					import java.io.FileOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.io.InputStream;
 | 
					import java.io.InputStream;
 | 
				
			||||||
import java.net.MalformedURLException;
 | 
					import java.net.MalformedURLException;
 | 
				
			||||||
import java.net.URL;
 | 
					 | 
				
			||||||
import java.nio.file.FileVisitResult;
 | 
					import java.nio.file.FileVisitResult;
 | 
				
			||||||
import java.nio.file.Files;
 | 
					import java.nio.file.Files;
 | 
				
			||||||
import java.nio.file.Path;
 | 
					import java.nio.file.Path;
 | 
				
			||||||
@ -15,10 +12,14 @@ import java.nio.file.Paths;
 | 
				
			|||||||
import java.nio.file.SimpleFileVisitor;
 | 
					import java.nio.file.SimpleFileVisitor;
 | 
				
			||||||
import java.nio.file.attribute.BasicFileAttributes;
 | 
					import java.nio.file.attribute.BasicFileAttributes;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Collections;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.HostValidator;
 | 
				
			||||||
 | 
					import io.github.pixee.security.Urls;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class GeneralUtils {
 | 
					public class GeneralUtils {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
 | 
					    public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
 | 
				
			||||||
@ -59,7 +60,8 @@ public class GeneralUtils {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public static boolean isValidURL(String urlStr) {
 | 
					    public static boolean isValidURL(String urlStr) {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            Urls.create(urlStr, Urls.HTTP_PROTOCOLS, HostValidator.DENY_COMMON_INFRASTRUCTURE_TARGETS);
 | 
					            Urls.create(
 | 
				
			||||||
 | 
					                    urlStr, Urls.HTTP_PROTOCOLS, HostValidator.DENY_COMMON_INFRASTRUCTURE_TARGETS);
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        } catch (MalformedURLException e) {
 | 
					        } catch (MalformedURLException e) {
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
@ -114,6 +116,13 @@ public class GeneralUtils {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static List<Integer> parsePageString(String pageOrder, int totalPages) {
 | 
					    public static List<Integer> parsePageString(String pageOrder, int totalPages) {
 | 
				
			||||||
 | 
					        if (pageOrder == null || pageOrder.isEmpty()) {
 | 
				
			||||||
 | 
					            return Collections.singletonList(1);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (pageOrder.matches("\\d+")) {
 | 
				
			||||||
 | 
					            // Convert the single number string to an integer and return it in a list
 | 
				
			||||||
 | 
					            return Collections.singletonList(Integer.parseInt(pageOrder));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return parsePageList(pageOrder.split(","), totalPages);
 | 
					        return parsePageList(pageOrder.split(","), totalPages);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.utils;
 | 
					package stirling.software.SPDF.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.FileInputStream;
 | 
					import java.io.FileInputStream;
 | 
				
			||||||
@ -21,6 +20,8 @@ import org.springframework.http.MediaType;
 | 
				
			|||||||
import org.springframework.http.ResponseEntity;
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
 | 
					import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class PDFToFile {
 | 
					public class PDFToFile {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.utils;
 | 
					package stirling.software.SPDF.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.awt.Graphics;
 | 
					import java.awt.Graphics;
 | 
				
			||||||
import java.awt.image.BufferedImage;
 | 
					import java.awt.image.BufferedImage;
 | 
				
			||||||
import java.awt.image.RenderedImage;
 | 
					import java.awt.image.RenderedImage;
 | 
				
			||||||
@ -38,6 +37,8 @@ import org.slf4j.Logger;
 | 
				
			|||||||
import org.slf4j.LoggerFactory;
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class PdfUtils {
 | 
					public class PdfUtils {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class);
 | 
					    private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.utils;
 | 
					package stirling.software.SPDF.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.BoundedLineReader;
 | 
					 | 
				
			||||||
import java.io.BufferedReader;
 | 
					import java.io.BufferedReader;
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
@ -17,6 +16,8 @@ import java.util.concurrent.TimeUnit;
 | 
				
			|||||||
import org.slf4j.Logger;
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
import org.slf4j.LoggerFactory;
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.BoundedLineReader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class ProcessExecutor {
 | 
					public class ProcessExecutor {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger logger = LoggerFactory.getLogger(ProcessExecutor.class);
 | 
					    private static final Logger logger = LoggerFactory.getLogger(ProcessExecutor.class);
 | 
				
			||||||
@ -110,7 +111,10 @@ public class ProcessExecutor {
 | 
				
			|||||||
                                                        process.getErrorStream(),
 | 
					                                                        process.getErrorStream(),
 | 
				
			||||||
                                                        StandardCharsets.UTF_8))) {
 | 
					                                                        StandardCharsets.UTF_8))) {
 | 
				
			||||||
                                    String line;
 | 
					                                    String line;
 | 
				
			||||||
                                    while ((line = BoundedLineReader.readLine(errorReader, 5_000_000)) != null) {
 | 
					                                    while ((line =
 | 
				
			||||||
 | 
					                                                    BoundedLineReader.readLine(
 | 
				
			||||||
 | 
					                                                            errorReader, 5_000_000))
 | 
				
			||||||
 | 
					                                            != null) {
 | 
				
			||||||
                                        errorLines.add(line);
 | 
					                                        errorLines.add(line);
 | 
				
			||||||
                                        if (liveUpdates) logger.info(line);
 | 
					                                        if (liveUpdates) logger.info(line);
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
@ -131,7 +135,10 @@ public class ProcessExecutor {
 | 
				
			|||||||
                                                        process.getInputStream(),
 | 
					                                                        process.getInputStream(),
 | 
				
			||||||
                                                        StandardCharsets.UTF_8))) {
 | 
					                                                        StandardCharsets.UTF_8))) {
 | 
				
			||||||
                                    String line;
 | 
					                                    String line;
 | 
				
			||||||
                                    while ((line = BoundedLineReader.readLine(outputReader, 5_000_000)) != null) {
 | 
					                                    while ((line =
 | 
				
			||||||
 | 
					                                                    BoundedLineReader.readLine(
 | 
				
			||||||
 | 
					                                                            outputReader, 5_000_000))
 | 
				
			||||||
 | 
					                                            != null) {
 | 
				
			||||||
                                        outputLines.add(line);
 | 
					                                        outputLines.add(line);
 | 
				
			||||||
                                        if (liveUpdates) logger.info(line);
 | 
					                                        if (liveUpdates) logger.info(line);
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package stirling.software.SPDF.utils;
 | 
					package stirling.software.SPDF.utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import io.github.pixee.security.Filenames;
 | 
					 | 
				
			||||||
import java.io.ByteArrayOutputStream;
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.net.URLEncoder;
 | 
					import java.net.URLEncoder;
 | 
				
			||||||
@ -13,6 +12,8 @@ import org.springframework.http.MediaType;
 | 
				
			|||||||
import org.springframework.http.ResponseEntity;
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
import org.springframework.web.multipart.MultipartFile;
 | 
					import org.springframework.web.multipart.MultipartFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import io.github.pixee.security.Filenames;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class WebResponseUtils {
 | 
					public class WebResponseUtils {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static ResponseEntity<byte[]> boasToWebResponse(
 | 
					    public static ResponseEntity<byte[]> boasToWebResponse(
 | 
				
			||||||
 | 
				
			|||||||
@ -14,13 +14,16 @@ function initializeGame() {
 | 
				
			|||||||
    const highScoreElement = document.getElementById('high-score');
 | 
					    const highScoreElement = document.getElementById('high-score');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let pdfSize = gameContainer.clientWidth * 0.0625; // 5% of container width
 | 
					    let pdfSize = gameContainer.clientWidth * 0.0625; // 5% of container width
 | 
				
			||||||
    let projectileWidth = gameContainer.clientWidth * 0.00625; // 0.5% of container width
 | 
					    let projectileWidth = gameContainer.clientWidth *  0.00625;// 0.00625; // 0.5% of container width
 | 
				
			||||||
    let projectileHeight = gameContainer.clientHeight * 0.01667; // 1% of container height
 | 
					    let projectileHeight = gameContainer.clientHeight * 0.01667; // 1% of container height
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let paused = false;
 | 
					    let paused = false;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    const fireRate = 200; // Time between shots in milliseconds
 | 
					    const fireRate = 200; // Time between shots in milliseconds
 | 
				
			||||||
    let lastProjectileTime = 0;
 | 
					    let lastProjectileTime = 0;
 | 
				
			||||||
    let lives = 3;
 | 
					    let lives = 3;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    let highScore = localStorage.getItem('highScore') ? parseInt(localStorage.getItem('highScore')) : 0;
 | 
					    let highScore = localStorage.getItem('highScore') ? parseInt(localStorage.getItem('highScore')) : 0;
 | 
				
			||||||
    updateHighScore();
 | 
					    updateHighScore();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -31,7 +34,7 @@ function initializeGame() {
 | 
				
			|||||||
    const projectiles = [];
 | 
					    const projectiles = [];
 | 
				
			||||||
    let score = 0;
 | 
					    let score = 0;
 | 
				
			||||||
    let level = 1;
 | 
					    let level = 1;
 | 
				
			||||||
    let pdfSpeed = 1;
 | 
					    let pdfSpeed = 0.5;
 | 
				
			||||||
    let gameOver = false;
 | 
					    let gameOver = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function handleKeys() {
 | 
					    function handleKeys() {
 | 
				
			||||||
@ -119,7 +122,7 @@ function initializeGame() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        for (let pdfIndex = 0; pdfIndex < pdfs.length; pdfIndex++) {
 | 
					        for (let pdfIndex = 0; pdfIndex < pdfs.length; pdfIndex++) {
 | 
				
			||||||
            const pdf = pdfs[pdfIndex];
 | 
					            const pdf = pdfs[pdfIndex];
 | 
				
			||||||
            const pdfY = parseInt(pdf.style.top) + pdfSpeed;
 | 
					            const pdfY = parseFloat(pdf.style.top) + pdfSpeed;
 | 
				
			||||||
            if (pdfY + 50 > gameContainer.clientHeight) {
 | 
					            if (pdfY + 50 > gameContainer.clientHeight) {
 | 
				
			||||||
                gameContainer.removeChild(pdf);
 | 
					                gameContainer.removeChild(pdf);
 | 
				
			||||||
                pdfs.splice(pdfIndex, 1);
 | 
					                pdfs.splice(pdfIndex, 1);
 | 
				
			||||||
@ -218,7 +221,7 @@ function initializeGame() {
 | 
				
			|||||||
        if (newLevel > level) {
 | 
					        if (newLevel > level) {
 | 
				
			||||||
            level = newLevel;
 | 
					            level = newLevel;
 | 
				
			||||||
            levelElement.textContent = 'Level: ' + level;
 | 
					            levelElement.textContent = 'Level: ' + level;
 | 
				
			||||||
            pdfSpeed += 1;
 | 
					            pdfSpeed += 0.2;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -249,6 +252,10 @@ function initializeGame() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    let spawnPdfTimeout;
 | 
					    let spawnPdfTimeout;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const BASE_SPAWN_INTERVAL_MS = 1250; // milliseconds before a new enemy spawns
 | 
				
			||||||
 | 
						const LEVEL_INCREASE_FACTOR_MS = 0; // milliseconds to decrease the spawn interval per level
 | 
				
			||||||
 | 
						const MAX_SPAWN_RATE_REDUCTION_MS = 800; // Max milliseconds from the base spawn interval
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function spawnPdfInterval() {
 | 
					    function spawnPdfInterval() {
 | 
				
			||||||
         console.log("spawnPdfInterval");
 | 
					         console.log("spawnPdfInterval");
 | 
				
			||||||
        if (gameOver || paused) {
 | 
					        if (gameOver || paused) {
 | 
				
			||||||
@ -258,7 +265,9 @@ function initializeGame() {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        console.log("spawnPdfInterval 3");
 | 
					        console.log("spawnPdfInterval 3");
 | 
				
			||||||
        spawnPdf();
 | 
					        spawnPdf();
 | 
				
			||||||
        spawnPdfTimeout = setTimeout(spawnPdfInterval, 1000 - level * 50);
 | 
					        let spawnRateReduction = Math.min(level * LEVEL_INCREASE_FACTOR_MS, MAX_SPAWN_RATE_REDUCTION_MS);
 | 
				
			||||||
 | 
						    let spawnRate = BASE_SPAWN_INTERVAL_MS - spawnRateReduction;
 | 
				
			||||||
 | 
						    spawnPdfTimeout = setTimeout(spawnPdfInterval, spawnRate);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    updatePlayerPosition();
 | 
					    updatePlayerPosition();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user