From 5ce941dda0b50e070fcec0325f91535e9c3c3943 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Wed, 26 Mar 2025 10:53:22 +0000 Subject: [PATCH] Sanataize PDF improvements (#3251) # Description of Changes Please provide a summary of the changes, including: - Make distinction between metadata removal and XMP metadata removal - Change file loaders to only edit metadata for certain ops Closes #(issue_number) --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. --- .../api/misc/MetadataController.java | 2 +- .../api/security/SanitizeController.java | 23 ++- .../api/security/SanitizePdfRequest.java | 7 +- .../service/CustomPDFDocumentFactory.java | 137 +++++++++++++----- src/main/resources/messages_ar_AR.properties | 2 +- src/main/resources/messages_az_AZ.properties | 2 +- src/main/resources/messages_bg_BG.properties | 2 +- src/main/resources/messages_ca_CA.properties | 2 +- src/main/resources/messages_cs_CZ.properties | 2 +- src/main/resources/messages_da_DK.properties | 2 +- src/main/resources/messages_de_DE.properties | 2 +- src/main/resources/messages_el_GR.properties | 2 +- src/main/resources/messages_en_GB.properties | 3 +- src/main/resources/messages_en_US.properties | 2 +- src/main/resources/messages_es_ES.properties | 2 +- src/main/resources/messages_eu_ES.properties | 2 +- src/main/resources/messages_fa_IR.properties | 2 +- src/main/resources/messages_fr_FR.properties | 2 +- src/main/resources/messages_ga_IE.properties | 2 +- src/main/resources/messages_hi_IN.properties | 2 +- src/main/resources/messages_hr_HR.properties | 2 +- src/main/resources/messages_hu_HU.properties | 2 +- src/main/resources/messages_id_ID.properties | 2 +- src/main/resources/messages_it_IT.properties | 2 +- src/main/resources/messages_ja_JP.properties | 2 +- src/main/resources/messages_ko_KR.properties | 2 +- src/main/resources/messages_nl_NL.properties | 2 +- src/main/resources/messages_no_NB.properties | 2 +- src/main/resources/messages_pl_PL.properties | 2 +- src/main/resources/messages_pt_BR.properties | 2 +- src/main/resources/messages_pt_PT.properties | 2 +- src/main/resources/messages_ro_RO.properties | 2 +- src/main/resources/messages_ru_RU.properties | 2 +- src/main/resources/messages_sk_SK.properties | 2 +- src/main/resources/messages_sl_SI.properties | 2 +- .../resources/messages_sr_LATN_RS.properties | 2 +- src/main/resources/messages_sv_SE.properties | 2 +- src/main/resources/messages_th_TH.properties | 2 +- src/main/resources/messages_tr_TR.properties | 2 +- src/main/resources/messages_uk_UA.properties | 2 +- src/main/resources/messages_vi_VN.properties | 2 +- src/main/resources/messages_zh_BO.properties | 2 +- src/main/resources/messages_zh_CN.properties | 2 +- src/main/resources/messages_zh_TW.properties | 2 +- .../templates/security/sanitize-pdf.html | 8 +- 45 files changed, 175 insertions(+), 83 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java index 4bca4988a..66ac528eb 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java @@ -86,7 +86,7 @@ public class MetadataController { allRequestParams = new java.util.HashMap(); } // Load the PDF file into a PDDocument - PDDocument document = pdfDocumentFactory.load(pdfFile); + PDDocument document = pdfDocumentFactory.load(pdfFile, true); // Get the document information from the PDF PDDocumentInformation info = document.getDocumentInformation(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java index e1959fc88..28499e1e2 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java @@ -51,11 +51,12 @@ public class SanitizeController { MultipartFile inputFile = request.getFileInput(); boolean removeJavaScript = request.isRemoveJavaScript(); boolean removeEmbeddedFiles = request.isRemoveEmbeddedFiles(); + boolean removeXMPMetadata = request.isRemoveXMPMetadata(); boolean removeMetadata = request.isRemoveMetadata(); boolean removeLinks = request.isRemoveLinks(); boolean removeFonts = request.isRemoveFonts(); - PDDocument document = pdfDocumentFactory.load(inputFile); + PDDocument document = pdfDocumentFactory.load(inputFile, true); if (removeJavaScript) { sanitizeJavaScript(document); } @@ -64,10 +65,14 @@ public class SanitizeController { sanitizeEmbeddedFiles(document); } - if (removeMetadata) { - sanitizeMetadata(document); + if (removeXMPMetadata) { + sanitizeXMPMetadata(document); } + if (removeMetadata) { + sanitizeDocumentInfoMetadata(document); + } + if (removeLinks) { sanitizeLinks(document); } @@ -145,7 +150,7 @@ public class SanitizeController { } } - private void sanitizeMetadata(PDDocument document) { + private void sanitizeXMPMetadata(PDDocument document) { if (document.getDocumentCatalog() != null) { PDMetadata metadata = document.getDocumentCatalog().getMetadata(); if (metadata != null) { @@ -153,6 +158,16 @@ public class SanitizeController { } } } + + private void sanitizeDocumentInfoMetadata(PDDocument document) { + PDDocumentInformation docInfo = document.getDocumentInformation(); + if (docInfo != null) { + PDDocumentInformation newInfo = new PDDocumentInformation(); + document.setDocumentInformation(newInfo); + } + } + + private void sanitizeLinks(PDDocument document) throws IOException { for (PDPage page : document.getPages()) { diff --git a/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java index f30067360..e930db756 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java @@ -17,9 +17,12 @@ public class SanitizePdfRequest extends PDFFile { @Schema(description = "Remove embedded files from the PDF", defaultValue = "false") private boolean removeEmbeddedFiles; - @Schema(description = "Remove metadata from the PDF", defaultValue = "false") - private boolean removeMetadata; + @Schema(description = "Remove XMP metadata from the PDF", defaultValue = "false") + private boolean removeXMPMetadata; + @Schema(description = "Remove document info metadata from the PDF", defaultValue = "false") + private boolean removeMetadata; + @Schema(description = "Remove links from the PDF", defaultValue = "false") private boolean removeLinks; diff --git a/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java b/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java index b9ccd7b53..73868347d 100644 --- a/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java +++ b/src/main/java/stirling/software/SPDF/service/CustomPDFDocumentFactory.java @@ -68,10 +68,18 @@ public class CustomPDFDocumentFactory { } /** - * Main entry point for loading a PDF document from a file. Automatically selects the most - * appropriate loading strategy. - */ + * Main entry point for loading a PDF document from a file. Automatically selects the most + * appropriate loading strategy. + */ public PDDocument load(File file) throws IOException { + return load(file, false); + } + + /** + * Main entry point for loading a PDF document from a file with read-only option. + * Automatically selects the most appropriate loading strategy. + */ + public PDDocument load(File file, boolean readOnly) throws IOException { if (file == null) { throw new IllegalArgumentException("File cannot be null"); } @@ -79,14 +87,26 @@ public class CustomPDFDocumentFactory { long fileSize = file.length(); log.debug("Loading PDF from file, size: {}MB", fileSize / (1024 * 1024)); - return loadAdaptively(file, fileSize); + PDDocument doc = loadAdaptively(file, fileSize); + if (!readOnly) { + postProcessDocument(doc); + } + return doc; } /** - * Main entry point for loading a PDF document from a Path. Automatically selects the most - * appropriate loading strategy. - */ + * Main entry point for loading a PDF document from a Path. Automatically selects the most + * appropriate loading strategy. + */ public PDDocument load(Path path) throws IOException { + return load(path, false); + } + + /** + * Main entry point for loading a PDF document from a Path with read-only option. + * Automatically selects the most appropriate loading strategy. + */ + public PDDocument load(Path path, boolean readOnly) throws IOException { if (path == null) { throw new IllegalArgumentException("File cannot be null"); } @@ -94,11 +114,20 @@ public class CustomPDFDocumentFactory { long fileSize = Files.size(path); log.debug("Loading PDF from file, size: {}MB", fileSize / (1024 * 1024)); - return loadAdaptively(path.toFile(), fileSize); + PDDocument doc = loadAdaptively(path.toFile(), fileSize); + if (!readOnly) { + postProcessDocument(doc); + } + return doc; } /** Load a PDF from byte array with automatic optimization. */ public PDDocument load(byte[] input) throws IOException { + return load(input, false); + } + + /** Load a PDF from byte array with automatic optimization and read-only option. */ + public PDDocument load(byte[] input, boolean readOnly) throws IOException { if (input == null) { throw new IllegalArgumentException("Input bytes cannot be null"); } @@ -106,11 +135,20 @@ public class CustomPDFDocumentFactory { long dataSize = input.length; log.debug("Loading PDF from byte array, size: {}MB", dataSize / (1024 * 1024)); - return loadAdaptively(input, dataSize); + PDDocument doc = loadAdaptively(input, dataSize); + if (!readOnly) { + postProcessDocument(doc); + } + return doc; } /** Load a PDF from InputStream with automatic optimization. */ public PDDocument load(InputStream input) throws IOException { + return load(input, false); + } + + /** Load a PDF from InputStream with automatic optimization and read-only option. */ + public PDDocument load(InputStream input, boolean readOnly) throws IOException { if (input == null) { throw new IllegalArgumentException("InputStream cannot be null"); } @@ -119,11 +157,20 @@ public class CustomPDFDocumentFactory { Path tempFile = createTempFile("pdf-stream-"); Files.copy(input, tempFile, StandardCopyOption.REPLACE_EXISTING); - return loadAdaptively(tempFile.toFile(), Files.size(tempFile)); + PDDocument doc = loadAdaptively(tempFile.toFile(), Files.size(tempFile)); + if (!readOnly) { + postProcessDocument(doc); + } + return doc; } /** Load with password from InputStream */ public PDDocument load(InputStream input, String password) throws IOException { + return load(input, password, false); + } + + /** Load with password from InputStream and read-only option */ + public PDDocument load(InputStream input, String password, boolean readOnly) throws IOException { if (input == null) { throw new IllegalArgumentException("InputStream cannot be null"); } @@ -132,9 +179,54 @@ public class CustomPDFDocumentFactory { Path tempFile = createTempFile("pdf-stream-"); Files.copy(input, tempFile, StandardCopyOption.REPLACE_EXISTING); - return loadAdaptivelyWithPassword(tempFile.toFile(), Files.size(tempFile), password); + PDDocument doc = loadAdaptivelyWithPassword(tempFile.toFile(), Files.size(tempFile), password); + if (!readOnly) { + postProcessDocument(doc); + } + return doc; } + /** Load from a file path string */ + public PDDocument load(String path) throws IOException { + return load(path, false); + } + + /** Load from a file path string with read-only option */ + public PDDocument load(String path, boolean readOnly) throws IOException { + return load(new File(path), readOnly); + } + + /** Load from a PDFFile object */ + public PDDocument load(PDFFile pdfFile) throws IOException { + return load(pdfFile, false); + } + + /** Load from a PDFFile object with read-only option */ + public PDDocument load(PDFFile pdfFile, boolean readOnly) throws IOException { + return load(pdfFile.getFileInput(), readOnly); + } + + /** Load from a MultipartFile */ + public PDDocument load(MultipartFile pdfFile) throws IOException { + return load(pdfFile, false); + } + + /** Load from a MultipartFile with read-only option */ + public PDDocument load(MultipartFile pdfFile, boolean readOnly) throws IOException { + return load(pdfFile.getInputStream(), readOnly); + + } + + /** Load with password from MultipartFile */ + public PDDocument load(MultipartFile fileInput, String password) throws IOException { + return load(fileInput, password, false); + } + + /** Load with password from MultipartFile with read-only option */ + public PDDocument load(MultipartFile fileInput, String password, boolean readOnly) throws IOException { + return load(fileInput.getInputStream(), password, readOnly); + } + /** * Determine the appropriate caching strategy based on file size and available memory. This * common method is used by both password and non-password loading paths. @@ -197,8 +289,6 @@ public class CustomPDFDocumentFactory { } else { throw new IllegalArgumentException("Unsupported source type: " + source.getClass()); } - - postProcessDocument(document); return document; } @@ -220,8 +310,6 @@ public class CustomPDFDocumentFactory { } else { throw new IllegalArgumentException("Unsupported source type: " + source.getClass()); } - - postProcessDocument(document); return document; } @@ -384,23 +472,4 @@ public class CustomPDFDocumentFactory { } } - /** Load from a file path string */ - public PDDocument load(String path) throws IOException { - return load(new File(path)); - } - - /** Load from a PDFFile object */ - public PDDocument load(PDFFile pdfFile) throws IOException { - return load(pdfFile.getFileInput()); - } - - /** Load from a MultipartFile */ - public PDDocument load(MultipartFile pdfFile) throws IOException { - return load(pdfFile.getInputStream()); - } - - /** Load with password from MultipartFile */ - public PDDocument load(MultipartFile fileInput, String password) throws IOException { - return load(fileInput.getInputStream(), password); - } } diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 2f64c6b36..6a641994a 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -733,7 +733,7 @@ sanitizePDF.title=تنظيف PDF sanitizePDF.header=تنظيف ملف PDF sanitizePDF.selectText.1=إزالة إجراءات جافا سكريبت sanitizePDF.selectText.2=إزالة الملفات المضمنة -sanitizePDF.selectText.3=إزالة البيانات الوصفية +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=إزالة الروابط sanitizePDF.selectText.5=إزالة الخطوط sanitizePDF.submit=تنظيف PDF diff --git a/src/main/resources/messages_az_AZ.properties b/src/main/resources/messages_az_AZ.properties index 924068adb..1ea57f170 100644 --- a/src/main/resources/messages_az_AZ.properties +++ b/src/main/resources/messages_az_AZ.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF-i Təmizlə sanitizePDF.header=PDF Faylını Təmizlə sanitizePDF.selectText.1=JavaScript Fəaliyyətlərini Sil sanitizePDF.selectText.2=Daxil Edilmiş Faylları Sil -sanitizePDF.selectText.3=Metadatanı Sil +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Linkləri Sil sanitizePDF.selectText.5=Şriftləri Sil sanitizePDF.submit=PDF-i Təmizlə diff --git a/src/main/resources/messages_bg_BG.properties b/src/main/resources/messages_bg_BG.properties index 691a5becc..608dfb326 100644 --- a/src/main/resources/messages_bg_BG.properties +++ b/src/main/resources/messages_bg_BG.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Дезинфектирай PDF sanitizePDF.header=Дезинфектира PDF файл sanitizePDF.selectText.1=Премахва JavaScript действия sanitizePDF.selectText.2=Премахва вградени файлове -sanitizePDF.selectText.3=Премахва метаданни +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Премахва линкове sanitizePDF.selectText.5=Премахва шрифтове sanitizePDF.submit=Дезинфектирай PDF diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index 690f7b5c9..bdc0cb7b7 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Neteja PDF sanitizePDF.header=Neteja un fitxer PDF sanitizePDF.selectText.1=Elimina accions JavaScript sanitizePDF.selectText.2=Elimina fitxers incrustats -sanitizePDF.selectText.3=Elimina metadades +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Elimina enllaços sanitizePDF.selectText.5=Elimina fonts sanitizePDF.submit=Neteja PDF diff --git a/src/main/resources/messages_cs_CZ.properties b/src/main/resources/messages_cs_CZ.properties index b2ebe4626..52c8c9f2e 100644 --- a/src/main/resources/messages_cs_CZ.properties +++ b/src/main/resources/messages_cs_CZ.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Sanitizovat PDF sanitizePDF.header=Sanitizovat PDF soubor sanitizePDF.selectText.1=Odstranit JavaScript akce sanitizePDF.selectText.2=Odstranit vložené soubory -sanitizePDF.selectText.3=Odstranit metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Odstranit odkazy sanitizePDF.selectText.5=Odstranit písma sanitizePDF.submit=Sanitizovat PDF diff --git a/src/main/resources/messages_da_DK.properties b/src/main/resources/messages_da_DK.properties index 8670a0a24..2bfaac596 100644 --- a/src/main/resources/messages_da_DK.properties +++ b/src/main/resources/messages_da_DK.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Rens PDF sanitizePDF.header=Rens en PDF-fil sanitizePDF.selectText.1=Fjern JavaScript-handlinger sanitizePDF.selectText.2=Fjern indlejrede filer -sanitizePDF.selectText.3=Fjern metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Fjern links sanitizePDF.selectText.5=Fjern skrifttyper sanitizePDF.submit=Rens PDF diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index d97ea7e32..da1f1e16f 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF Bereinigen sanitizePDF.header=PDF Bereinigen sanitizePDF.selectText.1=Javascript-Aktionen entfernen sanitizePDF.selectText.2=Eingebettete Dateien entfernen -sanitizePDF.selectText.3=Metadaten entfernen +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Links entfernen sanitizePDF.selectText.5=Schriftarten entfernen sanitizePDF.submit=Bereinigen diff --git a/src/main/resources/messages_el_GR.properties b/src/main/resources/messages_el_GR.properties index 62dd62c5d..2df2009b6 100644 --- a/src/main/resources/messages_el_GR.properties +++ b/src/main/resources/messages_el_GR.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Εξυγίανση PDF sanitizePDF.header=Εξυγίανση αρχείου PDF sanitizePDF.selectText.1=Αφαίρεση ενεργειών JavaScript sanitizePDF.selectText.2=Αφαίρεση ενσωματωμένων αρχείων -sanitizePDF.selectText.3=Αφαίρεση μεταδεδομένων +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Αφαίρεση συνδέσμων sanitizePDF.selectText.5=Αφαίρεση γραμματοσειρών sanitizePDF.submit=Εξυγίανση PDF diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index f98b212df..1c02cac0c 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -733,9 +733,10 @@ sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file sanitizePDF.selectText.1=Remove JavaScript actions sanitizePDF.selectText.2=Remove embedded files -sanitizePDF.selectText.3=Remove metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Remove links sanitizePDF.selectText.5=Remove fonts +sanitizePDF.selectText.6=Remove Document Info Metadata sanitizePDF.submit=Sanitize PDF diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index 5a052a5ca..cf82c923d 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file sanitizePDF.selectText.1=Remove JavaScript actions sanitizePDF.selectText.2=Remove embedded files -sanitizePDF.selectText.3=Remove metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Remove links sanitizePDF.selectText.5=Remove fonts sanitizePDF.submit=Sanitize PDF diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index e94a3150b..69527929b 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Limpiar archivo PDF sanitizePDF.header=Limpiar un archivo PDF sanitizePDF.selectText.1=Eliminar código JavaScript sanitizePDF.selectText.2=Eliminar archivos incrustados -sanitizePDF.selectText.3=Eliminar metadatos +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Eliminar enlaces sanitizePDF.selectText.5=Eliminar fuentes sanitizePDF.submit=Limpiar PDF diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 7e4701886..1f463c181 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF-a desinfektatu sanitizePDF.header=PDF fitxategi bat desinfektatu sanitizePDF.selectText.1=Ezabatu JavaScript akzioak sanitizePDF.selectText.2=Ezabatu embedded fitxategiak -sanitizePDF.selectText.3=Ezabatu metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Ezabatu esketak sanitizePDF.selectText.5=Ezabatu iturri letrak sanitizePDF.submit=Desinfektatu PDF diff --git a/src/main/resources/messages_fa_IR.properties b/src/main/resources/messages_fa_IR.properties index 04656f6f8..4cf7cfb8c 100644 --- a/src/main/resources/messages_fa_IR.properties +++ b/src/main/resources/messages_fa_IR.properties @@ -733,7 +733,7 @@ sanitizePDF.title=پاکسازی PDF sanitizePDF.header=پاکسازی یک فایل PDF sanitizePDF.selectText.1=حذف عملیات جاوااسکریپت sanitizePDF.selectText.2=حذف فایل‌های جاسازی شده -sanitizePDF.selectText.3=حذف متاداده‌ها +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=حذف لینک‌ها sanitizePDF.selectText.5=حذف فونت‌ها sanitizePDF.submit=پاکسازی PDF diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 845d00a8c..36926bac7 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Assainir sanitizePDF.header=Assainir sanitizePDF.selectText.1=Supprimer les actions JavaScript sanitizePDF.selectText.2=Supprimer les fichiers intégrés -sanitizePDF.selectText.3=Supprimer les métadonnées +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Supprimer les liens sanitizePDF.selectText.5=Supprimer les polices sanitizePDF.submit=Assainir diff --git a/src/main/resources/messages_ga_IE.properties b/src/main/resources/messages_ga_IE.properties index 8391ff814..80b8cfe21 100644 --- a/src/main/resources/messages_ga_IE.properties +++ b/src/main/resources/messages_ga_IE.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF sláintíocht sanitizePDF.header=Glanadh comhad PDF sanitizePDF.selectText.1=Bain gníomhartha JavaScript sanitizePDF.selectText.2=Bain comhaid leabaithe -sanitizePDF.selectText.3=Bain meiteashonraí +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Bain naisc sanitizePDF.selectText.5=Bain clónna sanitizePDF.submit=PDF sláintíocht diff --git a/src/main/resources/messages_hi_IN.properties b/src/main/resources/messages_hi_IN.properties index 02fcb670a..700bd21c4 100644 --- a/src/main/resources/messages_hi_IN.properties +++ b/src/main/resources/messages_hi_IN.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF सैनिटाइज़ करें sanitizePDF.header=PDF फ़ाइल सैनिटाइज़ करें sanitizePDF.selectText.1=जावास्क्रिप्ट क्रियाएं हटाएं sanitizePDF.selectText.2=एम्बेडेड फ़ाइलें हटाएं -sanitizePDF.selectText.3=मेटाडेटा हटाएं +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=लिंक हटाएं sanitizePDF.selectText.5=फ़ॉन्ट्स हटाएं sanitizePDF.submit=PDF सैनिटाइज़ करें diff --git a/src/main/resources/messages_hr_HR.properties b/src/main/resources/messages_hr_HR.properties index 2c96ce442..e5a9ea6d6 100644 --- a/src/main/resources/messages_hr_HR.properties +++ b/src/main/resources/messages_hr_HR.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Sanirajte PDF sanitizePDF.header=Sanirajte PDF datoteku sanitizePDF.selectText.1=Ukloni JavaScript akcije sanitizePDF.selectText.2=Ukloni ugrađene datoteke -sanitizePDF.selectText.3=Ukloni metapodatke +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Ukloni poveznice sanitizePDF.selectText.5=Uklonite fontove sanitizePDF.submit=Sanirajte PDF diff --git a/src/main/resources/messages_hu_HU.properties b/src/main/resources/messages_hu_HU.properties index 56fbcd712..3b2d7e701 100644 --- a/src/main/resources/messages_hu_HU.properties +++ b/src/main/resources/messages_hu_HU.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF tisztítása sanitizePDF.header=PDF fájl tisztítása sanitizePDF.selectText.1=JavaScript műveletek eltávolítása sanitizePDF.selectText.2=Beágyazott fájlok eltávolítása -sanitizePDF.selectText.3=Metaadatok eltávolítása +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Hivatkozások eltávolítása sanitizePDF.selectText.5=Betűtípusok eltávolítása sanitizePDF.submit=PDF tisztítása diff --git a/src/main/resources/messages_id_ID.properties b/src/main/resources/messages_id_ID.properties index 85036ebe4..fd59484d9 100644 --- a/src/main/resources/messages_id_ID.properties +++ b/src/main/resources/messages_id_ID.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Bersihkan PDF sanitizePDF.header=Membersihkan berkas PDF sanitizePDF.selectText.1=Hapus tindakan JavaScript sanitizePDF.selectText.2=Hapus berkas yang disematkan -sanitizePDF.selectText.3=Hapus metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Hapus tautan sanitizePDF.selectText.5=Hapus font sanitizePDF.submit=Membersihkan PDF diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 4df071718..a59a9aea9 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Pulire PDF sanitizePDF.header=Pulisci un file PDF sanitizePDF.selectText.1=Rimuovi le azioni JavaScript sanitizePDF.selectText.2=Rimuovi i file incorporati -sanitizePDF.selectText.3=Rimuovi i metadati +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Rimuovi collegamenti sanitizePDF.selectText.5=Rimuovi i font sanitizePDF.submit=Pulisci PDF diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index 577cf24f1..a0a118b23 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDFをサニタイズ sanitizePDF.header=PDFファイルをサニタイズ sanitizePDF.selectText.1=JavaScriptアクションを削除 sanitizePDF.selectText.2=埋め込みファイルを削除 -sanitizePDF.selectText.3=メタデータを削除 +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=リンクを削除 sanitizePDF.selectText.5=フォントを削除 sanitizePDF.submit=PDFをサニタイズする diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 831355bec..94667f8e0 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF 정리 sanitizePDF.header=PDF 파일 정리 sanitizePDF.selectText.1=JavaScript 작업 제거 sanitizePDF.selectText.2=임베디드 파일 제거 -sanitizePDF.selectText.3=메타데이터 제거 +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=링크 제거 sanitizePDF.selectText.5=글꼴 제거 sanitizePDF.submit=PDF 정리 diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index e2e8b5451..fb6372bdd 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF opschonen sanitizePDF.header=Een PDF-bestand opschonen sanitizePDF.selectText.1=Verwijder Javascript-acties sanitizePDF.selectText.2=Verwijder ingebedde bestanden -sanitizePDF.selectText.3=Verwijder metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Verwijder links sanitizePDF.selectText.5=Verwijder lettertypen sanitizePDF.submit=PDF opschonen diff --git a/src/main/resources/messages_no_NB.properties b/src/main/resources/messages_no_NB.properties index c3ab3cd34..2c1ec6703 100644 --- a/src/main/resources/messages_no_NB.properties +++ b/src/main/resources/messages_no_NB.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Rensker PDF sanitizePDF.header=Rensker en PDF fil sanitizePDF.selectText.1=Fjern JavaScript-handlinger sanitizePDF.selectText.2=Fjern innebygde filer -sanitizePDF.selectText.3=Fjern metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Fjern lenker sanitizePDF.selectText.5=Fjern skrifter sanitizePDF.submit=Rensk PDF diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 5c8dc3935..6009f2b74 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Dezynfekuj PDF sanitizePDF.header=Dezynfekuj dokument PDF sanitizePDF.selectText.1=Usuń elementy JavaScript sanitizePDF.selectText.2=Usuń załączone pliki -sanitizePDF.selectText.3=Usuń metadane +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Usuń linki sanitizePDF.selectText.5=Usuń czcionki sanitizePDF.submit=Dezynfekuj PDF diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 022c8d017..292a35329 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Higienizar sanitizePDF.header=Higienizar sanitizePDF.selectText.1=Remover scripts de JavaScript. sanitizePDF.selectText.2=Remover arquivos embutidos. -sanitizePDF.selectText.3=Remover metadados. +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Remover links. sanitizePDF.selectText.5=Remover fontes. sanitizePDF.submit=Higienizar PDF diff --git a/src/main/resources/messages_pt_PT.properties b/src/main/resources/messages_pt_PT.properties index d9bcfb8b8..dd82ed01a 100644 --- a/src/main/resources/messages_pt_PT.properties +++ b/src/main/resources/messages_pt_PT.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Sanitizar PDF sanitizePDF.header=Sanitizar um ficheiro PDF sanitizePDF.selectText.1=Remover ações JavaScript sanitizePDF.selectText.2=Remover ficheiros incorporados -sanitizePDF.selectText.3=Remover metadados +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Remover ligações sanitizePDF.selectText.5=Remover tipos de letra sanitizePDF.submit=Sanitizar PDF diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index 4802564dc..69f724499 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Igienizează PDF sanitizePDF.header=Igienizează un fișier PDF sanitizePDF.selectText.1=Elimină acțiunile JavaScript sanitizePDF.selectText.2=Elimină fișierele încorporate -sanitizePDF.selectText.3=Elimină metadatele +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Elimină link-urile sanitizePDF.selectText.5=Elimină fonturile sanitizePDF.submit=Igienizează PDF diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index a65c71abc..d5a554568 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Очистить PDF sanitizePDF.header=Очистить PDF-файл sanitizePDF.selectText.1=Удалить JavaScript-действия sanitizePDF.selectText.2=Удалить встроенные файлы -sanitizePDF.selectText.3=Удалить метаданные +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Удалить ссылки sanitizePDF.selectText.5=Удалить шрифты sanitizePDF.submit=Очистить PDF diff --git a/src/main/resources/messages_sk_SK.properties b/src/main/resources/messages_sk_SK.properties index 92aa43c61..e09dc6564 100644 --- a/src/main/resources/messages_sk_SK.properties +++ b/src/main/resources/messages_sk_SK.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Vyčistiť PDF sanitizePDF.header=Vyčistiť PDF súbor sanitizePDF.selectText.1=Odstrániť JavaScript akcie sanitizePDF.selectText.2=Odstrániť vložené súbory -sanitizePDF.selectText.3=Odstrániť metadáta +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Odstrániť odkazy sanitizePDF.selectText.5=Odstrániť fonty sanitizePDF.submit=Vyčistiť PDF diff --git a/src/main/resources/messages_sl_SI.properties b/src/main/resources/messages_sl_SI.properties index 7c22c881f..88f6f2d7b 100644 --- a/src/main/resources/messages_sl_SI.properties +++ b/src/main/resources/messages_sl_SI.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Prečisti PDF sanitizePDF.header=Prečisti datoteko PDF sanitizePDF.selectText.1=Odstrani dejanja JavaScript sanitizePDF.selectText.2=Odstrani vdelane datoteke -sanitizePDF.selectText.3=Odstrani metapodatke +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Odstrani povezave sanitizePDF.selectText.5=Odstrani pisave sanitizePDF.submit=Prečisti PDF diff --git a/src/main/resources/messages_sr_LATN_RS.properties b/src/main/resources/messages_sr_LATN_RS.properties index ad42710f5..bf6c7e128 100644 --- a/src/main/resources/messages_sr_LATN_RS.properties +++ b/src/main/resources/messages_sr_LATN_RS.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Sanitizacija PDF-a sanitizePDF.header=Sanitizacija PDF fajla sanitizePDF.selectText.1=Ukloni JavaScript akcije sanitizePDF.selectText.2=Ukloni ugrađene fajlove -sanitizePDF.selectText.3=Ukloni metapodatke +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Ukloni linkove sanitizePDF.selectText.5=Ukloni fontove sanitizePDF.submit=Sanitizuj PDF diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index e4331b98a..6deaf298f 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Sanera PDF sanitizePDF.header=Sanera en PDF-fil sanitizePDF.selectText.1=Ta bort JavaScript-åtgärder sanitizePDF.selectText.2=Ta bort inbäddade filer -sanitizePDF.selectText.3=Ta bort metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Ta bort länkar sanitizePDF.selectText.5=Ta bort typsnitt sanitizePDF.submit=Sanera PDF diff --git a/src/main/resources/messages_th_TH.properties b/src/main/resources/messages_th_TH.properties index cb5cf4cbb..9ace03f46 100644 --- a/src/main/resources/messages_th_TH.properties +++ b/src/main/resources/messages_th_TH.properties @@ -733,7 +733,7 @@ sanitizePDF.title=ทำความสะอาด PDF sanitizePDF.header=ทำความสะอาดไฟล์ PDF sanitizePDF.selectText.1=ลบการกระทำ JavaScript sanitizePDF.selectText.2=ลบไฟล์ฝังตัว -sanitizePDF.selectText.3=ลบข้อมูลเมตา +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=ลบลิงก์ sanitizePDF.selectText.5=ลบฟอนต์ sanitizePDF.submit=ทำความสะอาด PDF diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index eb15bcb61..6555db1be 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF'i Temizle sanitizePDF.header=PDF dosyasını temizle sanitizePDF.selectText.1=JavaScript işlemlerini kaldır sanitizePDF.selectText.2=Gömülü dosyaları kaldır -sanitizePDF.selectText.3=Üst veriyi kaldır +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Linkleri kaldır sanitizePDF.selectText.5=Fontları kaldır sanitizePDF.submit=PDF'i Temizle diff --git a/src/main/resources/messages_uk_UA.properties b/src/main/resources/messages_uk_UA.properties index 6a42c0530..e1052825f 100644 --- a/src/main/resources/messages_uk_UA.properties +++ b/src/main/resources/messages_uk_UA.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Дезінфекція PDF sanitizePDF.header=Дезінфекція PDF файлу sanitizePDF.selectText.1=Видалити JavaScript sanitizePDF.selectText.2=Видалити вбудовані файли -sanitizePDF.selectText.3=Видалити метадані +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Видалити посилання sanitizePDF.selectText.5=Видалити шрифти sanitizePDF.submit=Дезінфекція diff --git a/src/main/resources/messages_vi_VN.properties b/src/main/resources/messages_vi_VN.properties index f962b8fef..181133f8b 100644 --- a/src/main/resources/messages_vi_VN.properties +++ b/src/main/resources/messages_vi_VN.properties @@ -733,7 +733,7 @@ sanitizePDF.title=Làm sạch PDF sanitizePDF.header=Làm sạch tệp PDF sanitizePDF.selectText.1=Xóa các hành động JavaScript sanitizePDF.selectText.2=Xóa các tệp nhúng -sanitizePDF.selectText.3=Xóa metadata +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=Xóa liên kết sanitizePDF.selectText.5=Xóa phông chữ sanitizePDF.submit=Làm sạch PDF diff --git a/src/main/resources/messages_zh_BO.properties b/src/main/resources/messages_zh_BO.properties index ecebe980f..f84d854c6 100644 --- a/src/main/resources/messages_zh_BO.properties +++ b/src/main/resources/messages_zh_BO.properties @@ -733,7 +733,7 @@ sanitizePDF.title=PDF གཙང་སེལ། sanitizePDF.header=PDF ཡིག་ཆ་གཙང་སེལ། sanitizePDF.selectText.1=Javascript བྱ་འགུལ་སུབ་པ། sanitizePDF.selectText.2=ནང་འཇུག་ཡིག་ཆ་སུབ་པ། -sanitizePDF.selectText.3=གནས་ཆ་སུབ་པ། +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=འབྲེལ་ཐག་སུབ་པ། sanitizePDF.selectText.5=ཡིག་གཟུགས་སུབ་པ། sanitizePDF.submit=PDF གཙང་སེལ། diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index bf75a01d8..3f97e358b 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -733,7 +733,7 @@ sanitizePDF.title=清理 PDF sanitizePDF.header=清理 PDF 文件 sanitizePDF.selectText.1=移除 JavaScript 操作 sanitizePDF.selectText.2=移除嵌入的文件 -sanitizePDF.selectText.3=移除元数据 +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=移除链接 sanitizePDF.selectText.5=移除字体 sanitizePDF.submit=清理PDF diff --git a/src/main/resources/messages_zh_TW.properties b/src/main/resources/messages_zh_TW.properties index 7462ba7db..979041bef 100644 --- a/src/main/resources/messages_zh_TW.properties +++ b/src/main/resources/messages_zh_TW.properties @@ -733,7 +733,7 @@ sanitizePDF.title=清理 PDF sanitizePDF.header=清理 PDF 檔案 sanitizePDF.selectText.1=移除 JavaScript 操作 sanitizePDF.selectText.2=移除內嵌文件 -sanitizePDF.selectText.3=移除中繼資料 +sanitizePDF.selectText.3=Remove XMP metadata sanitizePDF.selectText.4=移除連結 sanitizePDF.selectText.5=移除字型 sanitizePDF.submit=清理 PDF diff --git a/src/main/resources/templates/security/sanitize-pdf.html b/src/main/resources/templates/security/sanitize-pdf.html index c24b494b6..575cca6d5 100644 --- a/src/main/resources/templates/security/sanitize-pdf.html +++ b/src/main/resources/templates/security/sanitize-pdf.html @@ -29,8 +29,12 @@
- - + + +
+
+ +