mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-10-25 11:17:28 +02:00 
			
		
		
		
	Added option to split PDF into multiple parts and merge into one PDF (#841)
* Added option to split PDF into multiple parts and merge into one PDF * Use the mergeDocuments method in MergeController to implement merging --------- Co-authored-by: Eric <71648843+sbplat@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									af68c70239
								
							
						
					
					
						commit
						c8a37245fa
					
				| @ -6,7 +6,8 @@ | ||||
|       "parameters": { | ||||
|         "horizontalDivisions": 2, | ||||
|         "verticalDivisions": 2, | ||||
|         "fileInput": "automated" | ||||
|         "fileInput": "automated", | ||||
|         "merge": false | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
| @ -30,4 +31,4 @@ | ||||
|   }, | ||||
|   "outputDir": "{outputFolder}", | ||||
|   "outputFileName": "{filename}" | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -38,7 +38,7 @@ public class MergeController { | ||||
| 
 | ||||
|     private static final Logger logger = LoggerFactory.getLogger(MergeController.class); | ||||
| 
 | ||||
|     private PDDocument mergeDocuments(List<PDDocument> documents) throws IOException { | ||||
|     public PDDocument mergeDocuments(List<PDDocument> documents) throws IOException { | ||||
|         PDDocument mergedDoc = new PDDocument(); | ||||
|         for (PDDocument doc : documents) { | ||||
|             for (PDPage page : doc.getPages()) { | ||||
|  | ||||
| @ -53,8 +53,21 @@ public class SplitPdfBySectionsController { | ||||
|         // Process the PDF based on split parameters | ||||
|         int horiz = request.getHorizontalDivisions() + 1; | ||||
|         int verti = request.getVerticalDivisions() + 1; | ||||
| 
 | ||||
|         boolean merge = request.isMerge(); | ||||
|         List<PDDocument> splitDocuments = splitPdfPages(sourceDocument, verti, horiz); | ||||
| 
 | ||||
|         String filename = | ||||
|                 Filenames.toSimpleFileName(file.getOriginalFilename()) | ||||
|                         .replaceFirst("[.][^.]+$", ""); | ||||
|         if (merge) { | ||||
|             MergeController mergeController = new MergeController(); | ||||
|             ByteArrayOutputStream baos = new ByteArrayOutputStream(); | ||||
|             mergeController.mergeDocuments(splitDocuments).save(baos); | ||||
|             return WebResponseUtils.bytesToWebResponse( | ||||
|                     baos.toByteArray(), | ||||
|                     filename + "_split.pdf", | ||||
|                     MediaType.APPLICATION_OCTET_STREAM); | ||||
|         } | ||||
|         for (PDDocument doc : splitDocuments) { | ||||
|             ByteArrayOutputStream baos = new ByteArrayOutputStream(); | ||||
|             doc.save(baos); | ||||
| @ -65,9 +78,6 @@ public class SplitPdfBySectionsController { | ||||
|         sourceDocument.close(); | ||||
| 
 | ||||
|         Path zipFile = Files.createTempFile("split_documents", ".zip"); | ||||
|         String filename = | ||||
|                 Filenames.toSimpleFileName(file.getOriginalFilename()) | ||||
|                         .replaceFirst("[.][^.]+$", ""); | ||||
|         byte[] data; | ||||
| 
 | ||||
|         try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) { | ||||
| @ -145,4 +155,5 @@ public class SplitPdfBySectionsController { | ||||
| 
 | ||||
|         return splitDocuments; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -15,4 +15,7 @@ public class SplitPdfBySectionsRequest extends PDFFile { | ||||
| 
 | ||||
|     @Schema(description = "Number of vertical divisions for each PDF page", example = "2") | ||||
|     private int verticalDivisions; | ||||
| 
 | ||||
|     @Schema(description = "Merge the split documents into a single PDF", example = "true") | ||||
|     private boolean merge; | ||||
| } | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertikale Teiler | ||||
| split-by-sections.horizontal.placeholder=Anzahl horizontaler Teiler eingeben | ||||
| split-by-sections.vertical.placeholder=Anzahl vertikaler Teiler eingeben | ||||
| split-by-sections.submit=PDF teilen | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Lizenzen | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Divisiones Verticales | ||||
| split-by-sections.horizontal.placeholder=Introduzca el número de divisiones horizontales | ||||
| split-by-sections.vertical.placeholder=Introduzca el número de divisiones verticales | ||||
| split-by-sections.submit=Dividir PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licencias | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Divisions verticales | ||||
| split-by-sections.horizontal.placeholder=Saisir le nombre de divisions horizontales | ||||
| split-by-sections.vertical.placeholder=Entrer le nombre de divisions verticales | ||||
| split-by-sections.submit=Diviser le PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licences | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=लंबवत विभाजन | ||||
| split-by-sections.horizontal.placeholder=क्षैतिज विभाजन की संख्या दर्ज करें | ||||
| split-by-sections.vertical.placeholder=लंबवत विभाजन की संख्या दर्ज करें | ||||
| split-by-sections.submit=PDF को विभाजित करें | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vízszintes szakaszok | ||||
| split-by-sections.horizontal.placeholder=Adja meg a vízszintes szakaszok számát | ||||
| split-by-sections.vertical.placeholder=Adja meg a függőleges szakaszok számát | ||||
| split-by-sections.submit=Felosztás | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Pembagian Vertikal | ||||
| split-by-sections.horizontal.placeholder=Input angka untuk pembagian horizontal | ||||
| split-by-sections.vertical.placeholder=Input angka untuk pembagian vertikal | ||||
| split-by-sections.submit=Pisahkan PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Divisioni verticali | ||||
| split-by-sections.horizontal.placeholder=Inserire il numero di divisioni orizzontali | ||||
| split-by-sections.vertical.placeholder=Inserire il numero di divisioni verticali | ||||
| split-by-sections.submit=Dividi PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenze | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=垂直方向 | ||||
| split-by-sections.horizontal.placeholder=水平方向の分割数を選択 | ||||
| split-by-sections.vertical.placeholder=垂直方向の分割数を選択 | ||||
| split-by-sections.submit=分割 | ||||
| 
 | ||||
| split-by-sections.merge=1 つの PDF に結合するかどうか | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=ライセンス | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Verticale secties | ||||
| split-by-sections.horizontal.placeholder=Voer het aantal horizontale secties in | ||||
| split-by-sections.vertical.placeholder=Voer het aantal verticale secties in | ||||
| split-by-sections.submit=PDF splitsen | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenties | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -958,7 +958,7 @@ split-by-sections.vertical.label=Divisões Verticais | ||||
| split-by-sections.horizontal.placeholder=Introduza o número de divisões horizontais | ||||
| split-by-sections.vertical.placeholder=Introduza o número de divisões verticais | ||||
| split-by-sections.submit=Dividir PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenças | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertikalne podele | ||||
| split-by-sections.horizontal.placeholder=Unesite broj horizontalnih podele | ||||
| split-by-sections.vertical.placeholder=Unesite broj vertikalnih podele | ||||
| split-by-sections.submit=Razdvoji PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=Vertical Divisions | ||||
| split-by-sections.horizontal.placeholder=Enter number of horizontal divisions | ||||
| split-by-sections.vertical.placeholder=Enter number of vertical divisions | ||||
| split-by-sections.submit=Split PDF | ||||
| 
 | ||||
| split-by-sections.merge=Merge Into One PDF | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=垂直分割 | ||||
| split-by-sections.horizontal.placeholder=输入水平分割数 | ||||
| split-by-sections.vertical.placeholder=输入垂直分割数 | ||||
| split-by-sections.submit=分割PDF | ||||
| 
 | ||||
| split-by-sections.merge=是否合并为一个pdf | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -960,7 +960,7 @@ split-by-sections.vertical.label=垂直劃分 | ||||
| split-by-sections.horizontal.placeholder=輸入水平劃分的數量 | ||||
| split-by-sections.vertical.placeholder=輸入垂直劃分的數量 | ||||
| split-by-sections.submit=分割 PDF | ||||
| 
 | ||||
| split-by-sections.merge=是否合併為一個pdf | ||||
| 
 | ||||
| #licenses | ||||
| licenses.nav=Licenses | ||||
|  | ||||
| @ -23,6 +23,9 @@ | ||||
|                   <label for="verticalDivisions" th:text="#{split-by-sections.vertical.label}">Vertical Divisions</label> | ||||
|                   <input type="number" id="verticalDivisions" name="verticalDivisions" class="form-control" min="0" max="300" required value="1" th:placeholder="#{split-by-sections.vertical.placeholder}"> | ||||
|                   <br> | ||||
|                   <label for="verticalDivisions" th:text="#{split-by-sections.merge}">merge PDFs into one</label> | ||||
|                   <input type="checkbox" id="merge" name="merge" th:placeholder="#{split-by-sections.merge}"> | ||||
|                   <br> | ||||
|                   <div id="pdfVisualAid" class="pdf-visual-aid"></div> | ||||
|                   <script> | ||||
|                     function updateVisualAid() { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user