From 96b080528bb5f3b1a6646a8fa4cfe92f19d6757b Mon Sep 17 00:00:00 2001 From: arsvendg <106372750+arsvendg@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:44:44 +0200 Subject: [PATCH 01/18] Changes norwegian translation (#1639) * Minor correction * Endringer oversettelser * Changes norwegian translation --- src/main/resources/messages_no_NB.properties | 36 ++++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/main/resources/messages_no_NB.properties b/src/main/resources/messages_no_NB.properties index 5f92614e..717eb8a5 100644 --- a/src/main/resources/messages_no_NB.properties +++ b/src/main/resources/messages_no_NB.properties @@ -192,21 +192,21 @@ adminUserSettings.changeUserRole=Endre Brukerens Rolle adminUserSettings.authenticated=Autentisert -database.title=Database Import/Export -database.header=Database Import/Export -database.fileName=File Name -database.creationDate=Creation Date -database.fileSize=File Size -database.deleteBackupFile=Delete Backup File -database.importBackupFile=Import Backup File -database.downloadBackupFile=Download Backup File -database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application. -database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention. -database.submit=Import Backup -database.importIntoDatabaseSuccessed=Import into database successed -database.fileNotFound=File not Found -database.fileNullOrEmpty=File must not be null or empty -database.failedImportFile=Failed Import File +database.title=Database Import/Eksport +database.header=Database Import/Eksport +database.fileName=Fil navn +database.creationDate=Opprettelsesdato +database.fileSize=Filstørrelse +database.deleteBackupFile=Slett sikkerhetskopifil +database.importBackupFile=Importer sikkerhetskopifil +database.downloadBackupFile=Last ned sikkerhetskopifil +database.info_1=Når du importerer data, er det avgjørende å sikre riktig struktur. Hvis du er usikker på hva du gjør, bør du søke råd og støtte fra en profesjonell. En feil i strukturen kan føre til applikasjonsfeil, inkludert fullstendig manglende evne til å kjøre applikasjonen. +database.info_2=Filnavnet spiller ingen rolle ved opplasting. Det vil bli omdøpt etterpå for å følge formatet backup_user_yyyyMMddHHmm.sql, for å sikre en konsekvent navnekonvensjon. +database.submit=Importer sikkerhetskopi +database.importIntoDatabaseSuccessed=Import til database vellykket +database.fileNotFound=Fil ikke funnet +database.fileNullOrEmpty=Fil må ikke være tom eller null +database.failedImportFile=Import av fil mislyktes ############# # HOME-PAGE # @@ -706,8 +706,8 @@ removeAnnotations.submit=Fjern #compare compare.title=Sammenlign compare.header=Sammenlign PDF-er -compare.highlightColor.1=Highlight Color 1: -compare.highlightColor.2=Highlight Color 2: +compare.highlightColor.1=Uthevingsfarge 1: +compare.highlightColor.2=Uthevingsfarge 2: compare.document.1=Dokument 1 compare.document.2=Dokument 2 compare.submit=Sammenlign @@ -945,7 +945,7 @@ watermark.selectText.6=Høydeavstand (Avstand mellom hvert vannmerke vertikalt): watermark.selectText.7=Opasitet (0% - 100%): watermark.selectText.8=Vannmerketype: watermark.selectText.9=Vannmerkebilde: -watermark.selectText.10=Convert PDF to PDF-Image +watermark.selectText.10=Konverter PDF til PDF-Bilde watermark.submit=Legg til vannmerke watermark.type.1=Tekst watermark.type.2=Bilde From e50391a44a3b36557c3602b0c6c018a639f3eae8 Mon Sep 17 00:00:00 2001 From: HimaGirija <68319906+HimaGirija99@users.noreply.github.com> Date: Thu, 8 Aug 2024 02:46:57 +0530 Subject: [PATCH 02/18] Added multithreaded feature for image extraction (#1641) Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> --- .../api/misc/ExtractImagesController.java | 198 +++++++++++------- 1 file changed, 123 insertions(+), 75 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java index 3931e2df..7fe27a03 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java @@ -1,19 +1,8 @@ package stirling.software.SPDF.controller.api.misc; -import java.awt.Graphics2D; -import java.awt.Image; -import java.awt.image.BufferedImage; -import java.awt.image.RenderedImage; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.HashSet; -import java.util.Set; -import java.util.zip.Deflater; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import javax.imageio.ImageIO; - +import io.github.pixee.security.Filenames; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.apache.pdfbox.Loader; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; @@ -28,14 +17,25 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; - -import io.github.pixee.security.Filenames; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; - import stirling.software.SPDF.model.api.PDFWithImageFormatRequest; import stirling.software.SPDF.utils.WebResponseUtils; +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.awt.image.RenderedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.zip.Deflater; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + @RestController @RequestMapping("/api/v1/misc") @Tag(name = "Misc", description = "Miscellaneous APIs") @@ -47,16 +47,19 @@ public class ExtractImagesController { @Operation( summary = "Extract images from a PDF file", description = - "This endpoint extracts images from a given PDF file and returns them in a zip file. Users can specify the output image format. Input:PDF Output:IMAGE/ZIP Type:SIMO") + "This endpoint extracts images from a given PDF file and returns them in a zip file. Users can specify the output image format. Input: PDF Output: IMAGE/ZIP Type: SIMO") public ResponseEntity extractImages(@ModelAttribute PDFWithImageFormatRequest request) - throws IOException { + throws IOException, InterruptedException, ExecutionException { MultipartFile file = request.getFileInput(); String format = request.getFormat(); System.out.println( - System.currentTimeMillis() + "file=" + file.getName() + ", format=" + format); + System.currentTimeMillis() + " file=" + file.getName() + ", format=" + format); PDDocument document = Loader.loadPDF(file.getBytes()); + // Determine if multithreading should be used based on PDF size or number of pages + boolean useMultithreading = shouldUseMultithreading(file, document); + // Create ByteArrayOutputStream to write zip file to byte array ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -66,71 +69,51 @@ public class ExtractImagesController { // Set compression level zos.setLevel(Deflater.BEST_COMPRESSION); - int imageIndex = 1; String filename = Filenames.toSimpleFileName(file.getOriginalFilename()) .replaceFirst("[.][^.]+$", ""); - int pageNum = 0; Set processedImages = new HashSet<>(); - // Iterate over each page - for (PDPage page : document.getPages()) { - ++pageNum; - // Extract images from page - for (COSName name : page.getResources().getXObjectNames()) { - if (page.getResources().isImageXObject(name)) { - PDImageXObject image = (PDImageXObject) page.getResources().getXObject(name); - int imageHash = image.hashCode(); - if (processedImages.contains(imageHash)) { - continue; // Skip already processed images - } - processedImages.add(imageHash); - // Convert image to desired format - RenderedImage renderedImage = image.getImage(); - BufferedImage bufferedImage = null; - if ("png".equalsIgnoreCase(format)) { - bufferedImage = - new BufferedImage( - renderedImage.getWidth(), - renderedImage.getHeight(), - BufferedImage.TYPE_INT_ARGB); - } else if ("jpeg".equalsIgnoreCase(format) || "jpg".equalsIgnoreCase(format)) { - bufferedImage = - new BufferedImage( - renderedImage.getWidth(), - renderedImage.getHeight(), - BufferedImage.TYPE_INT_RGB); - } else if ("gif".equalsIgnoreCase(format)) { - bufferedImage = - new BufferedImage( - renderedImage.getWidth(), - renderedImage.getHeight(), - BufferedImage.TYPE_BYTE_INDEXED); - } + if (useMultithreading) { + // Executor service to handle multithreading + ExecutorService executor = + Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + Set> futures = new HashSet<>(); - // Write image to zip file - String imageName = - filename + "_" + imageIndex + " (Page " + pageNum + ")." + format; - ZipEntry zipEntry = new ZipEntry(imageName); - zos.putNextEntry(zipEntry); + // Iterate over each page + for (int pgNum = 0; pgNum < document.getPages().getCount(); pgNum++) { + PDPage page = document.getPage(pgNum); + int pageNum = document.getPages().indexOf(page) + 1; + // Submit a task for processing each page + Future future = + executor.submit( + () -> { + extractImagesFromPage( + page, format, filename, pageNum, processedImages, zos); + return null; + }); - Graphics2D g = bufferedImage.createGraphics(); - g.drawImage((Image) renderedImage, 0, 0, null); - g.dispose(); - // Write image bytes to zip file - ByteArrayOutputStream imageBaos = new ByteArrayOutputStream(); - ImageIO.write(bufferedImage, format, imageBaos); - zos.write(imageBaos.toByteArray()); + futures.add(future); + } - zos.closeEntry(); - imageIndex++; - } + // Wait for all tasks to complete + for (Future future : futures) { + future.get(); + } + + // Close executor service + executor.shutdown(); + } else { + // Single-threaded extraction + for (int pgNum = 0; pgNum < document.getPages().getCount(); pgNum++) { + PDPage page = document.getPage(pgNum); + extractImagesFromPage(page, format, filename, pgNum + 1, processedImages, zos); } } - // Close ZipOutputStream and PDDocument - zos.close(); + // Close PDDocument and ZipOutputStream document.close(); + zos.close(); // Create ByteArrayResource from byte array byte[] zipContents = baos.toByteArray(); @@ -138,4 +121,69 @@ public class ExtractImagesController { return WebResponseUtils.boasToWebResponse( baos, filename + "_extracted-images.zip", MediaType.APPLICATION_OCTET_STREAM); } + + private boolean shouldUseMultithreading(MultipartFile file, PDDocument document) { + // Criteria: Use multithreading if file size > 10MB or number of pages > 20 + long fileSizeInMB = file.getSize() / (1024 * 1024); + int numberOfPages = document.getPages().getCount(); + return fileSizeInMB > 10 || numberOfPages > 20; + } + + private void extractImagesFromPage( + PDPage page, + String format, + String filename, + int pageNum, + Set processedImages, + ZipOutputStream zos) + throws IOException { + for (COSName name : page.getResources().getXObjectNames()) { + if (page.getResources().isImageXObject(name)) { + PDImageXObject image = (PDImageXObject) page.getResources().getXObject(name); + int imageHash = image.hashCode(); + synchronized (processedImages) { + if (processedImages.contains(imageHash)) { + continue; // Skip already processed images + } + processedImages.add(imageHash); + } + + RenderedImage renderedImage = image.getImage(); + + // Convert to standard RGB colorspace if needed + BufferedImage bufferedImage = convertToRGB(renderedImage, format); + + // Write image to zip file + String imageName = filename + "_" + imageHash + " (Page " + pageNum + ")." + format; + synchronized (zos) { + zos.putNextEntry(new ZipEntry(imageName)); + ByteArrayOutputStream imageBaos = new ByteArrayOutputStream(); + ImageIO.write(bufferedImage, format, imageBaos); + zos.write(imageBaos.toByteArray()); + zos.closeEntry(); + } + } + } + } + + private BufferedImage convertToRGB(RenderedImage renderedImage, String format) { + int width = renderedImage.getWidth(); + int height = renderedImage.getHeight(); + BufferedImage rgbImage; + + if ("png".equalsIgnoreCase(format)) { + rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + } else if ("jpeg".equalsIgnoreCase(format) || "jpg".equalsIgnoreCase(format)) { + rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + } else if ("gif".equalsIgnoreCase(format)) { + rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_INDEXED); + } else { + rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + } + + Graphics2D g = rgbImage.createGraphics(); + g.drawImage((Image) renderedImage, 0, 0, null); + g.dispose(); + return rgbImage; + } } From bc3574576830925e5f016492a8ed71edffad0358 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 22:19:08 +0100 Subject: [PATCH 03/18] :memo: Update README: Translation Progress Table (#1640) :memo: Sync README > Made via sync_files.yml Co-authored-by: GitHub Action action@github.com --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6cc2a899..f09b64c8 100644 --- a/README.md +++ b/README.md @@ -189,7 +189,7 @@ Stirling PDF currently supports 38! | Italian (Italiano) (it_IT) | ![99%](https://geps.dev/progress/99) | | Japanese (日本語) (ja_JP) | ![90%](https://geps.dev/progress/90) | | Korean (한국어) (ko_KR) | ![84%](https://geps.dev/progress/84) | -| Norwegian (Norsk) (no_NB) | ![96%](https://geps.dev/progress/96) | +| Norwegian (Norsk) (no_NB) | ![98%](https://geps.dev/progress/98) | | Polish (Polski) (pl_PL) | ![93%](https://geps.dev/progress/93) | | Portuguese (Português) (pt_PT) | ![78%](https://geps.dev/progress/78) | | Portuguese Brazilian (Português) (pt_BR) | ![59%](https://geps.dev/progress/59) | From d0bf385d696ff5d01852b602bd93366f1d3e1349 Mon Sep 17 00:00:00 2001 From: PingLin8888 <88387490+PingLin8888@users.noreply.github.com> Date: Thu, 8 Aug 2024 20:38:36 +0100 Subject: [PATCH 04/18] Issue1632 remove images (#1645) * Implemented PdfImageRemovalService.java and PdfImageRemovalController.java. Image can be removed testing using Postman, but the file size doesn't change. * Fix removal logic in service file to decrease file size. * Implement "Remove Image" feature on the website Updated the front-end code to integrate the "Remove Image" feature. The new functionality is now fully operational on the website, allowing users to remove images as expected. * Add comments to PdfImageRemovalController and PdfImageRemovalService. * Change the google material icon in navbar, homepage and remove-image-pdf.html. --- .../SPDF/config/EndpointConfiguration.java | 2 + .../api/PdfImageRemovalController.java | 82 +++++++++++++++++++ .../controller/web/GeneralWebController.java | 7 ++ .../SPDF/service/PdfImageRemovalService.java | 43 ++++++++++ src/main/resources/messages_en_GB.properties | 11 +++ src/main/resources/messages_en_US.properties | 11 +++ src/main/resources/static/css/removeImage.css | 22 +++++ .../resources/templates/fragments/navbar.html | 3 + src/main/resources/templates/home.html | 3 + .../resources/templates/remove-image-pdf.html | 36 ++++++++ 10 files changed, 220 insertions(+) create mode 100644 src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java create mode 100644 src/main/java/stirling/software/SPDF/service/PdfImageRemovalService.java create mode 100644 src/main/resources/static/css/removeImage.css create mode 100644 src/main/resources/templates/remove-image-pdf.html diff --git a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java index 43180753..303de37f 100644 --- a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java @@ -137,6 +137,7 @@ public class EndpointConfiguration { addEndpointToGroup("Other", "auto-rename"); addEndpointToGroup("Other", "get-info-on-pdf"); addEndpointToGroup("Other", "show-javascript"); + addEndpointToGroup("Other", "remove-image-pdf"); // CLI addEndpointToGroup("CLI", "compress-pdf"); @@ -221,6 +222,7 @@ public class EndpointConfiguration { addEndpointToGroup("Java", "split-pdf-by-sections"); addEndpointToGroup("Java", REMOVE_BLANKS); addEndpointToGroup("Java", "pdf-to-text"); + addEndpointToGroup("Java", "remove-image-pdf"); // Javascript addEndpointToGroup("Javascript", "pdf-organizer"); diff --git a/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java new file mode 100644 index 00000000..a3b9e93c --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java @@ -0,0 +1,82 @@ +package stirling.software.SPDF.controller.api; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import io.swagger.v3.oas.annotations.Operation; + +import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.SPDF.service.PdfImageRemovalService; +import stirling.software.SPDF.utils.WebResponseUtils; + + +/** + * Controller class for handling PDF image removal requests. + * Provides an endpoint to remove images from a PDF file to reduce its size. + */ +@RestController +@RequestMapping("/api/v1/general") +public class PdfImageRemovalController { + + // Service for removing images from PDFs + @Autowired private PdfImageRemovalService pdfImageRemovalService; + + /** + * Constructor for dependency injection of PdfImageRemovalService. + * + * @param pdfImageRemovalService The service used for removing images from PDFs. + */ + public PdfImageRemovalController(PdfImageRemovalService pdfImageRemovalService) { + this.pdfImageRemovalService = pdfImageRemovalService; + } + + /** + * Endpoint to remove images from a PDF file. + * + * This method processes the uploaded PDF file, removes all images, and returns + * the modified PDF file with a new name indicating that images were removed. + * + * @param file The PDF file with images to be removed. + * @return ResponseEntity containing the modified PDF file as byte array with appropriate content type and filename. + * @throws IOException If an error occurs while processing the PDF file. + */ + @PostMapping(consumes = "multipart/form-data", value = "/remove-image-pdf") + @Operation( + summary = "Remove images from file to reduce the file size.", + description = + "This endpoint remove images from file to reduce the file size.Input:PDF Output:PDF Type:MISO") + public ResponseEntity removeImages(@ModelAttribute PDFFile file) throws IOException { + + MultipartFile pdf = file.getFileInput(); + + // Convert the MultipartFile to a byte array + byte[] pdfBytes = pdf.getBytes(); + + // Load the PDF document from the byte array + PDDocument document = Loader.loadPDF(pdfBytes); + + // Remove images from the PDF document using the service + PDDocument modifiedDocument = pdfImageRemovalService.removeImagesFromPdf(document); + + // Create a ByteArrayOutputStream to hold the modified PDF data + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + // Save the modified PDF document to the output stream + modifiedDocument.save(outputStream); + modifiedDocument.close(); + + // Generate a new filename for the modified PDF + String mergedFileName = + pdf.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_removed_images.pdf"; + + // Convert the byte array to a web response and return it + return WebResponseUtils.bytesToWebResponse(outputStream.toByteArray(), mergedFileName); + } +} diff --git a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java index bb730dc9..93ad5f34 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java @@ -310,4 +310,11 @@ public class GeneralWebController { model.addAttribute("currentPage", "auto-split-pdf"); return "auto-split-pdf"; } + + @GetMapping("/remove-image-pdf") + @Hidden + public String removeImagePdfForm(Model model) { + model.addAttribute("currentPage", "remove-image-pdf"); + return "remove-image-pdf"; + } } diff --git a/src/main/java/stirling/software/SPDF/service/PdfImageRemovalService.java b/src/main/java/stirling/software/SPDF/service/PdfImageRemovalService.java new file mode 100644 index 00000000..052d9977 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/service/PdfImageRemovalService.java @@ -0,0 +1,43 @@ +package stirling.software.SPDF.service; + +import java.io.IOException; + +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDResources; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.springframework.stereotype.Service; + +/** + * Service class responsible for removing image objects from a PDF document. + */ +@Service +public class PdfImageRemovalService { + + /** + * Removes all image objects from the provided PDF document. + * + * This method iterates over each page in the document and removes any + * image XObjects found in the page's resources. + * + * @param document The PDF document from which images will be removed. + * @return The modified PDF document with images removed. + * @throws IOException If an error occurs while processing the PDF document. + */ + public PDDocument removeImagesFromPdf(PDDocument document) throws IOException { + // Iterate over each page in the PDF document + for (PDPage page : document.getPages()) { + PDResources resources = page.getResources(); + // Iterate over all XObject names in the page's resources + for (COSName name : resources.getXObjectNames()) { + // Check if the XObject is an image + if (resources.isImageXObject(name)) { + // Remove the image XObject by setting it to null + resources.put(name, (PDXObject) null); + } + } + } + return document; + } +} diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index f6f77624..e072dc64 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image \ No newline at end of file diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index b90bef09..bd31c0b0 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/static/css/removeImage.css b/src/main/resources/static/css/removeImage.css new file mode 100644 index 00000000..4f2be403 --- /dev/null +++ b/src/main/resources/static/css/removeImage.css @@ -0,0 +1,22 @@ +.filename { + flex-grow: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + margin-right: 10px; +} + +.arrows { + flex-shrink: 0; + display: flex; + justify-content: flex-end; +} +.arrows .btn { + margin: 0 3px; +} + +.move-up span, +.move-down span { + font-weight: bold; + font-size: 1.2em; +} diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index 39bd8051..955fb3e6 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -195,6 +195,9 @@
+
+
diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index d2846a24..30c295a5 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -229,6 +229,9 @@
+
+
diff --git a/src/main/resources/templates/remove-image-pdf.html b/src/main/resources/templates/remove-image-pdf.html new file mode 100644 index 00000000..6849bd59 --- /dev/null +++ b/src/main/resources/templates/remove-image-pdf.html @@ -0,0 +1,36 @@ + + + + + + + + + +
+
+ +

+
+
+
+
+ remove_selection + +
+
+
+ +
+ +
+
+
+
+
+ +
+ + From d65a637a46d0114316cce1fa7ef10464228c864c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 20:49:56 +0100 Subject: [PATCH 05/18] Bump alpine from 3.20.0 to 3.20.1 (#1505) * Bump alpine from 3.20.0 to 3.20.1 Bumps alpine from 3.20.0 to 3.20.1. --- updated-dependencies: - dependency-name: alpine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Update Dockerfile * Update Dockerfile-fat * Update Dockerfile-ultra-lite --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> --- Dockerfile | 2 +- Dockerfile-fat | 2 +- Dockerfile-ultra-lite | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6aab1d8b..3e257f1d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Main stage -FROM alpine:3.20.0 +FROM alpine:3.20.2 # Copy necessary files COPY scripts /scripts diff --git a/Dockerfile-fat b/Dockerfile-fat index 53f1c1fc..94d3d73b 100644 --- a/Dockerfile-fat +++ b/Dockerfile-fat @@ -12,7 +12,7 @@ RUN DOCKER_ENABLE_SECURITY=true \ ./gradlew clean build # Main stage -FROM alpine:3.20.0 +FROM alpine:3.20.2 # Copy necessary files COPY scripts /scripts diff --git a/Dockerfile-ultra-lite b/Dockerfile-ultra-lite index e3718497..1b2ee76f 100644 --- a/Dockerfile-ultra-lite +++ b/Dockerfile-ultra-lite @@ -1,5 +1,5 @@ # use alpine -FROM alpine:3.20.0 +FROM alpine:3.20.2 ARG VERSION_TAG From a3374745f849a6ac2ae7d9b1a9c4780119fec0e9 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.> Date: Thu, 8 Aug 2024 21:13:59 +0100 Subject: [PATCH 06/18] formatting --- Dockerfile | 4 +- Dockerfile-fat | 4 +- build.gradle | 2 +- .../software/SPDF/SPdfApplication.java | 3 +- .../api/PdfImageRemovalController.java | 12 ++--- .../api/misc/ExtractImagesController.java | 45 ++++++++++--------- .../SPDF/service/PdfImageRemovalService.java | 8 ++-- 7 files changed, 40 insertions(+), 38 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3e257f1d..44031ba7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,8 +45,8 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et # CV py3-opencv \ # python3/pip - python3 && \ - wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \ + python3 \ + py3-pip && \ # uno unoconv and HTML pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \ mv /usr/share/tessdata /usr/share/tessdata-original && \ diff --git a/Dockerfile-fat b/Dockerfile-fat index 94d3d73b..c31fe348 100644 --- a/Dockerfile-fat +++ b/Dockerfile-fat @@ -61,8 +61,8 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et # CV py3-opencv \ # python3/pip - python3 && \ - wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \ + python3 \ + py3-pip && \ # uno unoconv and HTML pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \ mv /usr/share/tessdata /usr/share/tessdata-original && \ diff --git a/build.gradle b/build.gradle index 07abc000..12780703 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ ext { } group = "stirling.software" -version = "0.26.2" +version = "0.27.0" java { // 17 is lowest but we support and recommend 21 diff --git a/src/main/java/stirling/software/SPDF/SPdfApplication.java b/src/main/java/stirling/software/SPDF/SPdfApplication.java index 3b4ea174..3410b950 100644 --- a/src/main/java/stirling/software/SPDF/SPdfApplication.java +++ b/src/main/java/stirling/software/SPDF/SPdfApplication.java @@ -78,7 +78,8 @@ public class SPdfApplication { // custom javs settings file if (Files.exists(Paths.get("configs/custom_settings.yml"))) { - String existingLocation = propertyFiles.getOrDefault("spring.config.additional-location", ""); + String existingLocation = + propertyFiles.getOrDefault("spring.config.additional-location", ""); if (!existingLocation.isEmpty()) { existingLocation += ","; } diff --git a/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java index a3b9e93c..d56b7d2d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfImageRemovalController.java @@ -16,10 +16,9 @@ import stirling.software.SPDF.model.api.PDFFile; import stirling.software.SPDF.service.PdfImageRemovalService; import stirling.software.SPDF.utils.WebResponseUtils; - /** - * Controller class for handling PDF image removal requests. - * Provides an endpoint to remove images from a PDF file to reduce its size. + * Controller class for handling PDF image removal requests. Provides an endpoint to remove images + * from a PDF file to reduce its size. */ @RestController @RequestMapping("/api/v1/general") @@ -40,11 +39,12 @@ public class PdfImageRemovalController { /** * Endpoint to remove images from a PDF file. * - * This method processes the uploaded PDF file, removes all images, and returns - * the modified PDF file with a new name indicating that images were removed. + *

This method processes the uploaded PDF file, removes all images, and returns the modified + * PDF file with a new name indicating that images were removed. * * @param file The PDF file with images to be removed. - * @return ResponseEntity containing the modified PDF file as byte array with appropriate content type and filename. + * @return ResponseEntity containing the modified PDF file as byte array with appropriate + * content type and filename. * @throws IOException If an error occurs while processing the PDF file. */ @PostMapping(consumes = "multipart/form-data", value = "/remove-image-pdf") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java index 7fe27a03..dcbc00aa 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java @@ -1,26 +1,5 @@ package stirling.software.SPDF.controller.api.misc; -import io.github.pixee.security.Filenames; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.apache.pdfbox.Loader; -import org.apache.pdfbox.cos.COSName; -import org.apache.pdfbox.pdmodel.PDDocument; -import org.apache.pdfbox.pdmodel.PDPage; -import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; -import stirling.software.SPDF.model.api.PDFWithImageFormatRequest; -import stirling.software.SPDF.utils.WebResponseUtils; - -import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; @@ -36,6 +15,30 @@ import java.util.zip.Deflater; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import javax.imageio.ImageIO; + +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import io.github.pixee.security.Filenames; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + +import stirling.software.SPDF.model.api.PDFWithImageFormatRequest; +import stirling.software.SPDF.utils.WebResponseUtils; + @RestController @RequestMapping("/api/v1/misc") @Tag(name = "Misc", description = "Miscellaneous APIs") diff --git a/src/main/java/stirling/software/SPDF/service/PdfImageRemovalService.java b/src/main/java/stirling/software/SPDF/service/PdfImageRemovalService.java index 052d9977..985d1f48 100644 --- a/src/main/java/stirling/software/SPDF/service/PdfImageRemovalService.java +++ b/src/main/java/stirling/software/SPDF/service/PdfImageRemovalService.java @@ -9,17 +9,15 @@ import org.apache.pdfbox.pdmodel.PDResources; import org.apache.pdfbox.pdmodel.graphics.PDXObject; import org.springframework.stereotype.Service; -/** - * Service class responsible for removing image objects from a PDF document. - */ +/** Service class responsible for removing image objects from a PDF document. */ @Service public class PdfImageRemovalService { /** * Removes all image objects from the provided PDF document. * - * This method iterates over each page in the document and removes any - * image XObjects found in the page's resources. + * This method iterates over each page in the document and removes any image XObjects found + * in the page's resources. * * @param document The PDF document from which images will be removed. * @return The modified PDF document with images removed. From 6d8d0bad56cbc2e597a6e5f0f68e83322c58fb95 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.> Date: Thu, 8 Aug 2024 21:15:41 +0100 Subject: [PATCH 07/18] langs --- src/main/resources/messages_ar_AR.properties | 11 +++++++++++ src/main/resources/messages_bg_BG.properties | 11 +++++++++++ src/main/resources/messages_ca_CA.properties | 11 +++++++++++ src/main/resources/messages_cs_CZ.properties | 11 +++++++++++ src/main/resources/messages_da_DK.properties | 11 +++++++++++ src/main/resources/messages_de_DE.properties | 11 +++++++++++ src/main/resources/messages_el_GR.properties | 11 +++++++++++ src/main/resources/messages_es_ES.properties | 11 +++++++++++ src/main/resources/messages_eu_ES.properties | 11 +++++++++++ src/main/resources/messages_fr_FR.properties | 11 +++++++++++ src/main/resources/messages_ga_IE.properties | 11 +++++++++++ src/main/resources/messages_hi_IN.properties | 11 +++++++++++ src/main/resources/messages_hr_HR.properties | 11 +++++++++++ src/main/resources/messages_hu_HU.properties | 11 +++++++++++ src/main/resources/messages_id_ID.properties | 11 +++++++++++ src/main/resources/messages_it_IT.properties | 11 +++++++++++ src/main/resources/messages_ja_JP.properties | 11 +++++++++++ src/main/resources/messages_ko_KR.properties | 11 +++++++++++ src/main/resources/messages_nl_NL.properties | 11 +++++++++++ src/main/resources/messages_no_NB.properties | 11 +++++++++++ src/main/resources/messages_pl_PL.properties | 11 +++++++++++ src/main/resources/messages_pt_BR.properties | 11 +++++++++++ src/main/resources/messages_pt_PT.properties | 11 +++++++++++ src/main/resources/messages_ro_RO.properties | 11 +++++++++++ src/main/resources/messages_ru_RU.properties | 11 +++++++++++ src/main/resources/messages_sk_SK.properties | 11 +++++++++++ src/main/resources/messages_sr_LATN_RS.properties | 11 +++++++++++ src/main/resources/messages_sv_SE.properties | 11 +++++++++++ src/main/resources/messages_th_TH.properties | 11 +++++++++++ src/main/resources/messages_tr_TR.properties | 11 +++++++++++ src/main/resources/messages_uk_UA.properties | 11 +++++++++++ src/main/resources/messages_vi_VN.properties | 11 +++++++++++ src/main/resources/messages_zh_CN.properties | 11 +++++++++++ src/main/resources/messages_zh_TW.properties | 11 +++++++++++ 34 files changed, 374 insertions(+) diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 3e194292..88ec9539 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_bg_BG.properties b/src/main/resources/messages_bg_BG.properties index 43349364..ce8bcc5e 100644 --- a/src/main/resources/messages_bg_BG.properties +++ b/src/main/resources/messages_bg_BG.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Книга към PDF home.BookToPDF.desc=Преобразува формати на книги/комикси в PDF с помощта на calibre BookToPDF.tags=Книга,комикс,calibre,конвертиране,манга,Amazon,Kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Покажи проследяване на стека error.copyStack=Копиране на проследяване на стека error.githubSubmit=GitHub - Изпратете запитване error.discordSubmit=Discord - Изпратете запитване за поддръжка + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index 8c400bfd..3d52a609 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_cs_CZ.properties b/src/main/resources/messages_cs_CZ.properties index 6ca4cbf0..490de1f7 100644 --- a/src/main/resources/messages_cs_CZ.properties +++ b/src/main/resources/messages_cs_CZ.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Kniha na PDF home.BookToPDF.desc=Převádí formáty knih/komiksů do PDF pomocí calibre BookToPDF.tags=Kniha,Komiks,Calibre,Konvertovat,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Zobrazit stopu zásobníku error.copyStack=Kopírovat stopu zásobníku error.githubSubmit=GitHub - Odeslat požadavek error.discordSubmit=Discord - Odeslat příspěvek podpory + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_da_DK.properties b/src/main/resources/messages_da_DK.properties index a56596dd..d445e4ef 100644 --- a/src/main/resources/messages_da_DK.properties +++ b/src/main/resources/messages_da_DK.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Vis Stack Trace error.copyStack=Kopier Stack Trace error.githubSubmit=GitHub - Indsend en ticket error.discordSubmit=Discord - Indsend Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 3a75642d..d3f085cc 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Buch als PDF home.BookToPDF.desc=Konvertiert Buch-/Comic-Formate mithilfe von Calibre in PDF BookToPDF.tags=buch,comic,calibre,convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Stack-Trace anzeigen error.copyStack=Stack-Trace kopieren error.githubSubmit=GitHub - Ein Ticket einreichen error.discordSubmit=Discord - Unterstützungsbeitrag einreichen + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_el_GR.properties b/src/main/resources/messages_el_GR.properties index b6db871f..22faef0e 100644 --- a/src/main/resources/messages_el_GR.properties +++ b/src/main/resources/messages_el_GR.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book σε PDF home.BookToPDF.desc=Μετατρέπει τις μορφές Books/Comics σε PDF χρησιμοποιώντας calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Εμφάνιση Stack Trace error.copyStack=Αντιγραφή Stack Trace error.githubSubmit=GitHub - Υποβάλετε ένα ticket error.discordSubmit=Discord - Υποβάλετε ένα Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 58e38223..30fd1194 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Libro a PDF home.BookToPDF.desc=Convierte formatos de Libro/Cómic a PDF usando Calibre BookToPDF.tags=Libro,Cómic,Calibre,Convertir,manga,Amazon,Kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Mostrar seguimiento de pila error.copyStack=Mostrar seguimiento de pila error.githubSubmit=GitHub - Enviar un ticket error.discordSubmit=Discord - Enviar mensaje de soporte + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 57d808c1..c87a03cd 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 8f6ff4de..ff199478 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=eBook vers PDF home.BookToPDF.desc=Convertit les formats de livres/bandes dessinées en PDF à l'aide de calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Afficher la Stack Trace error.copyStack=Copier la Stack Trace error.githubSubmit=GitHub - Créer un ticket error.discordSubmit=Discord - Poster un message de demande d’assistance + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_ga_IE.properties b/src/main/resources/messages_ga_IE.properties index 9a2b9cc4..b2422077 100644 --- a/src/main/resources/messages_ga_IE.properties +++ b/src/main/resources/messages_ga_IE.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Leabhar a thiontú go PDF home.BookToPDF.desc=Tiontaíonn sé formáidí Leabhair/Comics go PDF ag baint úsáide as calibre BookToPDF.tags=Leabhar, Comic, Calibre, Tiontaigh, manga, amazon, kindle, epub, mobi, azw3, docx, rtf, txt, html, lit, fb2, pdb, lrf +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Taispeáin Stack Trace error.copyStack=Cóipeáil Stack Trace error.githubSubmit=GitHub - Cuir ticéad isteach error.discordSubmit=Discord - Cuir post Tacaíochta + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_hi_IN.properties b/src/main/resources/messages_hi_IN.properties index 9b954bf1..88082fa3 100644 --- a/src/main/resources/messages_hi_IN.properties +++ b/src/main/resources/messages_hi_IN.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_hr_HR.properties b/src/main/resources/messages_hr_HR.properties index b546a88f..76bf2d27 100644 --- a/src/main/resources/messages_hr_HR.properties +++ b/src/main/resources/messages_hr_HR.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book u PDF home.BookToPDF.desc=Pretvara format knjige/stripa u PDF format pomoću calibre BookToPDF.tags=Knjiga,Strip,Calibre,Pretvori,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Prikaži Stack Trace error.copyStack=Kopiraj Stack Trace error.githubSubmit=GitHub - Pošaljite ticket error.discordSubmit=Discord - Pošalji objavu podrške + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_hu_HU.properties b/src/main/resources/messages_hu_HU.properties index 57f33ce3..a032a9ea 100644 --- a/src/main/resources/messages_hu_HU.properties +++ b/src/main/resources/messages_hu_HU.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_id_ID.properties b/src/main/resources/messages_id_ID.properties index d29749dc..f081c1e3 100644 --- a/src/main/resources/messages_id_ID.properties +++ b/src/main/resources/messages_id_ID.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 50566476..56ef2a83 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Libro in PDF home.BookToPDF.desc=Converte i formati di libri/fumetti in PDF utilizzando Calibre BookToPDF.tags=Libro,fumetto,calibre,conversione,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Mostra traccia dello stack error.copyStack=Copia traccia dello stack error.githubSubmit=GitHub: invia un ticket error.discordSubmit=Discord: invia post di supporto + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index e2380980..3ba7ed9c 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=PDFを書籍に変換 home.BookToPDF.desc=calibreを使用してPDFを書籍/コミック形式に変換します BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=スタックトレースを表示 error.copyStack=スタックトレースをコピー error.githubSubmit=GitHub - チケットを提出 error.discordSubmit=Discord - サポート投稿を提出 + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index a0ccfb0a..a382f9d3 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=책을 PDF로 home.BookToPDF.desc=구경을 사용하여 책/만화 형식을 PDF로 변환 BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=스택 추적 보기 error.copyStack=스택 추적 복사 error.githubSubmit=GitHub - 티켓 제출 error.discordSubmit=Discord - 문의 게시 + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index c2c8271a..30396fda 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Boek naar PDF home.BookToPDF.desc=Converteert boek-/stripformaat naar PDF met gebruik van Calibre BookToPDF.tags=Boek,Strip,Comic,Calibre,Converteren,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Geeft tracering weer error.copyStack=Kopieer tracering error.githubSubmit=GitHub - Dien een ticket in error.discordSubmit=Discord - Maak een support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_no_NB.properties b/src/main/resources/messages_no_NB.properties index 717eb8a5..41f1870a 100644 --- a/src/main/resources/messages_no_NB.properties +++ b/src/main/resources/messages_no_NB.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Bok til PDF home.BookToPDF.desc=Konverter bøker/tegneserier til PDF ved hjelp av calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Vis stakksporing error.copyStack=Kopier stakksporing error.githubSubmit=GitHub - Send inn en billett error.discordSubmit=Discord - Send inn støtteinnlegg + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 858aabc8..55ce74f9 100755 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=eBook do PDF home.BookToPDF.desc=Zapisuje ebooka do PDF za pomocą Calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Pokaż Stack Trace error.copyStack=Kopiuj Stack Trace error.githubSubmit=GitHub - wyślij zgłoszenie error.discordSubmit=Discord - wyślij posta z prośbą o pomoc + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 21c148b9..da82be3e 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_pt_PT.properties b/src/main/resources/messages_pt_PT.properties index 88e898b8..512ba300 100644 --- a/src/main/resources/messages_pt_PT.properties +++ b/src/main/resources/messages_pt_PT.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index ac41ceab..421efcfd 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index 524a7c17..2f42ced2 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Книга в PDF home.BookToPDF.desc=Конвертирует форматы книги/комикса в PDF с помощью calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Показать стек вызовов error.copyStack=Скопировать стек вызовов error.githubSubmit=GitHub - Отправить заявку error.discordSubmit=Discord - Отправить запрос в поддержку + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_sk_SK.properties b/src/main/resources/messages_sk_SK.properties index 51501809..43ce8c67 100644 --- a/src/main/resources/messages_sk_SK.properties +++ b/src/main/resources/messages_sk_SK.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Kniha do PDF home.BookToPDF.desc=Konvertuje formáty kníh/komiksov do PDF pomocou Calibre BookToPDF.tags=kniha, komiks, Calibre, konvertovať, manga, amazon, kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Zobraziť sledovanie zásobníka error.copyStack=Kopírovať sledovanie zásobníka error.githubSubmit=GitHub - Podajte tiket error.discordSubmit=Discord - Podajte príspevok na podporu + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_sr_LATN_RS.properties b/src/main/resources/messages_sr_LATN_RS.properties index 3b76b2fb..6147c20b 100644 --- a/src/main/resources/messages_sr_LATN_RS.properties +++ b/src/main/resources/messages_sr_LATN_RS.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index ac49563c..3fe4c0e9 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Show Stack Trace error.copyStack=Copy Stack Trace error.githubSubmit=GitHub - Submit a ticket error.discordSubmit=Discord - Submit Support post + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_th_TH.properties b/src/main/resources/messages_th_TH.properties index 9fff7851..c38234e1 100644 --- a/src/main/resources/messages_th_TH.properties +++ b/src/main/resources/messages_th_TH.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=หนังสือเป็น PDF home.BookToPDF.desc=แปลงรูปแบบหนังสือ/การ์ตูนเป็น PDF โดยใช้ Calibre BookToPDF.tags=หนังสือ, การ์ตูน, Calibre, แปลง, มังงะ, amazon, kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=แสดง Stack Trace error.copyStack=คัดลอก Stack Trace error.githubSubmit=GitHub - ส่งตั๋ว error.discordSubmit=Discord - ส่งโพสต์การสนับสนุน + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index c0460a5a..6a03d547 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Kitaptan PDF'ye home.BookToPDF.desc=calibre kullanarak Kitap/Karikatür formatlarını PDF'ye dönüştürür BookToPDF.tags=Kitap,Çizgi Roman,Calibre,Dönüştür,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Yığın İzlemesini Göster error.copyStack=Yığın İzini Kopyala error.githubSubmit=GitHub - Hata gönderin error.discordSubmit=Discord - Destek gönderisi gönderin + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_uk_UA.properties b/src/main/resources/messages_uk_UA.properties index 8cf3c19c..6e601195 100644 --- a/src/main/resources/messages_uk_UA.properties +++ b/src/main/resources/messages_uk_UA.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Книга у PDF home.BookToPDF.desc=Конвертує формати книги/комікса у PDF за допомогою calibre BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Показати стек викликів error.copyStack=Скопіювати стек викликів error.githubSubmit=GitHub - Надіслати запит error.discordSubmit=Discord - Надіслати повідомлення підтримки + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_vi_VN.properties b/src/main/resources/messages_vi_VN.properties index bbf096af..b6234488 100644 --- a/src/main/resources/messages_vi_VN.properties +++ b/src/main/resources/messages_vi_VN.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=Sách sang PDF home.BookToPDF.desc=Chuyển đổi định dạng sách/truyện tranh sang PDF bằng calibre BookToPDF.tags=Sách,Truyện tranh,Calibre,Chuyển đổi,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=Hiển thị Stack Trace error.copyStack=Sao chép Stack Trace error.githubSubmit=GitHub - Gửi ticket error.discordSubmit=Discord - Gửi bài đăng hỗ trợ + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index bea1a70c..690c8e05 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=电子书转PDF home.BookToPDF.desc=使用Calibre将电子书/漫画转换成PDF BookToPDF.tags=电子书、漫画、Calibre、转换、日本漫画、亚马逊、kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=显示堆栈跟踪 error.copyStack=复制堆栈跟踪 error.githubSubmit=GitHub - 提交工单 error.discordSubmit=Discord - 提交支持帖子 + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image diff --git a/src/main/resources/messages_zh_TW.properties b/src/main/resources/messages_zh_TW.properties index 145e75bf..b2e9acea 100644 --- a/src/main/resources/messages_zh_TW.properties +++ b/src/main/resources/messages_zh_TW.properties @@ -461,6 +461,10 @@ home.BookToPDF.title=電子書轉 PDF home.BookToPDF.desc=使用 calibre 將書籍/漫畫格式轉換為 PDF BookToPDF.tags=電子書,漫畫,Calibre,轉換,日本漫畫,亞馬遜,kindle +home.removeImagePdf.title=Remove image +home.removeImagePdf.desc=Remove image from PDF to reduce file size +removeImagePdf.tags=Remove Image,Page operations,Back end,server side + ########################### # # @@ -1125,3 +1129,10 @@ error.showStack=顯示堆疊追蹤 error.copyStack=複製堆疊追蹤 error.githubSubmit=GitHub - 提交工單 error.discordSubmit=Discord - 提交支援帖子 + + +#remove-image +removeImage.title=Remove image +removeImage.header=Remove image +removeImage.removeImage=Remove image +removeImage.submit=Remove image From 39423c247c90168068ee323fd77b3a798a9ca176 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 21:17:08 +0100 Subject: [PATCH 08/18] :floppy_disk: Update Version (#1646) :floppy_disk: Sync Versions > Made via sync_files.yml Co-authored-by: GitHub Action action@github.com --- chart/stirling-pdf/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart/stirling-pdf/Chart.yaml b/chart/stirling-pdf/Chart.yaml index 9b633ddb..2a21f9c5 100644 --- a/chart/stirling-pdf/Chart.yaml +++ b/chart/stirling-pdf/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 0.26.2 +appVersion: 0.27.0 description: locally hosted web application that allows you to perform various operations on PDF files home: https://github.com/Stirling-Tools/Stirling-PDF From 00a0670954c7df0496a0b98d17635cf3bfaf5340 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 21:17:18 +0100 Subject: [PATCH 09/18] :memo: Update README: Translation Progress Table (#1647) :memo: Sync README > Made via sync_files.yml Co-authored-by: GitHub Action action@github.com --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index f09b64c8..4a56ed1a 100644 --- a/README.md +++ b/README.md @@ -170,41 +170,41 @@ Stirling PDF currently supports 38! | Language | Progress | | ------------------------------------------- | -------------------------------------- | | Arabic (العربية) (ar_AR) | ![45%](https://geps.dev/progress/45) | -| Basque (Euskara) (eu_ES) | ![62%](https://geps.dev/progress/62) | +| Basque (Euskara) (eu_ES) | ![61%](https://geps.dev/progress/61) | | Bulgarian (Български) (bg_BG) | ![94%](https://geps.dev/progress/94) | | Catalan (Català) (ca_CA) | ![48%](https://geps.dev/progress/48) | -| Croatian (Hrvatski) (hr_HR) | ![95%](https://geps.dev/progress/95) | -| Czech (Česky) (cs_CZ) | ![90%](https://geps.dev/progress/90) | -| Danish (Dansk) (da_DK) | ![10%](https://geps.dev/progress/10) | -| Dutch (Nederlands) (nl_NL) | ![96%](https://geps.dev/progress/96) | +| Croatian (Hrvatski) (hr_HR) | ![94%](https://geps.dev/progress/94) | +| Czech (Česky) (cs_CZ) | ![89%](https://geps.dev/progress/89) | +| Danish (Dansk) (da_DK) | ![9%](https://geps.dev/progress/9) | +| Dutch (Nederlands) (nl_NL) | ![95%](https://geps.dev/progress/95) | | English (English) (en_GB) | ![100%](https://geps.dev/progress/100) | | English (US) (en_US) | ![100%](https://geps.dev/progress/100) | | French (Français) (fr_FR) | ![93%](https://geps.dev/progress/93) | | German (Deutsch) (de_DE) | ![99%](https://geps.dev/progress/99) | -| Greek (Ελληνικά) (el_GR) | ![82%](https://geps.dev/progress/82) | -| Hindi (हिंदी) (hi_IN) | ![77%](https://geps.dev/progress/77) | -| Hungarian (Magyar) (hu_HU) | ![76%](https://geps.dev/progress/76) | +| Greek (Ελληνικά) (el_GR) | ![81%](https://geps.dev/progress/81) | +| Hindi (हिंदी) (hi_IN) | ![76%](https://geps.dev/progress/76) | +| Hungarian (Magyar) (hu_HU) | ![75%](https://geps.dev/progress/75) | | Indonesia (Bahasa Indonesia) (id_ID) | ![76%](https://geps.dev/progress/76) | -| Irish (Gaeilge) (ga_IE) | ![99%](https://geps.dev/progress/99) | -| Italian (Italiano) (it_IT) | ![99%](https://geps.dev/progress/99) | -| Japanese (日本語) (ja_JP) | ![90%](https://geps.dev/progress/90) | +| Irish (Gaeilge) (ga_IE) | ![98%](https://geps.dev/progress/98) | +| Italian (Italiano) (it_IT) | ![98%](https://geps.dev/progress/98) | +| Japanese (日本語) (ja_JP) | ![89%](https://geps.dev/progress/89) | | Korean (한국어) (ko_KR) | ![84%](https://geps.dev/progress/84) | -| Norwegian (Norsk) (no_NB) | ![98%](https://geps.dev/progress/98) | -| Polish (Polski) (pl_PL) | ![93%](https://geps.dev/progress/93) | +| Norwegian (Norsk) (no_NB) | ![97%](https://geps.dev/progress/97) | +| Polish (Polski) (pl_PL) | ![92%](https://geps.dev/progress/92) | | Portuguese (Português) (pt_PT) | ![78%](https://geps.dev/progress/78) | | Portuguese Brazilian (Português) (pt_BR) | ![59%](https://geps.dev/progress/59) | -| Romanian (Română) (ro_RO) | ![39%](https://geps.dev/progress/39) | -| Russian (Русский) (ru_RU) | ![84%](https://geps.dev/progress/84) | +| Romanian (Română) (ro_RO) | ![38%](https://geps.dev/progress/38) | +| Russian (Русский) (ru_RU) | ![83%](https://geps.dev/progress/83) | | Sebian Latin alphabet (Srpski) (sr_LATN_RS) | ![78%](https://geps.dev/progress/78) | -| Simplified Chinese (简体中文) (zh_CN) | ![99%](https://geps.dev/progress/99) | -| Slovakian (Slovensky) (sk_SK) | ![92%](https://geps.dev/progress/92) | -| Spanish (Español) (es_ES) | ![98%](https://geps.dev/progress/98) | +| Simplified Chinese (简体中文) (zh_CN) | ![98%](https://geps.dev/progress/98) | +| Slovakian (Slovensky) (sk_SK) | ![91%](https://geps.dev/progress/91) | +| Spanish (Español) (es_ES) | ![97%](https://geps.dev/progress/97) | | Swedish (Svenska) (sv_SE) | ![39%](https://geps.dev/progress/39) | | Thai (ไทย) (th_TH) | ![99%](https://geps.dev/progress/99) | -| Traditional Chinese (繁體中文) (zh_TW) | ![98%](https://geps.dev/progress/98) | -| Turkish (Türkçe) (tr_TR) | ![99%](https://geps.dev/progress/99) | -| Ukrainian (Українська) (uk_UA) | ![90%](https://geps.dev/progress/90) | -| Vietnamese (Tiếng Việt) (vi_VN) | ![99%](https://geps.dev/progress/99) | +| Traditional Chinese (繁體中文) (zh_TW) | ![97%](https://geps.dev/progress/97) | +| Turkish (Türkçe) (tr_TR) | ![98%](https://geps.dev/progress/98) | +| Ukrainian (Українська) (uk_UA) | ![89%](https://geps.dev/progress/89) | +| Vietnamese (Tiếng Việt) (vi_VN) | ![98%](https://geps.dev/progress/98) | ## Contributing (creating issues, translations, fixing bugs, etc.) From 771b312ee8b443e29833f1cc8dab7897f407b96f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 21:33:14 +0100 Subject: [PATCH 10/18] Bump com.twelvemonkeys.imageio:imageio-tiff from 3.10.1 to 3.11.0 (#1503) * Bump com.twelvemonkeys.imageio:imageio-tiff from 3.10.1 to 3.11.0 Bumps com.twelvemonkeys.imageio:imageio-tiff from 3.10.1 to 3.11.0. --- updated-dependencies: - dependency-name: com.twelvemonkeys.imageio:imageio-tiff dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Update build.gradle --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 12780703..8bf7f15d 100644 --- a/build.gradle +++ b/build.gradle @@ -134,8 +134,8 @@ dependencies { implementation "org.apache.xmlgraphics:batik-all:1.17" // TwelveMonkeys - implementation "com.twelvemonkeys.imageio:imageio-batik:3.10.1" - implementation "com.twelvemonkeys.imageio:imageio-bmp:3.10.1" + implementation "com.twelvemonkeys.imageio:imageio-batik:3.11.0" + implementation "com.twelvemonkeys.imageio:imageio-bmp:3.11.0" // implementation "com.twelvemonkeys.imageio:imageio-hdr:3.10.1" // implementation "com.twelvemonkeys.imageio:imageio-icns:3.10.1" // implementation "com.twelvemonkeys.imageio:imageio-iff:3.10.1" @@ -147,8 +147,8 @@ dependencies { // implementation "com.twelvemonkeys.imageio:imageio-sgi:3.10.1" // implementation "com.twelvemonkeys.imageio:imageio-tga:3.10.1" // implementation "com.twelvemonkeys.imageio:imageio-thumbsdb:3.10.1" - implementation "com.twelvemonkeys.imageio:imageio-tiff:3.10.1" - implementation "com.twelvemonkeys.imageio:imageio-webp:3.10.1" + implementation "com.twelvemonkeys.imageio:imageio-tiff:3.11.0" + implementation "com.twelvemonkeys.imageio:imageio-webp:3.11.0" // implementation "com.twelvemonkeys.imageio:imageio-xwd:3.10.1" implementation "commons-io:commons-io:2.16.1" From 148feda83f2392054ef18180b13ee31ed7e71a2a Mon Sep 17 00:00:00 2001 From: Diallo Date: Thu, 8 Aug 2024 22:35:15 +0200 Subject: [PATCH 11/18] Bug fix UI crash when url is unrechable (#1642) * feat: Add URL reachability check in ConvertWebsiteToPDF * Add tests for URL reachability in ConvertWebsiteToPdfTest * test: Update URL in ConvertWebsiteToPdfTest for testing --- .../api/converters/ConvertWebsiteToPDF.java | 6 +++ .../software/SPDF/utils/GeneralUtils.java | 42 +++++++++++++------ .../converters/ConvertWebsiteToPdfTest.java | 41 ++++++++++++++++++ 3 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java index 8bce1b22..026690fd 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java @@ -39,6 +39,12 @@ public class ConvertWebsiteToPDF { if (!URL.matches("^https?://.*") || !GeneralUtils.isValidURL(URL)) { throw new IllegalArgumentException("Invalid URL format provided."); } + + // validate the URL is reachable + if (!GeneralUtils.isURLReachable(URL)) { + throw new IllegalArgumentException("URL is not reachable, please provide a valid URL."); + } + Path tempOutputFile = null; byte[] pdfBytes; try { diff --git a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java b/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java index ae86d8c1..aa5f3aea 100644 --- a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java +++ b/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java @@ -13,6 +13,8 @@ import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; +import java.net.URL; +import java.net.HttpURLConnection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,6 +73,21 @@ public class GeneralUtils { } catch (MalformedURLException e) { return false; } + + } + + public static boolean isURLReachable(String urlStr) { + try { + URL url = new URL(urlStr); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("HEAD"); + int responseCode = connection.getResponseCode(); + return (200 <= responseCode && responseCode <= 399); + } catch (MalformedURLException e) { + return false; + } catch (IOException e) { + return false; + } } public static File multipartToFile(MultipartFile multipart) throws IOException { @@ -95,19 +112,16 @@ public class GeneralUtils { sizeStr = sizeStr.replace(",", ".").replace(" ", ""); try { if (sizeStr.endsWith("KB")) { - return (long) - (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024); + return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024); } else if (sizeStr.endsWith("MB")) { - return (long) - (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) - * 1024 - * 1024); + return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) + * 1024 + * 1024); } else if (sizeStr.endsWith("GB")) { - return (long) - (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) - * 1024 - * 1024 - * 1024); + return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) + * 1024 + * 1024 + * 1024); } else if (sizeStr.endsWith("B")) { return Long.parseLong(sizeStr.substring(0, sizeStr.length() - 1)); } else { @@ -170,13 +184,15 @@ public class GeneralUtils { int n = 0; while (true) { - // Replace 'n' with the current value of n, correctly handling numbers before 'n' + // Replace 'n' with the current value of n, correctly handling numbers before + // 'n' String sanitizedExpression = insertMultiplicationBeforeN(expression, n); Double result = evaluator.evaluate(sanitizedExpression); // Check if the result is null or not within bounds if (result == null || result <= 0 || result.intValue() > maxValue) { - if (n != 0) break; + if (n != 0) + break; } else { results.add(result.intValue()); } diff --git a/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java b/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java new file mode 100644 index 00000000..0e63b99f --- /dev/null +++ b/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java @@ -0,0 +1,41 @@ +package stirling.software.SPDF.controller.api.converters; + +import org.junit.jupiter.api.Test; +import org.springframework.http.ResponseEntity; + +import stirling.software.SPDF.model.api.converters.UrlToPdfRequest; +import static org.junit.jupiter.api.Assertions.*; + +public class ConvertWebsiteToPdfTest { + @Test + public void test_exemption_is_thrown_when_invalid_url_format_provided() { + + String invalid_format_Url = "invalid-url"; + // Arrange + ConvertWebsiteToPDF convertWebsiteToPDF = new ConvertWebsiteToPDF(); + UrlToPdfRequest request = new UrlToPdfRequest(); + request.setUrlInput(invalid_format_Url); + // Act + IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, () -> { + convertWebsiteToPDF.urlToPdf(request); + }); + // Assert + assertEquals("Invalid URL format provided.", thrown.getMessage()); + } + + @Test + public void test_exemption_is_thrown_when_url_is_not_reachable() { + + String unreachable_Url = "https://www.googleeeexyz.com"; + // Arrange + ConvertWebsiteToPDF convertWebsiteToPDF = new ConvertWebsiteToPDF(); + UrlToPdfRequest request = new UrlToPdfRequest(); + request.setUrlInput(unreachable_Url); + // Act + IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, () -> { + convertWebsiteToPDF.urlToPdf(request); + }); + // Assert + assertEquals("URL is not reachable, please provide a valid URL.", thrown.getMessage()); + } +} From 4ad716f28174518dc2745ac2982e57bc22ef7ce4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 21:41:40 +0100 Subject: [PATCH 12/18] Update 3rd Party Licenses (#1648) Signed-off-by: GitHub Action Co-authored-by: GitHub Action --- src/main/resources/static/3rdPartyLicenses.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/static/3rdPartyLicenses.json b/src/main/resources/static/3rdPartyLicenses.json index 44c9bbdb..568c163b 100644 --- a/src/main/resources/static/3rdPartyLicenses.json +++ b/src/main/resources/static/3rdPartyLicenses.json @@ -194,13 +194,13 @@ }, { "moduleName": "com.twelvemonkeys.imageio:imageio-batik", - "moduleVersion": "3.10.1", + "moduleVersion": "3.11.0", "moduleLicense": "The BSD License", "moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license" }, { "moduleName": "com.twelvemonkeys.imageio:imageio-bmp", - "moduleVersion": "3.10.1", + "moduleVersion": "3.11.0", "moduleLicense": "The BSD License", "moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license" }, @@ -224,13 +224,13 @@ }, { "moduleName": "com.twelvemonkeys.imageio:imageio-tiff", - "moduleVersion": "3.10.1", + "moduleVersion": "3.11.0", "moduleLicense": "The BSD License", "moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license" }, { "moduleName": "com.twelvemonkeys.imageio:imageio-webp", - "moduleVersion": "3.10.1", + "moduleVersion": "3.11.0", "moduleLicense": "The BSD License", "moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license" }, From 908b4091550d9e8ce1d32ad6569892b7a3b60e2e Mon Sep 17 00:00:00 2001 From: albanobattistella <34811668+albanobattistella@users.noreply.github.com> Date: Thu, 8 Aug 2024 23:06:13 +0200 Subject: [PATCH 13/18] Update messages_it_IT.properties (#1649) --- src/main/resources/messages_it_IT.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 56ef2a83..0f7e5161 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -1132,7 +1132,7 @@ error.discordSubmit=Discord: invia post di supporto #remove-image -removeImage.title=Remove image -removeImage.header=Remove image -removeImage.removeImage=Remove image -removeImage.submit=Remove image +removeImage.title=Rimuovere immagine +removeImage.header=Rimuovi immagine +removeImage.removeImage=Rimuovi immagine +removeImage.submit=Rimuovi immagine From 8dbbacb09e458946a13d9acadbaf83e29b210b7a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 22:29:02 +0100 Subject: [PATCH 14/18] :memo: Update README: Translation Progress Table (#1651) :memo: Sync README > Made via sync_files.yml Co-authored-by: GitHub Action action@github.com --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a56ed1a..fb79c910 100644 --- a/README.md +++ b/README.md @@ -186,7 +186,7 @@ Stirling PDF currently supports 38! | Hungarian (Magyar) (hu_HU) | ![75%](https://geps.dev/progress/75) | | Indonesia (Bahasa Indonesia) (id_ID) | ![76%](https://geps.dev/progress/76) | | Irish (Gaeilge) (ga_IE) | ![98%](https://geps.dev/progress/98) | -| Italian (Italiano) (it_IT) | ![98%](https://geps.dev/progress/98) | +| Italian (Italiano) (it_IT) | ![99%](https://geps.dev/progress/99) | | Japanese (日本語) (ja_JP) | ![89%](https://geps.dev/progress/89) | | Korean (한국어) (ko_KR) | ![84%](https://geps.dev/progress/84) | | Norwegian (Norsk) (no_NB) | ![97%](https://geps.dev/progress/97) | From 6649ffd7a0c257da4b1a6958a453ae2981eeacb9 Mon Sep 17 00:00:00 2001 From: tkymmm <136296842+tkymmm@users.noreply.github.com> Date: Fri, 9 Aug 2024 15:39:35 +0900 Subject: [PATCH 15/18] Updated Japanese translation (#1654) * Update messages_ja_JP.properties Updated Japanese translation * Update messages_ja_JP.properties Updated Japanese translation --- src/main/resources/messages_ja_JP.properties | 44 ++++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index 3ba7ed9c..8ef8dcc8 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -107,7 +107,7 @@ pipelineOptions.validateButton=検証 ############# # NAVBAR # ############# -navbar.favorite=Favorites +navbar.favorite=お気に入り navbar.darkmode=ダークモード navbar.language=言語 navbar.settings=設定 @@ -192,21 +192,21 @@ adminUserSettings.changeUserRole=ユーザーの役割を変更する adminUserSettings.authenticated=認証済 -database.title=Database Import/Export -database.header=Database Import/Export -database.fileName=File Name -database.creationDate=Creation Date -database.fileSize=File Size -database.deleteBackupFile=Delete Backup File -database.importBackupFile=Import Backup File -database.downloadBackupFile=Download Backup File -database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application. -database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention. -database.submit=Import Backup -database.importIntoDatabaseSuccessed=Import into database successed -database.fileNotFound=File not Found -database.fileNullOrEmpty=File must not be null or empty -database.failedImportFile=Failed Import File +database.title=データベースのインポート/エクスポート +database.header=データベースのインポート/エクスポート +database.fileName=ファイル名 +database.creationDate=作成日 +database.fileSize=ファイルサイズ +database.deleteBackupFile=バックアップファイルの削除 +database.importBackupFile=バックアップファイルをインポート +database.downloadBackupFile=バックアップファイルをダウンロード +database.info_1=データをインポートする際には、正しい構造を確保することが極めて重要です。不明な点がある場合は、専門家のアドバイスやサポートを受けてください。構造上のエラーは、アプリケーションの誤動作を引き起こす可能性があります。 +database.info_2=ファイル名はアップロード時には関係ありません。アップロード後にbackup_user_yyyyMMddHHmm.sqlという形式にリネームされ、一貫した命名規則が保証されます。 +database.submit=バックアップをインポート +database.importIntoDatabaseSuccessed=データベースへのインポートに成功 +database.fileNotFound=ファイルが見つかりません +database.fileNullOrEmpty=ファイルは null または空であってはなりません +database.failedImportFile=ファイルのインポートに失敗 ############# # HOME-PAGE # @@ -461,8 +461,8 @@ home.BookToPDF.title=PDFを書籍に変換 home.BookToPDF.desc=calibreを使用してPDFを書籍/コミック形式に変換します BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle -home.removeImagePdf.title=Remove image -home.removeImagePdf.desc=Remove image from PDF to reduce file size +home.removeImagePdf.title=画像の削除 +home.removeImagePdf.desc=PDFから画像を削除してファイルサイズを小さくします removeImagePdf.tags=Remove Image,Page operations,Back end,server side @@ -1132,7 +1132,7 @@ error.discordSubmit=Discord - サポート投稿を提出 #remove-image -removeImage.title=Remove image -removeImage.header=Remove image -removeImage.removeImage=Remove image -removeImage.submit=Remove image +removeImage.title=画像の削除 +removeImage.header=画像の削除 +removeImage.removeImage=画像の削除 +removeImage.submit=画像を削除 From f165439d2614f321e897e64829c1e6073e09e28e Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Fri, 9 Aug 2024 08:57:29 +0100 Subject: [PATCH 16/18] Update remove-pages.html #1656 --- src/main/resources/templates/remove-pages.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/templates/remove-pages.html b/src/main/resources/templates/remove-pages.html index 84471ef2..3fcf7f6b 100644 --- a/src/main/resources/templates/remove-pages.html +++ b/src/main/resources/templates/remove-pages.html @@ -21,7 +21,7 @@

-
+
@@ -37,4 +37,4 @@ }); - \ No newline at end of file + From 68c387086ce000d353791a260ea208693a3c9b02 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 08:58:31 +0100 Subject: [PATCH 17/18] :memo: Update README: Translation Progress Table (#1655) :memo: Sync README > Made via sync_files.yml Co-authored-by: GitHub Action action@github.com --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb79c910..4e887454 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ Stirling PDF currently supports 38! | Indonesia (Bahasa Indonesia) (id_ID) | ![76%](https://geps.dev/progress/76) | | Irish (Gaeilge) (ga_IE) | ![98%](https://geps.dev/progress/98) | | Italian (Italiano) (it_IT) | ![99%](https://geps.dev/progress/99) | -| Japanese (日本語) (ja_JP) | ![89%](https://geps.dev/progress/89) | +| Japanese (日本語) (ja_JP) | ![92%](https://geps.dev/progress/92) | | Korean (한국어) (ko_KR) | ![84%](https://geps.dev/progress/84) | | Norwegian (Norsk) (no_NB) | ![97%](https://geps.dev/progress/97) | | Polish (Polski) (pl_PL) | ![92%](https://geps.dev/progress/92) | From f176558a39a13ae8457c5791187b7fd5046a9eb7 Mon Sep 17 00:00:00 2001 From: Ludy Date: Mon, 12 Aug 2024 18:22:32 +0200 Subject: [PATCH 18/18] Fix: Conditional Attribute Binding for the multiple Attribute in the File Selector Fragment (#1665) --- src/main/resources/templates/fragments/common.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/templates/fragments/common.html b/src/main/resources/templates/fragments/common.html index 291b75e8..f790f6c6 100644 --- a/src/main/resources/templates/fragments/common.html +++ b/src/main/resources/templates/fragments/common.html @@ -81,19 +81,19 @@ // Find the file input within the form var fileInput = $('input[type="file"]'); - + // Find the closest enclosing form of the file input var form = fileInput.closest('form'); - + // Find the submit button within the form var submitButton = form.find('button[type="submit"], input[type="submit"]'); - + const boredWaitingText = /*[[#{bored}]]*/ 'Bored Waiting?'; const downloadCompleteText = /*[[#{downloadComplete}]]*/ 'Download Complete'; window.downloadCompleteText = downloadCompleteText; // Create the 'show-game-btn' button var gameButton = $('

'); - + // Insert the 'show-game-btn' just above the submit button submitButton.before(gameButton); @@ -147,14 +147,14 @@
- +