From 6ec2e1de3ab5a3615e798a6aae857e0b0a1f2ea6 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 11 Feb 2023 14:05:37 +0000 Subject: [PATCH] changes --- .../SPDF/controller/ContrastController.java | 29 ---- .../security/MetadataController.java | 151 +++++++++--------- src/main/resources/messages_ar_AR.properties | 20 ++- src/main/resources/messages_de_DE.properties | 18 ++- src/main/resources/messages_en_GB.properties | 32 ++-- src/main/resources/messages_en_US.properties | 30 ++-- src/main/resources/messages_fr_FR.properties | 20 ++- .../resources/templates/adjust-contrast.html | 36 ----- .../templates/security/change-metadata.html | 147 ++++++++++------- 9 files changed, 265 insertions(+), 218 deletions(-) delete mode 100644 src/main/java/stirling/software/SPDF/controller/ContrastController.java delete mode 100644 src/main/resources/templates/adjust-contrast.html diff --git a/src/main/java/stirling/software/SPDF/controller/ContrastController.java b/src/main/java/stirling/software/SPDF/controller/ContrastController.java deleted file mode 100644 index 5485fb610..000000000 --- a/src/main/java/stirling/software/SPDF/controller/ContrastController.java +++ /dev/null @@ -1,29 +0,0 @@ -package stirling.software.SPDF.controller; - -import java.io.IOException; - -import org.apache.pdfbox.pdmodel.PDDocument; -import org.apache.pdfbox.pdmodel.PDPage; -import org.apache.pdfbox.pdmodel.PDPageContentStream; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.multipart.MultipartFile; - -import stirling.software.SPDF.utils.PdfUtils; - -@Controller -public class ContrastController { - - @GetMapping("/adjust-contrast") - public String adjustContrastMain(Model model) { - model.addAttribute("currentPage", "adjustContrast"); - return "adjust-contrast"; - } - - - -} diff --git a/src/main/java/stirling/software/SPDF/controller/security/MetadataController.java b/src/main/java/stirling/software/SPDF/controller/security/MetadataController.java index aca292a5a..f8b1178f0 100644 --- a/src/main/java/stirling/software/SPDF/controller/security/MetadataController.java +++ b/src/main/java/stirling/software/SPDF/controller/security/MetadataController.java @@ -9,6 +9,7 @@ import java.util.Map.Entry; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.common.PDMetadata; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -28,40 +29,74 @@ public class MetadataController { return "security/change-metadata"; } + private String checkUndefined(String entry) { + // Check if the string is "undefined" + if("undefined".equals(entry)) { + // Return null if it is + return null; + } + // Return the original string if it's not "undefined" + return entry; + + } @PostMapping("/update-metadata") public ResponseEntity metadata(@RequestParam("fileInput") MultipartFile pdfFile, - @RequestParam(value = "deleteAll", required = false, defaultValue = "false") Boolean deleteAll, - @RequestParam(value = "author", required = false) String author, - @RequestParam(value = "creationDate", required = false) String creationDate, - @RequestParam(value = "creator", required = false) String creator, - @RequestParam(value = "keywords", required = false) String keywords, - @RequestParam(value = "modificationDate", required = false) String modificationDate, - @RequestParam(value = "producer", required = false) String producer, - @RequestParam(value = "subject", required = false) String subject, - @RequestParam(value = "title", required = false) String title, - @RequestParam(value = "trapped", required = false) String trapped, + @RequestParam(value = "deleteAll", required = false, defaultValue = "false") Boolean deleteAll, @RequestParam(value = "author", required = false) String author, + @RequestParam(value = "creationDate", required = false) String creationDate, @RequestParam(value = "creator", required = false) String creator, + @RequestParam(value = "keywords", required = false) String keywords, @RequestParam(value = "modificationDate", required = false) String modificationDate, + @RequestParam(value = "producer", required = false) String producer, @RequestParam(value = "subject", required = false) String subject, + @RequestParam(value = "title", required = false) String title, @RequestParam(value = "trapped", required = false) String trapped, @RequestParam Map allRequestParams) throws IOException { - System.out.println("1 allRequestParams.size() = " + allRequestParams.size()); - for (Entry entry : allRequestParams.entrySet()) { - System.out.println("1 key=" + entry.getKey() + ", value=" + entry.getValue()); - } - + // Load the PDF file into a PDDocument PDDocument document = PDDocument.load(pdfFile.getBytes()); - - // Remove all metadata based on flag + + // Get the document information from the PDF PDDocumentInformation info = document.getDocumentInformation(); - if(deleteAll) { + // Check if each metadata value is "undefined" and set it to null if it is + author = checkUndefined(author); + creationDate = checkUndefined(creationDate); + creator = checkUndefined(creator); + keywords = checkUndefined(keywords); + modificationDate = checkUndefined(modificationDate); + producer = checkUndefined(producer); + subject = checkUndefined(subject); + title = checkUndefined(title); + trapped = checkUndefined(trapped); + + // If the "deleteAll" flag is set, remove all metadata from the document information + if (deleteAll) { for (String key : info.getMetadataKeys()) { info.setCustomMetadataValue(key, null); - } + } + author = null; + creationDate = null; + creator = null; + keywords = null; + modificationDate = null; + producer = null; + subject = null; + title = null; + trapped = null; } else { - if(author != null && author.length() > 0) { - info.setAuthor(author); + // Iterate through the request parameters and set the metadata values + for (Entry entry : allRequestParams.entrySet()) { + String key = entry.getKey(); + // Check if the key is a standard metadata key + if (!key.equalsIgnoreCase("Author") && !key.equalsIgnoreCase("CreationDate") && !key.equalsIgnoreCase("Creator") && !key.equalsIgnoreCase("Keywords") + && !key.equalsIgnoreCase("modificationDate") && !key.equalsIgnoreCase("Producer") && !key.equalsIgnoreCase("Subject") && !key.equalsIgnoreCase("Title") + && !key.equalsIgnoreCase("Trapped") && !key.contains("customKey") && !key.contains("customValue")) { + info.setCustomMetadataValue(key, entry.getValue()); + } else if (key.contains("customKey")) { + int number = Integer.parseInt(key.replaceAll("\\D", "")); + String customKey = entry.getValue(); + String customValue = allRequestParams.get("customValue" + number); + info.setCustomMetadataValue(customKey, customValue); + } + } } - - if(creationDate != null && creationDate.length() > 0) { + if (creationDate != null && creationDate.length() > 0) { Calendar creationDateCal = Calendar.getInstance(); try { creationDateCal.setTime(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse(creationDate)); @@ -69,14 +104,10 @@ public class MetadataController { e.printStackTrace(); } info.setCreationDate(creationDateCal); + } else { + info.setCreationDate(null); } - if(creator != null && creator.length() > 0) { - info.setCreator(creator); - } - if(keywords != null && keywords.length() > 0) { - info.setKeywords(keywords); - } - if(modificationDate != null && modificationDate.length() > 0) { + if (modificationDate != null && modificationDate.length() > 0) { Calendar modificationDateCal = Calendar.getInstance(); try { modificationDateCal.setTime(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse(modificationDate)); @@ -84,53 +115,21 @@ public class MetadataController { e.printStackTrace(); } info.setModificationDate(modificationDateCal); + } else { + info.setModificationDate(null); } - if(producer != null && producer.length() > 0) { - info.setProducer(producer); - } - if(subject != null && subject.length() > 0) { - info.setSubject(subject); - } - if(title != null && title.length() > 0) { - info.setTitle(title); - } - if(trapped != null && trapped.length() > 0) { - info.setTrapped(trapped); - } - } + info.setCreator(creator); + info.setKeywords(keywords); + info.setAuthor(author); + info.setProducer(producer); + info.setSubject(subject); + info.setTitle(title); + info.setTrapped(trapped); - - - - + document.setDocumentInformation(info); return PdfUtils.pdfDocToWebResponse(document, pdfFile.getName() + "_metadata.pdf"); - } - -// @PostMapping("/update-metadata") -// public ResponseEntity addWatermark(@RequestParam("fileInput") MultipartFile pdfFile, -// @RequestParam Map allRequestParams,HttpServletRequest request, ModelMap model) throws IOException { -// // Load the PDF file -// System.out.println("1 allRequestParams.size() = " + allRequestParams.size()); -// for(Entry entry : allRequestParams.entrySet()) { -// System.out.println("1 key=" + entry.getKey() + ", value=" + entry.getValue()); -// } -// -// -// System.out.println("request.getParameterMap().size() = " + request.getParameterMap().size()); -// for(Entry entry : request.getParameterMap().entrySet()) { -// System.out.println("2 key=" + entry.getKey() + ", value=" + entry.getValue()); -// } -// -// -// System.out.println("mdoel.size() = " + model.size()); -// for(Entry entry : model.entrySet()) { -// System.out.println("3 key=" + entry.getKey() + ", value=" + entry.getValue()); -// } -// - - -// // Loop over all pages and remove annotations -// for (PDPage page : document.getPages()) { -// page.getAnnotations().clear(); -// } + } + + + } diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index ed825a13e..d7a305e14 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -189,4 +189,22 @@ removePassword.title=إزالة كلمة المرور removePassword.header=إزالة كلمة المرور (فك التشفير) removePassword.selectText.1=حدد PDF لفك التشفير removePassword.selectText.2=كلمة المرور -removePassword.submit=إزالة \ No newline at end of file +removePassword.submit=إزالة + +changeMetadata.title = \u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629 +changeMetadata.header = \u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629 +changeMetadata.selectText.1 = \u064A\u0631\u062C\u0649 \u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0645\u062A\u063A\u064A\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0631\u063A\u0628 \u0641\u064A \u062A\u063A\u064A\u064A\u0631\u0647\u0627 +changeMetadata.selectText.2 = \u062D\u0630\u0641 \u0643\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u064A\u0629 +changeMetadata.selectText.3 = \u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u064A\u0629 \u0627\u0644\u0645\u062E\u0635\u0635\u0629: +changeMetadata.author = \u0627\u0644\u0645\u0624\u0644\u0641: +changeMetadata.creationDate = \u062A\u0627\u0631\u064A\u062E \u0627\u0644\u0625\u0646\u0634\u0627\u0621 (yyyy / MM / dd HH: mm: ss): +changeMetadata.creator = \u0627\u0644\u0645\u0646\u0634\u0626: +changeMetadata.keywords = \u0627\u0644\u0643\u0644\u0645\u0627\u062A \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629: +changeMetadata.modDate = \u062A\u0627\u0631\u064A\u062E \u0627\u0644\u062A\u0639\u062F\u064A\u0644 (yyyy / MM / dd HH: mm: ss): +changeMetadata.producer = \u0627\u0644\u0645\u0646\u062A\u062C: +changeMetadata.subject = \u0627\u0644\u0645\u0648\u0636\u0648\u0639: +changeMetadata.title = \u0627\u0644\u0639\u0646\u0648\u0627\u0646: +changeMetadata.trapped = \u0645\u062D\u0627\u0635\u0631: +changeMetadata.selectText.4 = \u0628\u064A\u0627\u0646\u0627\u062A \u0648\u0635\u0641\u064A\u0629 \u0623\u062E\u0631\u0649: +changeMetadata.selectText.5 = \u0625\u0636\u0627\u0641\u0629 \u0625\u062F\u062E\u0627\u0644 \u0628\u064A\u0627\u0646\u0627\u062A \u0623\u0648\u0644\u064A\u0629 \u0645\u062E\u0635\u0635 +changeMetadata.submit = \u062A\u063A\u064A\u064A\u0631 diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index a8d092779..1460b435f 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -189,7 +189,23 @@ removePassword.selectText.2=Passwort removePassword.submit=Entfernen - +changeMetadata.title=Metadaten ndern +changeMetadata.header=Metadaten ndern +changeMetadata.selectText.1=Bitte bearbeiten Sie die Variablen, die Sie ndern mchten +changeMetadata.selectText.2=Alle Metadaten lschen +changeMetadata.selectText.3=Benutzerdefinierte Metadaten anzeigen: +changeMetadata.author=Autor: +changeMetadata.creationDate=Erstellungsdatum (jjjj/MM/tt HH:mm:ss): +changeMetadata.creator=Ersteller: +changeMetadata.keywords=Schlsselwrter: +changeMetadata.modDate=nderungsdatum (JJJJ/MM/TT HH:mm:ss): +changeMetadata.producer=Produzent: +changeMetadata.subject=Betreff: +changeMetadata.title=Titel: +changeMetadata.trapped=Gefangen: +changeMetadata.selectText.4=Andere Metadaten: +changeMetadata.selectText.5=Benutzerdefinierten Metadateneintrag hinzufgen +changeMetadata.submit=ndern diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 8cba9a7ed..69025be92 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -9,6 +9,9 @@ genericSubmit=Submit processTimeWarning=Warning: This process can take up to a minute depending on file-size pageOrderPrompt=Page Order (Enter a comma-separated list of page numbers) : goToPage=Go +true=True +false=False +unknown=Unknown ############# # HOME-PAGE # ############# @@ -58,8 +61,8 @@ home.removePassword.desc=Remove password protection from your PDF document. home.compressPdfs.title=Compress PDFs home.compressPdfs.desc=Compress PDFs to reduce their file size. -home.changeMetadata.title=Remove Metadata -home.changeMetadata.desc=Remove unwanted metadata from a PDF document +home.changeMetadata.title=Change Metadata +home.changeMetadata.desc=Change/Remove/Add metadata from a PDF document #Add image @@ -186,14 +189,23 @@ removePassword.selectText.1=Select PDF to Decrypt removePassword.selectText.2=Password removePassword.submit=Remove -changeMetadata.title=Remove Metadata -changeMetadata.header=Remove Metadata -changeMetadata.selectText.1=Select PDF to remove metadata from -changeMetadata.selectText.2=Remove document information -changeMetadata.selectText.3=Remove page labels -changeMetadata.selectText.4=Remove XMP Metadata -changeMetadata.selectText.5=Remove annotations -changeMetadata.submit=remove data +changeMetadata.title=Change Metadata +changeMetadata.header=Change Metadata +changeMetadata.selectText.1=Please edit the variables you wish to change +changeMetadata.selectText.2=Delete all metadata +changeMetadata.selectText.3=Show Custom Metadata: +changeMetadata.author=Author: +changeMetadata.creationDate=Creation Date (yyyy/MM/dd HH:mm:ss): +changeMetadata.creator=Creator: +changeMetadata.keywords=Keywords: +changeMetadata.modDate=Modification Date (yyyy/MM/dd HH:mm:ss): +changeMetadata.producer=Producer: +changeMetadata.subject=Subject: +changeMetadata.title=Title: +changeMetadata.trapped=Trapped: +changeMetadata.selectText.4=Other Metadata: +changeMetadata.selectText.5=Add Custom Metadata Entry +changeMetadata.submit=Change diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index 9554aa47a..40860f87d 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -12,6 +12,9 @@ genericSubmit=Submit processTimeWarning=Warning: This process can take up to a minute depending on file-size pageOrderPrompt=Page Order (Enter a comma-separated list of page numbers) : goToPage=Go +true=True +false=False +unknown=Unknown ############# # HOME-PAGE # ############# @@ -190,16 +193,23 @@ removePassword.selectText.1=Select PDF to Decrypt removePassword.selectText.2=Password removePassword.submit=Remove -changeMetadata.title=Remove Metadata -changeMetadata.header=Remove Metadata -changeMetadata.selectText.1=Select PDF to remove metadata from -changeMetadata.selectText.2=Remove document information -changeMetadata.selectText.3=Remove page labels -changeMetadata.selectText.4=Remove XMP Metadata -changeMetadata.selectText.5=Remove annotations -changeMetadata.submit=remove data - - +changeMetadata.title=Change Metadata +changeMetadata.header=Change Metadata +changeMetadata.selectText.1=Please edit the variables you wish to change +changeMetadata.selectText.2=Delete all metadata +changeMetadata.selectText.3=Show Custom Metadata: +changeMetadata.author=Author: +changeMetadata.creationDate=Creation Date (yyyy/MM/dd HH:mm:ss): +changeMetadata.creator=Creator: +changeMetadata.keywords=Keywords: +changeMetadata.modDate=Modification Date (yyyy/MM/dd HH:mm:ss): +changeMetadata.producer=Producer: +changeMetadata.subject=Subject: +changeMetadata.title=Title: +changeMetadata.trapped=Trapped: +changeMetadata.selectText.4=Other Metadata: +changeMetadata.selectText.5=Add Custom Metadata Entry +changeMetadata.submit=Change diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 498fa2279..a11732dde 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -189,4 +189,22 @@ removePassword.title=Supprimer le mot de passe removePassword.header=Supprimer le mot de passe (Déchiffrer) removePassword.selectText.1=Sélectionnez le PDF à déchiffrer removePassword.selectText.2=Mot de passe -removePassword.submit=Supprimer \ No newline at end of file +removePassword.submit=Supprimer + +changeMetadata.title=Modifier les mtadonnes +changeMetadata.header=Modifier les mtadonnes +changeMetadata.selectText.1=Veuillez modifier les variables que vous souhaitez modifier +changeMetadata.selectText.2=Supprimer toutes les mtadonnes +changeMetadata.selectText.3=Afficher les mtadonnes personnalises: +changeMetadata.author=Auteur: +changeMetadata.creationDate=Date de cration (aaaa/MM/jj HH:mm:ss): +changeMetadata.creator=Crateur: +changeMetadata.keywords=Mots cls: +changeMetadata.modDate=Date de modification (aaaa/MM/jj HH:mm:ss): +changeMetadata.producer=Producteur: +changeMetadata.subject=Objet: +changeMetadata.title=Titre: +changeMetadata.trapped=Pig: +changeMetadata.selectText.4=Autres mtadonnes: +changeMetadata.selectText.5=Ajouter une entre de mtadonnes personnalises +changeMetadata.submit=Modifier diff --git a/src/main/resources/templates/adjust-contrast.html b/src/main/resources/templates/adjust-contrast.html deleted file mode 100644 index 16b4b9611..000000000 --- a/src/main/resources/templates/adjust-contrast.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - -
-
-
-

-
-
-
-

-
-

-
-
- - -
- -
- - -
-
-
-
-
-
- - - \ No newline at end of file diff --git a/src/main/resources/templates/security/change-metadata.html b/src/main/resources/templates/security/change-metadata.html index 5a5e49d4d..a26a5d17e 100644 --- a/src/main/resources/templates/security/change-metadata.html +++ b/src/main/resources/templates/security/change-metadata.html @@ -15,109 +15,106 @@
-

Please select the variables you wish to change

+

- +
- - + +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-