thirs party js folder
This commit is contained in:
parent
15d39413f3
commit
6793fd5bc7
13 changed files with 87 additions and 26 deletions
|
@ -26,7 +26,8 @@ import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
@RestController
|
@RestController
|
||||||
public class ScalePagesController {
|
public class ScalePagesController {
|
||||||
|
|
||||||
|
@ -34,15 +35,49 @@ public class ScalePagesController {
|
||||||
|
|
||||||
@PostMapping(value = "/scale-pages", consumes = "multipart/form-data")
|
@PostMapping(value = "/scale-pages", consumes = "multipart/form-data")
|
||||||
@Operation(summary = "Change the size of a PDF page/document", description = "This operation takes an input PDF file and the size to scale the pages to in the output PDF file.")
|
@Operation(summary = "Change the size of a PDF page/document", description = "This operation takes an input PDF file and the size to scale the pages to in the output PDF file.")
|
||||||
public ResponseEntity<byte[]> mergeMultiplePagesIntoOne(
|
public ResponseEntity<byte[]> scalePages(
|
||||||
@Parameter(description = "The input PDF file", required = true) @RequestParam("fileInput") MultipartFile file,
|
@Parameter(description = "The input PDF file", required = true) @RequestParam("fileInput") MultipartFile file,
|
||||||
@Parameter(description = "The scale of pages in the output PDF. Acceptable values are A4.", required = true, schema = @Schema(type = "String", allowableValues = { "A4" })) @RequestParam("pageSize") String targetPageSize,
|
@Parameter(description = "The scale of pages in the output PDF. Acceptable values are A0-A10, B0-B9, LETTER, TABLOID, LEDGER, LEGAL, EXECUTIVE.", required = true, schema = @Schema(type = "String", allowableValues = { "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "LETTER", "TABLOID", "LEDGER", "LEGAL", "EXECUTIVE" })) @RequestParam("pageSize") String targetPageSize,
|
||||||
@Parameter(description = "The scale of the content on the pages of the output PDF. Acceptable values are floats.", required = true, schema = @Schema(type = "float")) @RequestParam("scaleFactor") float scaleFactor)
|
@Parameter(description = "The scale of the content on the pages of the output PDF. Acceptable values are floats.", required = true, schema = @Schema(type = "float")) @RequestParam("scaleFactor") float scaleFactor)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
if (!targetPageSize.equals("A4")) {
|
Map<String, PageSize> sizeMap = new HashMap<>();
|
||||||
throw new IllegalArgumentException("pageSize must be A4");
|
// Add A0 - A10
|
||||||
}
|
sizeMap.put("A0", PageSize.A0);
|
||||||
|
sizeMap.put("A1", PageSize.A1);
|
||||||
|
sizeMap.put("A2", PageSize.A2);
|
||||||
|
sizeMap.put("A3", PageSize.A3);
|
||||||
|
sizeMap.put("A4", PageSize.A4);
|
||||||
|
sizeMap.put("A5", PageSize.A5);
|
||||||
|
sizeMap.put("A6", PageSize.A6);
|
||||||
|
sizeMap.put("A7", PageSize.A7);
|
||||||
|
sizeMap.put("A8", PageSize.A8);
|
||||||
|
sizeMap.put("A9", PageSize.A9);
|
||||||
|
sizeMap.put("A10", PageSize.A10);
|
||||||
|
// Add B0 - B9
|
||||||
|
sizeMap.put("B0", PageSize.B0);
|
||||||
|
sizeMap.put("B1", PageSize.B1);
|
||||||
|
sizeMap.put("B2", PageSize.B2);
|
||||||
|
sizeMap.put("B3", PageSize.B3);
|
||||||
|
sizeMap.put("B4", PageSize.B4);
|
||||||
|
sizeMap.put("B5", PageSize.B5);
|
||||||
|
sizeMap.put("B6", PageSize.B6);
|
||||||
|
sizeMap.put("B7", PageSize.B7);
|
||||||
|
sizeMap.put("B8", PageSize.B8);
|
||||||
|
sizeMap.put("B9", PageSize.B9);
|
||||||
|
// Add other sizes
|
||||||
|
sizeMap.put("LETTER", PageSize.LETTER);
|
||||||
|
sizeMap.put("TABLOID", PageSize.TABLOID);
|
||||||
|
sizeMap.put("LEDGER", PageSize.LEDGER);
|
||||||
|
sizeMap.put("LEGAL", PageSize.LEGAL);
|
||||||
|
sizeMap.put("EXECUTIVE", PageSize.EXECUTIVE);
|
||||||
|
|
||||||
|
if (!sizeMap.containsKey(targetPageSize)) {
|
||||||
|
throw new IllegalArgumentException("Invalid pageSize. It must be one of the following: A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10");
|
||||||
|
}
|
||||||
|
|
||||||
|
PageSize pageSize = sizeMap.get(targetPageSize);
|
||||||
|
|
||||||
|
|
||||||
byte[] bytes = file.getBytes();
|
byte[] bytes = file.getBytes();
|
||||||
PdfReader reader = new PdfReader(new ByteArrayInputStream(bytes));
|
PdfReader reader = new PdfReader(new ByteArrayInputStream(bytes));
|
||||||
|
@ -51,9 +86,9 @@ public class ScalePagesController {
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
PdfWriter writer = new PdfWriter(baos);
|
PdfWriter writer = new PdfWriter(baos);
|
||||||
PdfDocument outputPdf = new PdfDocument(writer);
|
PdfDocument outputPdf = new PdfDocument(writer);
|
||||||
|
|
||||||
PageSize pageSize = new PageSize(PageSize.A4); // TODO: This (and all other PageSize.A4) need to be dynamically changed in response to targetPageSize
|
|
||||||
|
|
||||||
int totalPages = pdfDoc.getNumberOfPages();
|
int totalPages = pdfDoc.getNumberOfPages();
|
||||||
|
|
||||||
for (int i = 1; i <= totalPages; i++) {
|
for (int i = 1; i <= totalPages; i++) {
|
||||||
|
@ -62,14 +97,14 @@ public class ScalePagesController {
|
||||||
|
|
||||||
// Get the page and calculate scaling factors
|
// Get the page and calculate scaling factors
|
||||||
Rectangle rect = pdfDoc.getPage(i).getPageSize();
|
Rectangle rect = pdfDoc.getPage(i).getPageSize();
|
||||||
float scaleWidth = PageSize.A4.getWidth() / rect.getWidth();
|
float scaleWidth = pageSize.getWidth() / rect.getWidth();
|
||||||
float scaleHeight = PageSize.A4.getHeight() / rect.getHeight();
|
float scaleHeight = pageSize.getHeight() / rect.getHeight();
|
||||||
float scale = Math.min(scaleWidth, scaleHeight) * scaleFactor;
|
float scale = Math.min(scaleWidth, scaleHeight) * scaleFactor;
|
||||||
System.out.println("Scale: " + scale);
|
System.out.println("Scale: " + scale);
|
||||||
|
|
||||||
PdfFormXObject formXObject = pdfDoc.getPage(i).copyAsFormXObject(outputPdf);
|
PdfFormXObject formXObject = pdfDoc.getPage(i).copyAsFormXObject(outputPdf);
|
||||||
float x = (PageSize.A4.getWidth() - rect.getWidth() * scale) / 2; // Center Page
|
float x = (pageSize.getWidth() - rect.getWidth() * scale) / 2; // Center Page
|
||||||
float y = (PageSize.A4.getHeight() - rect.getHeight() * scale) / 2;
|
float y = (pageSize.getHeight() - rect.getHeight() * scale) / 2;
|
||||||
|
|
||||||
// Save the graphics state, apply the transformations, add the object, and then
|
// Save the graphics state, apply the transformations, add the object, and then
|
||||||
// restore the graphics state
|
// restore the graphics state
|
||||||
|
|
|
@ -132,7 +132,7 @@ home.pageLayout.title=Multi-Page Layout
|
||||||
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
|
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
|
||||||
|
|
||||||
home.scalePages.title=Adjust page-scale
|
home.scalePages.title=Adjust page-scale
|
||||||
home.scalePages.desc=Change the size of the pages of a PDF document
|
home.scalePages.desc=Change the size of page contents while maintaining a set page-size
|
||||||
|
|
||||||
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
|
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
|
||||||
|
|
||||||
|
|
|
@ -8,14 +8,14 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
<!-- jQuery -->
|
<!-- jQuery -->
|
||||||
<script src="js/jquery.min.js"></script>
|
<script src="js/thirdParty/jquery.min.js"></script>
|
||||||
|
|
||||||
<!-- jQuery -->
|
<!-- jQuery -->
|
||||||
<script src="js/jszip.min.js"></script>
|
<script src="js/thirdParty/jszip.min.js"></script>
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
<!-- Bootstrap -->
|
||||||
<script src="js/popper.min.js"></script>
|
<script src="js/thirdParty/popper.min.js"></script>
|
||||||
<script src="js/bootstrap.min.js"></script>
|
<script src="js/thirdParty/bootstrap.min.js"></script>
|
||||||
<link rel="stylesheet" href="css/bootstrap.min.css">
|
<link rel="stylesheet" href="css/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="css/bootstrap-icons.css">
|
<link rel="stylesheet" href="css/bootstrap-icons.css">
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
<script src="pdfjs/pdf.js"></script>
|
<script src="pdfjs/pdf.js"></script>
|
||||||
|
|
||||||
<!-- PDF-Lib -->
|
<!-- PDF-Lib -->
|
||||||
<script src="js/pdf-lib.min.js"></script>
|
<script src="js/thirdParty/pdf-lib.min.js"></script>
|
||||||
|
|
||||||
<!-- Custom -->
|
<!-- Custom -->
|
||||||
<link rel="stylesheet" href="css/general.css">
|
<link rel="stylesheet" href="css/general.css">
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<th:block th:insert="~{fragments/common :: head(title=#{addImage.title})}"></th:block>
|
<th:block th:insert="~{fragments/common :: head(title=#{addImage.title})}"></th:block>
|
||||||
<script src="js/interact.min.js"></script>
|
<script src="js/thirdParty/interact.min.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -19,7 +19,33 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="pageSize" th:text="#{scalePages.pageSize}"></label>
|
<label for="pageSize" th:text="#{scalePages.pageSize}"></label>
|
||||||
<select id="pageSize" name="pageSize" required>
|
<select id="pageSize" name="pageSize" required>
|
||||||
<option value="A4">A4</option>
|
|
||||||
|
<option value="A0">A0</option>
|
||||||
|
<option value="A1">A1</option>
|
||||||
|
<option value="A2">A2</option>
|
||||||
|
<option value="A3">A3</option>
|
||||||
|
<option value="A4" selected>A4</option>
|
||||||
|
<option value="A5">A5</option>
|
||||||
|
<option value="A6">A6</option>
|
||||||
|
<option value="A7">A7</option>
|
||||||
|
<option value="A8">A8</option>
|
||||||
|
<option value="A9">A9</option>
|
||||||
|
<option value="A10">A10</option>
|
||||||
|
<option value="B0">B0</option>
|
||||||
|
<option value="B1">B1</option>
|
||||||
|
<option value="B2">B2</option>
|
||||||
|
<option value="B3">B3</option>
|
||||||
|
<option value="B4">B4</option>
|
||||||
|
<option value="B5">B5</option>
|
||||||
|
<option value="B6">B6</option>
|
||||||
|
<option value="B7">B7</option>
|
||||||
|
<option value="B8">B8</option>
|
||||||
|
<option value="B9">B9</option>
|
||||||
|
<option value="LETTER">Letter</option>
|
||||||
|
<option value="LEGAL">Legal</option>
|
||||||
|
<option value="EXECUTIVE">Executive</option>
|
||||||
|
<option value="TABLOID">Tabloid</option>
|
||||||
|
<option value="LEDGER">Ledger</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<th:block th:insert="~{fragments/common :: head(title=#{sign.title})}"></th:block>
|
<th:block th:insert="~{fragments/common :: head(title=#{sign.title})}"></th:block>
|
||||||
<script src="js/signature_pad.umd.min.js"></script>
|
<script src="js/thirdParty/signature_pad.umd.min.js"></script>
|
||||||
<script src="js/interact.min.js"></script>
|
<script src="js/thirdParty/interact.min.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<style>
|
<style>
|
||||||
|
|
Loading…
Reference in a new issue