From aec5a8ddc5a66d446105d21cb33bbba64a983e39 Mon Sep 17 00:00:00 2001 From: Ludy Date: Thu, 7 Aug 2025 14:57:47 +0200 Subject: [PATCH 1/2] feat(common): add configurable maxDPI limit for PDF-to-image conversion (#4129) # Description of Changes - **What was changed:** Added a new `maxDPI` property under `system` in `ApplicationProperties`; updated `PdfUtils` to retrieve and enforce this configurable limit instead of a hard-coded constant; modified `ConverterWebController` and the PDF-to-image template to expose the limit to users; added `pdfToImage.dpi` entries across all translation files; updated `settings.yml.template` and `DeveloperGuide.md` to document the new setting. - **Why the change was made:** To allow deployments to tune the maximum DPI for PDF-to-image conversions based on available resources, preventing excessive memory usage and crashes caused by arbitrarily high DPI values. Closes #3985 --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [x] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/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/devGuide/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] 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/devGuide/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/devGuide/DeveloperGuide.md#6-testing) for more details. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../common/model/ApplicationProperties.java | 1 + .../stirling/software/common/util/PdfUtils.java | 12 +++++++++--- .../controller/web/ConverterWebController.java | 9 +++++++++ .../src/main/resources/messages_ar_AR.properties | 1 + .../src/main/resources/messages_az_AZ.properties | 1 + .../src/main/resources/messages_bg_BG.properties | 1 + .../src/main/resources/messages_bo_CN.properties | 1 + .../src/main/resources/messages_ca_CA.properties | 1 + .../src/main/resources/messages_cs_CZ.properties | 1 + .../src/main/resources/messages_da_DK.properties | 1 + .../src/main/resources/messages_de_DE.properties | 1 + .../src/main/resources/messages_el_GR.properties | 1 + .../src/main/resources/messages_en_GB.properties | 1 + .../src/main/resources/messages_en_US.properties | 1 + .../src/main/resources/messages_es_ES.properties | 1 + .../src/main/resources/messages_eu_ES.properties | 1 + .../src/main/resources/messages_fa_IR.properties | 1 + .../src/main/resources/messages_fr_FR.properties | 1 + .../src/main/resources/messages_ga_IE.properties | 1 + .../src/main/resources/messages_hi_IN.properties | 1 + .../src/main/resources/messages_hr_HR.properties | 1 + .../src/main/resources/messages_hu_HU.properties | 1 + .../src/main/resources/messages_id_ID.properties | 1 + .../src/main/resources/messages_it_IT.properties | 1 + .../src/main/resources/messages_ja_JP.properties | 1 + .../src/main/resources/messages_ko_KR.properties | 1 + .../src/main/resources/messages_ml_IN.properties | 1 + .../src/main/resources/messages_nl_NL.properties | 1 + .../src/main/resources/messages_no_NB.properties | 1 + .../src/main/resources/messages_pl_PL.properties | 1 + .../src/main/resources/messages_pt_BR.properties | 1 + .../src/main/resources/messages_pt_PT.properties | 1 + .../src/main/resources/messages_ro_RO.properties | 1 + .../src/main/resources/messages_ru_RU.properties | 1 + .../src/main/resources/messages_sk_SK.properties | 1 + .../src/main/resources/messages_sl_SI.properties | 1 + .../main/resources/messages_sr_LATN_RS.properties | 1 + .../src/main/resources/messages_sv_SE.properties | 1 + .../src/main/resources/messages_th_TH.properties | 1 + .../src/main/resources/messages_tr_TR.properties | 1 + .../src/main/resources/messages_uk_UA.properties | 1 + .../src/main/resources/messages_vi_VN.properties | 1 + .../src/main/resources/messages_zh_CN.properties | 1 + .../src/main/resources/messages_zh_TW.properties | 1 + app/core/src/main/resources/settings.yml.template | 1 + .../resources/templates/convert/pdf-to-img.html | 15 +++++++++++++++ devGuide/DeveloperGuide.md | 1 + 47 files changed, 77 insertions(+), 3 deletions(-) diff --git a/app/common/src/main/java/stirling/software/common/model/ApplicationProperties.java b/app/common/src/main/java/stirling/software/common/model/ApplicationProperties.java index 802a55831..fb93ef345 100644 --- a/app/common/src/main/java/stirling/software/common/model/ApplicationProperties.java +++ b/app/common/src/main/java/stirling/software/common/model/ApplicationProperties.java @@ -311,6 +311,7 @@ public class ApplicationProperties { private Boolean enableAnalytics; private Datasource datasource; private Boolean disableSanitize; + private int maxDPI; private Boolean enableUrlToPDF; private Html html = new Html(); private CustomPaths customPaths = new CustomPaths(); diff --git a/app/common/src/main/java/stirling/software/common/util/PdfUtils.java b/app/common/src/main/java/stirling/software/common/util/PdfUtils.java index ec269e47d..6f4305bd3 100644 --- a/app/common/src/main/java/stirling/software/common/util/PdfUtils.java +++ b/app/common/src/main/java/stirling/software/common/util/PdfUtils.java @@ -35,6 +35,7 @@ import io.github.pixee.security.Filenames; import lombok.extern.slf4j.Slf4j; +import stirling.software.common.model.ApplicationProperties; import stirling.software.common.service.CustomPDFDocumentFactory; @Slf4j @@ -145,13 +146,18 @@ public class PdfUtils { throws IOException, Exception { // Validate and limit DPI to prevent excessive memory usage - final int MAX_SAFE_DPI = 500; // Maximum safe DPI to prevent memory issues - if (DPI > MAX_SAFE_DPI) { + int maxSafeDpi = 500; // Default maximum safe DPI + ApplicationProperties properties = + ApplicationContextProvider.getBean(ApplicationProperties.class); + if (properties != null && properties.getSystem() != null) { + maxSafeDpi = properties.getSystem().getMaxDPI(); + } + if (DPI > maxSafeDpi) { throw ExceptionUtils.createIllegalArgumentException( "error.dpiExceedsLimit", "DPI value {0} exceeds maximum safe limit of {1}. High DPI values can cause memory issues and crashes. Please use a lower DPI value.", DPI, - MAX_SAFE_DPI); + maxSafeDpi); } try (PDDocument document = pdfDocumentFactory.load(inputStream)) { diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java b/app/core/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java index 34f8a8daa..1c05aaabd 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java @@ -8,6 +8,8 @@ import org.springframework.web.servlet.ModelAndView; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.tags.Tag; +import stirling.software.common.model.ApplicationProperties; +import stirling.software.common.util.ApplicationContextProvider; import stirling.software.common.util.CheckProgramInstall; @Controller @@ -62,6 +64,13 @@ public class ConverterWebController { @Hidden public String pdfToimgForm(Model model) { boolean isPython = CheckProgramInstall.isPythonAvailable(); + ApplicationProperties properties = + ApplicationContextProvider.getBean(ApplicationProperties.class); + if (properties != null && properties.getSystem() != null) { + model.addAttribute("maxDPI", properties.getSystem().getMaxDPI()); + } else { + model.addAttribute("maxDPI", 500); // Default value if not set + } model.addAttribute("isPython", isPython); model.addAttribute("currentPage", "pdf-to-img"); return "convert/pdf-to-img"; diff --git a/app/core/src/main/resources/messages_ar_AR.properties b/app/core/src/main/resources/messages_ar_AR.properties index 2993800ac..841bdd285 100644 --- a/app/core/src/main/resources/messages_ar_AR.properties +++ b/app/core/src/main/resources/messages_ar_AR.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=نوع اللون pdfToImage.color=اللون pdfToImage.grey=تدرج الرمادي pdfToImage.blackwhite=أبيض وأسود (قد يفقد البيانات!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=تحويل pdfToImage.info=Python غير مثبت. مطلوب لتحويل WebP. pdfToImage.placeholder=(مثال: 1,2,8 أو 4,7,12-16 أو 2n-1) diff --git a/app/core/src/main/resources/messages_az_AZ.properties b/app/core/src/main/resources/messages_az_AZ.properties index c719d7139..5da8d541b 100644 --- a/app/core/src/main/resources/messages_az_AZ.properties +++ b/app/core/src/main/resources/messages_az_AZ.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Rəng Tipi pdfToImage.color=Rəng pdfToImage.grey=Boz Tonlama pdfToImage.blackwhite=Qara və Ağ (Data İtə Bilər) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Çevir pdfToImage.info=Python Yüklü Deyil.WebP Çevirməsi Üçün Vacibdir pdfToImage.placeholder=(məsələn, 1,2,8 və ya 4,7,12-16 və ya 2n-1) diff --git a/app/core/src/main/resources/messages_bg_BG.properties b/app/core/src/main/resources/messages_bg_BG.properties index eaaeb5d95..3d3c89de0 100644 --- a/app/core/src/main/resources/messages_bg_BG.properties +++ b/app/core/src/main/resources/messages_bg_BG.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Тип цвят pdfToImage.color=Цвят pdfToImage.grey=Скала на сивото pdfToImage.blackwhite=Черно и бяло (може да загубите данни!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Преобразуване pdfToImage.info=Python не е инсталиран. Изисква се за конвертиране на WebP. pdfToImage.placeholder=(e.g. 1,2,8 or 4,7,12-16 or 2n-1) diff --git a/app/core/src/main/resources/messages_bo_CN.properties b/app/core/src/main/resources/messages_bo_CN.properties index d84b4a387..b5aba5f6a 100644 --- a/app/core/src/main/resources/messages_bo_CN.properties +++ b/app/core/src/main/resources/messages_bo_CN.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=ཚོས་མདོག་གི་རིགས། pdfToImage.color=ཚོས་མདོག pdfToImage.grey=སྐྱ་མདོག pdfToImage.blackwhite=དཀར་ནག (གནས་ཚུལ་བརླག་སྲིད།) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=བསྒྱུར་བ། pdfToImage.info=Python སྒྲིག་འཇུག་བྱས་མི་འདུག WebP བསྒྱུར་བར་དགོས་མཁོ་ཡིན། pdfToImage.placeholder=(དཔེར་ན། 1,2,8 ཡང་ན་ 4,7,12-16 ཡང་ན་ 2n-1) diff --git a/app/core/src/main/resources/messages_ca_CA.properties b/app/core/src/main/resources/messages_ca_CA.properties index 30a7f7624..144c9bac1 100644 --- a/app/core/src/main/resources/messages_ca_CA.properties +++ b/app/core/src/main/resources/messages_ca_CA.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Tipus de Color pdfToImage.color=Color pdfToImage.grey=Escala de Grisos pdfToImage.blackwhite=Blanc i Negre (Pot perdre dades!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Converteix pdfToImage.info=Python no està instal·lat. És necessari per a la conversió a WebP. pdfToImage.placeholder=(p. ex. 1,2,8 o 4,7,12-16 o 2n-1) diff --git a/app/core/src/main/resources/messages_cs_CZ.properties b/app/core/src/main/resources/messages_cs_CZ.properties index 7eb854aaa..e7b60818e 100644 --- a/app/core/src/main/resources/messages_cs_CZ.properties +++ b/app/core/src/main/resources/messages_cs_CZ.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Typ barev pdfToImage.color=Barevný pdfToImage.grey=Stupně šedi pdfToImage.blackwhite=Černobílý (Může dojít ke ztrátě dat!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Převést pdfToImage.info=Python není nainstalován. Vyžadován pro konverzi do WebP. pdfToImage.placeholder=(např. 1,2,8 nebo 4,7,12-16 nebo 2n-1) diff --git a/app/core/src/main/resources/messages_da_DK.properties b/app/core/src/main/resources/messages_da_DK.properties index 118e545e6..6b07c4a7d 100644 --- a/app/core/src/main/resources/messages_da_DK.properties +++ b/app/core/src/main/resources/messages_da_DK.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Farvetype pdfToImage.color=Farve pdfToImage.grey=Gråtone pdfToImage.blackwhite=Sort og Hvid (Kan miste data!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Konvertér pdfToImage.info=Python er ikke installeret. Påkrævet for WebP-konvertering. pdfToImage.placeholder=(f.eks. 1,2,8 eller 4,7,12-16 eller 2n-1) diff --git a/app/core/src/main/resources/messages_de_DE.properties b/app/core/src/main/resources/messages_de_DE.properties index 5f01823f1..c78fbc31c 100644 --- a/app/core/src/main/resources/messages_de_DE.properties +++ b/app/core/src/main/resources/messages_de_DE.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Farbtyp pdfToImage.color=Farbe pdfToImage.grey=Graustufen pdfToImage.blackwhite=Schwarzweiß (Datenverlust möglich!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Umwandeln pdfToImage.info=Python ist nicht installiert. Erforderlich für die WebP-Konvertierung. pdfToImage.placeholder=(z.B. 1,2,8 oder 4,7,12-16 oder 2n-1) diff --git a/app/core/src/main/resources/messages_el_GR.properties b/app/core/src/main/resources/messages_el_GR.properties index 82fc98ef9..773d873d2 100644 --- a/app/core/src/main/resources/messages_el_GR.properties +++ b/app/core/src/main/resources/messages_el_GR.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Τύπος χρώματος pdfToImage.color=Έγχρωμο pdfToImage.grey=Κλίμακα του γκρι pdfToImage.blackwhite=Ασπρόμαυρο (Μπορεί να χαθούν δεδομένα!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Μετατροπή pdfToImage.info=Η Python δεν είναι εγκατεστημένη. Απαιτείται για μετατροπή WebP. pdfToImage.placeholder=(π.χ. 1,2,8 ή 4,7,12-16 ή 2n-1) diff --git a/app/core/src/main/resources/messages_en_GB.properties b/app/core/src/main/resources/messages_en_GB.properties index f78e80b65..a905a1f4d 100644 --- a/app/core/src/main/resources/messages_en_GB.properties +++ b/app/core/src/main/resources/messages_en_GB.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Colour type pdfToImage.color=Colour pdfToImage.grey=Greyscale pdfToImage.blackwhite=Black and White (May lose data!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Convert pdfToImage.info=Python is not installed. Required for WebP conversion. pdfToImage.placeholder=(e.g. 1,2,8 or 4,7,12-16 or 2n-1) diff --git a/app/core/src/main/resources/messages_en_US.properties b/app/core/src/main/resources/messages_en_US.properties index eb8a9236c..34d5d81c4 100644 --- a/app/core/src/main/resources/messages_en_US.properties +++ b/app/core/src/main/resources/messages_en_US.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Color type pdfToImage.color=Color pdfToImage.grey=Grayscale pdfToImage.blackwhite=Black and White (May lose data!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Convert pdfToImage.info=Python is not installed. Required for WebP conversion. pdfToImage.placeholder=(e.g. 1,2,8 or 4,7,12-16 or 2n-1) diff --git a/app/core/src/main/resources/messages_es_ES.properties b/app/core/src/main/resources/messages_es_ES.properties index 5601e76c0..d6ba297c3 100644 --- a/app/core/src/main/resources/messages_es_ES.properties +++ b/app/core/src/main/resources/messages_es_ES.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Tipo de color pdfToImage.color=Color pdfToImage.grey=Escala de grises pdfToImage.blackwhite=Blanco y Negro (¡Puede perder datos!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Convertir pdfToImage.info=Python no está instalado. Se requiere para la conversión WebP. pdfToImage.placeholder=(por ejemplo 1,2,8 o 4,7,12-16 o 2n-1) diff --git a/app/core/src/main/resources/messages_eu_ES.properties b/app/core/src/main/resources/messages_eu_ES.properties index bda28227f..58f20132a 100644 --- a/app/core/src/main/resources/messages_eu_ES.properties +++ b/app/core/src/main/resources/messages_eu_ES.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Kolore-mota pdfToImage.color=Kolorea pdfToImage.grey=Gris-eskala pdfToImage.blackwhite=Zuria eta Beltza (Datuak galdu ditzake!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Bihurtu pdfToImage.info=Python is not installed. Required for WebP conversion. pdfToImage.placeholder=(e.g. 1,2,8 or 4,7,12-16 or 2n-1) diff --git a/app/core/src/main/resources/messages_fa_IR.properties b/app/core/src/main/resources/messages_fa_IR.properties index a1cfbe5b5..33a3baa7e 100644 --- a/app/core/src/main/resources/messages_fa_IR.properties +++ b/app/core/src/main/resources/messages_fa_IR.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=نوع رنگ pdfToImage.color=رنگ pdfToImage.grey=خاکستری pdfToImage.blackwhite=سیاه و سفید (ممکن است اطلاعات از دست برود!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=تبدیل pdfToImage.info=پایتون نصب نشده است. برای تبدیل WebP لازم است. pdfToImage.placeholder=(مثال: 1,2,8 یا 4,7,12-16 یا 2n-1) diff --git a/app/core/src/main/resources/messages_fr_FR.properties b/app/core/src/main/resources/messages_fr_FR.properties index 2a3a7c6b5..4087137f8 100644 --- a/app/core/src/main/resources/messages_fr_FR.properties +++ b/app/core/src/main/resources/messages_fr_FR.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Type d'impression pdfToImage.color=Couleur pdfToImage.grey=Niveaux de gris pdfToImage.blackwhite=Noir et blanc (peut engendrer une perte de données !) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Convertir pdfToImage.info=Python n'est pas installé. Nécessaire pour la conversion WebP. pdfToImage.placeholder=(par exemple : 1,2,8 ou 4,7,12-16 ou 2n-1) diff --git a/app/core/src/main/resources/messages_ga_IE.properties b/app/core/src/main/resources/messages_ga_IE.properties index 7a5d87de3..d90d14cc7 100644 --- a/app/core/src/main/resources/messages_ga_IE.properties +++ b/app/core/src/main/resources/messages_ga_IE.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Cineál dath pdfToImage.color=Dath pdfToImage.grey=Scála Liath pdfToImage.blackwhite=Dubh agus Bán (D’fhéadfadh sonraí a chailleadh!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Tiontaigh pdfToImage.info=Níl Python suiteáilte. Ag teastáil le haghaidh comhshó WebP. pdfToImage.placeholder=(m.sh. 1,2,8 nó 4,7,12-16 nó 2n-1) diff --git a/app/core/src/main/resources/messages_hi_IN.properties b/app/core/src/main/resources/messages_hi_IN.properties index ced3f3300..188de81f8 100644 --- a/app/core/src/main/resources/messages_hi_IN.properties +++ b/app/core/src/main/resources/messages_hi_IN.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=रंग प्रकार pdfToImage.color=रंग pdfToImage.grey=ग्रेस्केल pdfToImage.blackwhite=काला और सफेद (डेटा खो सकता है!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=बदलें pdfToImage.info=Python स्थापित नहीं है। WebP रूपांतरण के लिए आवश्यक है। pdfToImage.placeholder=(जैसे 1,2,8 या 4,7,12-16 या 2n-1) diff --git a/app/core/src/main/resources/messages_hr_HR.properties b/app/core/src/main/resources/messages_hr_HR.properties index f311a93dd..061f08497 100644 --- a/app/core/src/main/resources/messages_hr_HR.properties +++ b/app/core/src/main/resources/messages_hr_HR.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Tip boje pdfToImage.color=Boja pdfToImage.grey=Sivi tonovi pdfToImage.blackwhite=Crno-bijelo (mogu se izgubiti podaci!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Pretvori pdfToImage.info=Python nije instaliran. Treba je za konverziju na WebP. pdfToImage.placeholder=(t.j. 1,2,8 ili 4,7,12-16 ili 2n-1) diff --git a/app/core/src/main/resources/messages_hu_HU.properties b/app/core/src/main/resources/messages_hu_HU.properties index 3132d4fdc..a4cd82005 100644 --- a/app/core/src/main/resources/messages_hu_HU.properties +++ b/app/core/src/main/resources/messages_hu_HU.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Színtípus pdfToImage.color=Színes pdfToImage.grey=Szürkeárnyalatos pdfToImage.blackwhite=Fekete-fehér (adatvesztéssel járhat!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Konvertálás pdfToImage.info=Python nincs telepítve. WebP konverzióhoz szükséges. pdfToImage.placeholder=(pl. 1,2,8 vagy 4,7,12-16 vagy 2n-1) diff --git a/app/core/src/main/resources/messages_id_ID.properties b/app/core/src/main/resources/messages_id_ID.properties index 3a706535a..c75656b6e 100644 --- a/app/core/src/main/resources/messages_id_ID.properties +++ b/app/core/src/main/resources/messages_id_ID.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Tipe warna pdfToImage.color=Warna pdfToImage.grey=Skala abu-abu pdfToImage.blackwhite=Black and White (Bisa kehilangan data!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Konversi pdfToImage.info=Python tidak terinstal. Diperlukan untuk konversi WebP. pdfToImage.placeholder=(misalnya 1,2,8 atau 4,7,12-16 atau 2n-1) diff --git a/app/core/src/main/resources/messages_it_IT.properties b/app/core/src/main/resources/messages_it_IT.properties index bba74394b..be48d9e6f 100644 --- a/app/core/src/main/resources/messages_it_IT.properties +++ b/app/core/src/main/resources/messages_it_IT.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Tipo di colore pdfToImage.color=A colori pdfToImage.grey=Scala di grigi pdfToImage.blackwhite=Bianco e Nero (potresti perdere dettagli!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Converti pdfToImage.info=Python non è installato.È richiesto per la conversione WebP. pdfToImage.placeholder=(es. 1,2,8 o 4,7,12-16 o 2n-1) diff --git a/app/core/src/main/resources/messages_ja_JP.properties b/app/core/src/main/resources/messages_ja_JP.properties index bdb30dc7b..12f490166 100644 --- a/app/core/src/main/resources/messages_ja_JP.properties +++ b/app/core/src/main/resources/messages_ja_JP.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=カラーモード pdfToImage.color=カラー pdfToImage.grey=グレースケール pdfToImage.blackwhite=白黒(データが失われる可能性があります!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=変換 pdfToImage.info=Pythonがインストールされていません。WebPの変換に必要です。 pdfToImage.placeholder=(例:1,2,8、4,7,12-16、2n-1) diff --git a/app/core/src/main/resources/messages_ko_KR.properties b/app/core/src/main/resources/messages_ko_KR.properties index 76f7ca715..70c4178d4 100644 --- a/app/core/src/main/resources/messages_ko_KR.properties +++ b/app/core/src/main/resources/messages_ko_KR.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=색상 유형 pdfToImage.color=컬러 pdfToImage.grey=그레이스케일 pdfToImage.blackwhite=흑백 (데이터 손실 가능성 있음!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=변환 pdfToImage.info=WebP 변환에는 Python이 필요합니다. Python이 설치되지 않았습니다. pdfToImage.placeholder=(예: 1,2,8 또는 4,7,12-16 또는 2n-1) diff --git a/app/core/src/main/resources/messages_ml_IN.properties b/app/core/src/main/resources/messages_ml_IN.properties index 164209212..26d18fd4d 100644 --- a/app/core/src/main/resources/messages_ml_IN.properties +++ b/app/core/src/main/resources/messages_ml_IN.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=നിറ തരം pdfToImage.color=നിറം pdfToImage.grey=ഗ്രേസ്കെയിൽ pdfToImage.blackwhite=കറുപ്പും വെളുപ്പും (ഡാറ്റ നഷ്ടപ്പെട്ടേക്കാം!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=പരിവർത്തനം ചെയ്യുക pdfToImage.info=പൈത്തൺ ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. WebP പരിവർത്തനത്തിന് ആവശ്യമാണ്. pdfToImage.placeholder=(ഉദാ. 1,2,8 അല്ലെങ്കിൽ 4,7,12-16 അല്ലെങ്കിൽ 2n-1) diff --git a/app/core/src/main/resources/messages_nl_NL.properties b/app/core/src/main/resources/messages_nl_NL.properties index 9a1af6e0a..ac001d2a8 100644 --- a/app/core/src/main/resources/messages_nl_NL.properties +++ b/app/core/src/main/resources/messages_nl_NL.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Kleurtype pdfToImage.color=Kleur pdfToImage.grey=Grijstinten pdfToImage.blackwhite=Zwart en wit (kan data verliezen!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Omzetten pdfToImage.info=Python is niet geïnstalleerd. Vereist voor WebP-conversie. pdfToImage.placeholder=(bijv. 1,2,8 of 4,7,12-16 of 2n-1) diff --git a/app/core/src/main/resources/messages_no_NB.properties b/app/core/src/main/resources/messages_no_NB.properties index 03d42816d..f16c1f898 100644 --- a/app/core/src/main/resources/messages_no_NB.properties +++ b/app/core/src/main/resources/messages_no_NB.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Farge type pdfToImage.color=Farge pdfToImage.grey=Gråtone pdfToImage.blackwhite=Svart-hvitt (kan miste data!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Konverter pdfToImage.info=Python is not installed. Required for WebP conversion. pdfToImage.placeholder=(f.eks. 1,2,8 eller 4,7,12-16 eller 2n-1) diff --git a/app/core/src/main/resources/messages_pl_PL.properties b/app/core/src/main/resources/messages_pl_PL.properties index 4963d7bc6..442540fbb 100644 --- a/app/core/src/main/resources/messages_pl_PL.properties +++ b/app/core/src/main/resources/messages_pl_PL.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Rodzaj koloru pdfToImage.color=Kolor pdfToImage.grey=Odcień szarości pdfToImage.blackwhite=Czarno-biały (może spowodować utratę danych!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Konwertuj pdfToImage.info=Python nie został zainstalowany. Jest wymagany do konwersji WebP. pdfToImage.placeholder=(przykład 1,2,8 lub 2n-1) diff --git a/app/core/src/main/resources/messages_pt_BR.properties b/app/core/src/main/resources/messages_pt_BR.properties index 552139b52..5db475798 100644 --- a/app/core/src/main/resources/messages_pt_BR.properties +++ b/app/core/src/main/resources/messages_pt_BR.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Cor de saída: pdfToImage.color=Colorido pdfToImage.grey=Escala de Cinza pdfToImage.blackwhite=Preto e Branco (pode perder informações!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Converter pdfToImage.info=Python não está instalado. Necessário para conversão WebP. pdfToImage.placeholder=(por exemplo 1,2,8 ou 4,7,12-16 ou 2n-1) diff --git a/app/core/src/main/resources/messages_pt_PT.properties b/app/core/src/main/resources/messages_pt_PT.properties index dc99a45c9..aad725305 100644 --- a/app/core/src/main/resources/messages_pt_PT.properties +++ b/app/core/src/main/resources/messages_pt_PT.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Tipo de cor pdfToImage.color=Cor pdfToImage.grey=Escala de Cinza pdfToImage.blackwhite=Preto e Branco (Pode perder dados!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Converter pdfToImage.info=Python não está instalado. Necessário para conversão WebP. pdfToImage.placeholder=(ex. 1,2,8 ou 4,7,12-16 ou 2n-1) diff --git a/app/core/src/main/resources/messages_ro_RO.properties b/app/core/src/main/resources/messages_ro_RO.properties index 25bc477b1..d785d49c6 100644 --- a/app/core/src/main/resources/messages_ro_RO.properties +++ b/app/core/src/main/resources/messages_ro_RO.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Tip culoare pdfToImage.color=Culoare pdfToImage.grey=Scală de gri pdfToImage.blackwhite=Alb și negru (Poate pierde date!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Convertește pdfToImage.info=Python nu este instalat. Necesar pentru conversia WebP. pdfToImage.placeholder=(ex. 1,2,8 sau 4,7,12-16 sau 2n-1) diff --git a/app/core/src/main/resources/messages_ru_RU.properties b/app/core/src/main/resources/messages_ru_RU.properties index e414408f1..64bb21a2c 100644 --- a/app/core/src/main/resources/messages_ru_RU.properties +++ b/app/core/src/main/resources/messages_ru_RU.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Тип цвета pdfToImage.color=Цветной pdfToImage.grey=Оттенки серого pdfToImage.blackwhite=Черно-белый (возможна потеря данных!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Преобразовать pdfToImage.info=Python не установлен. Требуется для конвертации в WebP. pdfToImage.placeholder=(например, 1,2,8 или 4,7,12-16 или 2n-1) diff --git a/app/core/src/main/resources/messages_sk_SK.properties b/app/core/src/main/resources/messages_sk_SK.properties index 094265d29..6325a85e9 100644 --- a/app/core/src/main/resources/messages_sk_SK.properties +++ b/app/core/src/main/resources/messages_sk_SK.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Typ farby pdfToImage.color=Farba pdfToImage.grey=Odtiene šedej pdfToImage.blackwhite=Čierno-biele (Môže stratiť údaje!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Konvertovať pdfToImage.info=Python is not installed. Required for WebP conversion. pdfToImage.placeholder=(napr. 1,2,8 alebo 4,7,12-16 alebo 2n-1) diff --git a/app/core/src/main/resources/messages_sl_SI.properties b/app/core/src/main/resources/messages_sl_SI.properties index f75e714af..698e5aee0 100644 --- a/app/core/src/main/resources/messages_sl_SI.properties +++ b/app/core/src/main/resources/messages_sl_SI.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Vrsta barve pdfToImage.color=Barva pdfToImage.grey=Sivine pdfToImage.blackwhite=Črno-belo (Lahko izgubite podatke!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Pretvori pdfToImage.info=Python ni nameščen. Zahtevano za pretvorbo WebP. pdfToImage.placeholder=(npr. 1,2,8 ali 4,7,12-16 ali 2n-1) diff --git a/app/core/src/main/resources/messages_sr_LATN_RS.properties b/app/core/src/main/resources/messages_sr_LATN_RS.properties index 809a785ee..968c277e9 100644 --- a/app/core/src/main/resources/messages_sr_LATN_RS.properties +++ b/app/core/src/main/resources/messages_sr_LATN_RS.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Režim boja: pdfToImage.color=Kolor pdfToImage.grey=Monohromatski pdfToImage.blackwhite=Crno-belo (Može izgubiti detalje!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Konvertuj pdfToImage.info=Python nije instaliran. Neophodan je za WebP konverziju. pdfToImage.placeholder=(npr. 1,2,8 ili 4,7,12-16 ili 2n-1) diff --git a/app/core/src/main/resources/messages_sv_SE.properties b/app/core/src/main/resources/messages_sv_SE.properties index 086789fcd..31c250caa 100644 --- a/app/core/src/main/resources/messages_sv_SE.properties +++ b/app/core/src/main/resources/messages_sv_SE.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Färgtyp pdfToImage.color=Färg pdfToImage.grey=Gråskala pdfToImage.blackwhite=Svartvitt (kan förlora data!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Konvertera pdfToImage.info=Python är inte installerat. Krävs för WebP-konvertering. pdfToImage.placeholder=(t.ex. 1,2,8 eller 4,7,12-16 eller 2n-1) diff --git a/app/core/src/main/resources/messages_th_TH.properties b/app/core/src/main/resources/messages_th_TH.properties index 2637eadf2..df50423ca 100644 --- a/app/core/src/main/resources/messages_th_TH.properties +++ b/app/core/src/main/resources/messages_th_TH.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=ประเภทสี pdfToImage.color=สี pdfToImage.grey=ระดับสีเทา pdfToImage.blackwhite=ขาวดำ (อาจสูญเสียข้อมูล!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=แปลง pdfToImage.info=Python ไม่มีการติดตั้ง จำเป็นสำหรับการแปลง WebP pdfToImage.placeholder=(เช่น 1,2,8 หรือ 4,7,12-16 หรือ 2n-1) diff --git a/app/core/src/main/resources/messages_tr_TR.properties b/app/core/src/main/resources/messages_tr_TR.properties index 2da6244ff..01e946c56 100644 --- a/app/core/src/main/resources/messages_tr_TR.properties +++ b/app/core/src/main/resources/messages_tr_TR.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Renk türü pdfToImage.color=Renk pdfToImage.grey=Gri tonlama pdfToImage.blackwhite=Siyah ve Beyaz (Veri kaybolabilir!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Dönüştür pdfToImage.info=Python kurulu değil. WebP dönüşümü için gereklidir. pdfToImage.placeholder=(örneğin 1,2,8 veya 4,7,12-16 ya da 2n-1) diff --git a/app/core/src/main/resources/messages_uk_UA.properties b/app/core/src/main/resources/messages_uk_UA.properties index 89518dca8..16add9977 100644 --- a/app/core/src/main/resources/messages_uk_UA.properties +++ b/app/core/src/main/resources/messages_uk_UA.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Тип кольору pdfToImage.color=Колір pdfToImage.grey=Відтінки сірого pdfToImage.blackwhite=Чорно-білий (може втратити дані!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Конвертувати pdfToImage.info=Python не встановлено. Необхідно для конвертації WebP. pdfToImage.placeholder=(наприклад 1,2,8 або 4,7,12-16 або 2n-1) diff --git a/app/core/src/main/resources/messages_vi_VN.properties b/app/core/src/main/resources/messages_vi_VN.properties index dcf69cce8..c9e070e77 100644 --- a/app/core/src/main/resources/messages_vi_VN.properties +++ b/app/core/src/main/resources/messages_vi_VN.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=Loại màu pdfToImage.color=Màu pdfToImage.grey=Thang độ xám pdfToImage.blackwhite=Đen trắng (Có thể mất dữ liệu!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=Chuyển đổi pdfToImage.info=Python is not installed. Required for WebP conversion. pdfToImage.placeholder=(ví dụ: 1,2,8 hoặc 4,7,12-16 hoặc 2n-1) diff --git a/app/core/src/main/resources/messages_zh_CN.properties b/app/core/src/main/resources/messages_zh_CN.properties index 247b6ea70..75957b1b0 100644 --- a/app/core/src/main/resources/messages_zh_CN.properties +++ b/app/core/src/main/resources/messages_zh_CN.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=颜色类型 pdfToImage.color=颜色 pdfToImage.grey=灰度 pdfToImage.blackwhite=黑白(可能会丢失数据!)。 +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=转换 pdfToImage.info=WebP 转换需要安装 Python pdfToImage.placeholder=(例如:1,2,8 或 4,7,12-16 或 2n-1) diff --git a/app/core/src/main/resources/messages_zh_TW.properties b/app/core/src/main/resources/messages_zh_TW.properties index bbd3cd495..3968b07d2 100644 --- a/app/core/src/main/resources/messages_zh_TW.properties +++ b/app/core/src/main/resources/messages_zh_TW.properties @@ -1402,6 +1402,7 @@ pdfToImage.colorType=顏色類型 pdfToImage.color=顏色 pdfToImage.grey=灰度 pdfToImage.blackwhite=黑白(可能會遺失資料!) +pdfToImage.dpi=DPI (The server limit is {0} dpi) pdfToImage.submit=轉換 pdfToImage.info=尚未安裝 Python。需要安裝 Python 才能進行 WebP 轉換。 pdfToImage.placeholder=(例如 1,2,8 或 4,7,12-16 或 2n-1) diff --git a/app/core/src/main/resources/settings.yml.template b/app/core/src/main/resources/settings.yml.template index cf22262e4..1af95f852 100644 --- a/app/core/src/main/resources/settings.yml.template +++ b/app/core/src/main/resources/settings.yml.template @@ -108,6 +108,7 @@ system: enableAnalytics: null # set to 'true' to enable analytics, set to 'false' to disable analytics; for enterprise users, this is set to true enableUrlToPDF: false # Set to 'true' to enable URL to PDF, INTERNAL ONLY, known security issues, should not be used externally disableSanitize: false # set to true to disable Sanitize HTML; (can lead to injections in HTML) + maxDPI: 500 # Maximum allowed DPI for PDF to image conversion html: urlSecurity: enabled: true # Enable URL security restrictions for HTML processing diff --git a/app/core/src/main/resources/templates/convert/pdf-to-img.html b/app/core/src/main/resources/templates/convert/pdf-to-img.html index b4f2b0657..78c7ca901 100644 --- a/app/core/src/main/resources/templates/convert/pdf-to-img.html +++ b/app/core/src/main/resources/templates/convert/pdf-to-img.html @@ -4,6 +4,21 @@ + diff --git a/devGuide/DeveloperGuide.md b/devGuide/DeveloperGuide.md index c37be9b84..fb8911eaf 100644 --- a/devGuide/DeveloperGuide.md +++ b/devGuide/DeveloperGuide.md @@ -295,6 +295,7 @@ Stirling-PDF can be customized through environment variables or a `settings.yml` - Security settings - UI customization - Endpoint management +- Maximum DPI for PDF to image conversion (`system.maxDPI`) When using Docker, pass environment variables using the `-e` flag or in your `docker-compose.yml` file. From 6cd64a22ba42f42d19e34c32f0dca0ce0ada9dba Mon Sep 17 00:00:00 2001 From: Ludy Date: Fri, 8 Aug 2025 11:36:30 +0200 Subject: [PATCH 2/2] build(local): simplify writeVersion task with WriteProperties plugin and enable build caching (#4139) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description of Changes - **What was changed**: - Replaced the custom `writeVersion` task in `build.gradle` with the built-in `WriteProperties` plugin configuration. - Updated `gradle.properties` to enable `org.gradle.caching` (uncommented) for local development. - **Why the change was made**: - To reduce boilerplate and leverage Gradle’s native property-writing capabilities for maintaining the version file. - To improve build performance by reusing outputs via the Gradle build cache. - **Scope**: - These updates only affect local development and do not change production or CI script --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [x] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/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/devGuide/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] 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/devGuide/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/devGuide/DeveloperGuide.md#6-testing) for more details. --- build.gradle | 27 +++++---------------------- gradle.properties | 3 ++- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/build.gradle b/build.gradle index 627d7b5c1..fd9abf7c8 100644 --- a/build.gradle +++ b/build.gradle @@ -65,28 +65,11 @@ allprojects { } } -tasks.register('writeVersion') { - def propsFile = file("$projectDir/app/common/src/main/resources/version.properties") - def propsDir = propsFile.parentFile - - doLast { - if (propsDir.exists()) { - if (propsFile.exists()) { - println "File exists: $propsFile" - } else { - println "$propsFile does not exist. Creating file." - propsFile.createNewFile() - } - } else { - println "Creating directory: $propsDir" - propsDir.mkdirs() - propsFile.createNewFile() - } - - def props = new Properties() - props.setProperty("version", version) - props.store(propsFile.newWriter(), null) - } +tasks.register('writeVersion', WriteProperties) { + outputFile = layout.projectDirectory.file('app/common/src/main/resources/version.properties') + println "Writing version.properties to ${outputFile.path}" + comment "${new Date()}" + property 'version', project.provider { project.version.toString() } } tasks.named('createExe') { diff --git a/gradle.properties b/gradle.properties index 9184cf5c6..8a390f592 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,6 +2,7 @@ org.gradle.parallel=true # Enables build caching to reuse outputs from previous builds for faster execution -# org.gradle.caching=true +org.gradle.caching=true org.gradle.build-scan=true +# org.gradle.configuration-cache=true