mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2024-11-13 03:00:10 +01:00
Extract images enhancements (#1757)
* fix * extarct images * langs * logging * cuke fix --------- Co-authored-by: a <a>
This commit is contained in:
parent
63dfcfe688
commit
47314a0f38
Binary file not shown.
@ -95,7 +95,7 @@ Feature: API Validation
|
|||||||
|
|
||||||
|
|
||||||
@extract-images
|
@extract-images
|
||||||
Scenario Outline: Extract Image Scans
|
Scenario Outline: Extract Image Scans duplicates
|
||||||
Given I use an example file at "exampleFiles/images.pdf" as parameter "fileInput"
|
Given I use an example file at "exampleFiles/images.pdf" as parameter "fileInput"
|
||||||
And the request data includes
|
And the request data includes
|
||||||
| parameter | value |
|
| parameter | value |
|
||||||
@ -103,7 +103,7 @@ Feature: API Validation
|
|||||||
When I send the API request to the endpoint "/api/v1/misc/extract-images"
|
When I send the API request to the endpoint "/api/v1/misc/extract-images"
|
||||||
Then the response content type should be "application/octet-stream"
|
Then the response content type should be "application/octet-stream"
|
||||||
And the response file should have extension ".zip"
|
And the response file should have extension ".zip"
|
||||||
And the response ZIP should contain 20 files
|
And the response ZIP should contain 2 files
|
||||||
And the response file should have size greater than 0
|
And the response file should have size greater than 0
|
||||||
And the response status code should be 200
|
And the response status code should be 200
|
||||||
|
|
||||||
@ -112,5 +112,3 @@ Feature: API Validation
|
|||||||
| png |
|
| png |
|
||||||
| gif |
|
| gif |
|
||||||
| jpeg |
|
| jpeg |
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,6 +5,9 @@ import java.awt.image.BufferedImage;
|
|||||||
import java.awt.image.RenderedImage;
|
import java.awt.image.RenderedImage;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
@ -36,7 +39,8 @@ import io.github.pixee.security.Filenames;
|
|||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
import stirling.software.SPDF.model.api.PDFWithImageFormatRequest;
|
import stirling.software.SPDF.model.api.PDFExtractImagesRequest;
|
||||||
|
import stirling.software.SPDF.utils.ImageProcessingUtils;
|
||||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@ -51,11 +55,11 @@ public class ExtractImagesController {
|
|||||||
summary = "Extract images from a PDF file",
|
summary = "Extract images from a PDF file",
|
||||||
description =
|
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<byte[]> extractImages(@ModelAttribute PDFWithImageFormatRequest request)
|
public ResponseEntity<byte[]> extractImages(@ModelAttribute PDFExtractImagesRequest request)
|
||||||
throws IOException, InterruptedException, ExecutionException {
|
throws IOException, InterruptedException, ExecutionException {
|
||||||
MultipartFile file = request.getFileInput();
|
MultipartFile file = request.getFileInput();
|
||||||
String format = request.getFormat();
|
String format = request.getFormat();
|
||||||
|
boolean allowDuplicates = request.isAllowDuplicates();
|
||||||
System.out.println(
|
System.out.println(
|
||||||
System.currentTimeMillis() + " file=" + file.getName() + ", format=" + format);
|
System.currentTimeMillis() + " file=" + file.getName() + ", format=" + format);
|
||||||
PDDocument document = Loader.loadPDF(file.getBytes());
|
PDDocument document = Loader.loadPDF(file.getBytes());
|
||||||
@ -75,7 +79,7 @@ public class ExtractImagesController {
|
|||||||
String filename =
|
String filename =
|
||||||
Filenames.toSimpleFileName(file.getOriginalFilename())
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
.replaceFirst("[.][^.]+$", "");
|
.replaceFirst("[.][^.]+$", "");
|
||||||
Set<Integer> processedImages = new HashSet<>();
|
Set<byte[]> processedImages = new HashSet<>();
|
||||||
|
|
||||||
if (useMultithreading) {
|
if (useMultithreading) {
|
||||||
// Executor service to handle multithreading
|
// Executor service to handle multithreading
|
||||||
@ -92,7 +96,13 @@ public class ExtractImagesController {
|
|||||||
executor.submit(
|
executor.submit(
|
||||||
() -> {
|
() -> {
|
||||||
extractImagesFromPage(
|
extractImagesFromPage(
|
||||||
page, format, filename, pageNum, processedImages, zos);
|
page,
|
||||||
|
format,
|
||||||
|
filename,
|
||||||
|
pageNum,
|
||||||
|
processedImages,
|
||||||
|
zos,
|
||||||
|
allowDuplicates);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -110,7 +120,8 @@ public class ExtractImagesController {
|
|||||||
// Single-threaded extraction
|
// Single-threaded extraction
|
||||||
for (int pgNum = 0; pgNum < document.getPages().getCount(); pgNum++) {
|
for (int pgNum = 0; pgNum < document.getPages().getCount(); pgNum++) {
|
||||||
PDPage page = document.getPage(pgNum);
|
PDPage page = document.getPage(pgNum);
|
||||||
extractImagesFromPage(page, format, filename, pgNum + 1, processedImages, zos);
|
extractImagesFromPage(
|
||||||
|
page, format, filename, pgNum + 1, processedImages, zos, allowDuplicates);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,21 +148,34 @@ public class ExtractImagesController {
|
|||||||
String format,
|
String format,
|
||||||
String filename,
|
String filename,
|
||||||
int pageNum,
|
int pageNum,
|
||||||
Set<Integer> processedImages,
|
Set<byte[]> processedImages,
|
||||||
ZipOutputStream zos)
|
ZipOutputStream zos,
|
||||||
|
boolean allowDuplicates)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
MessageDigest md;
|
||||||
|
try {
|
||||||
|
md = MessageDigest.getInstance("MD5");
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
logger.error("MD5 algorithm not available for extractImages hash.", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (page.getResources() == null || page.getResources().getXObjectNames() == null) {
|
if (page.getResources() == null || page.getResources().getXObjectNames() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
int count = 1;
|
||||||
for (COSName name : page.getResources().getXObjectNames()) {
|
for (COSName name : page.getResources().getXObjectNames()) {
|
||||||
if (page.getResources().isImageXObject(name)) {
|
if (page.getResources().isImageXObject(name)) {
|
||||||
PDImageXObject image = (PDImageXObject) page.getResources().getXObject(name);
|
PDImageXObject image = (PDImageXObject) page.getResources().getXObject(name);
|
||||||
int imageHash = image.hashCode();
|
if (!allowDuplicates) {
|
||||||
synchronized (processedImages) {
|
byte[] data = ImageProcessingUtils.getImageData(image.getImage());
|
||||||
if (processedImages.contains(imageHash)) {
|
byte[] imageHash = md.digest(data);
|
||||||
continue; // Skip already processed images
|
synchronized (processedImages) {
|
||||||
|
if (processedImages.stream()
|
||||||
|
.anyMatch(hash -> Arrays.equals(hash, imageHash))) {
|
||||||
|
continue; // Skip already processed images
|
||||||
|
}
|
||||||
|
processedImages.add(imageHash);
|
||||||
}
|
}
|
||||||
processedImages.add(imageHash);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderedImage renderedImage = image.getImage();
|
RenderedImage renderedImage = image.getImage();
|
||||||
@ -160,7 +184,7 @@ public class ExtractImagesController {
|
|||||||
BufferedImage bufferedImage = convertToRGB(renderedImage, format);
|
BufferedImage bufferedImage = convertToRGB(renderedImage, format);
|
||||||
|
|
||||||
// Write image to zip file
|
// Write image to zip file
|
||||||
String imageName = filename + "_" + imageHash + " (Page " + pageNum + ")." + format;
|
String imageName = filename + "_page_" + pageNum + "_" + count++ + "." + format;
|
||||||
synchronized (zos) {
|
synchronized (zos) {
|
||||||
zos.putNextEntry(new ZipEntry(imageName));
|
zos.putNextEntry(new ZipEntry(imageName));
|
||||||
ByteArrayOutputStream imageBaos = new ByteArrayOutputStream();
|
ByteArrayOutputStream imageBaos = new ByteArrayOutputStream();
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
package stirling.software.SPDF.model.api;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class PDFExtractImagesRequest extends PDFWithImageFormatRequest {
|
||||||
|
|
||||||
|
@Schema(
|
||||||
|
description =
|
||||||
|
"Boolean to enable/disable the saving of duplicate images, true to enable duplicates")
|
||||||
|
private boolean allowDuplicates;
|
||||||
|
}
|
@ -262,4 +262,5 @@ public class GeneralUtils {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
package stirling.software.SPDF.utils;
|
package stirling.software.SPDF.utils;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.DataBuffer;
|
||||||
|
import java.awt.image.DataBufferByte;
|
||||||
|
import java.awt.image.DataBufferInt;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
public class ImageProcessingUtils {
|
public class ImageProcessingUtils {
|
||||||
|
|
||||||
@ -29,4 +33,30 @@ public class ImageProcessingUtils {
|
|||||||
}
|
}
|
||||||
return convertedImage;
|
return convertedImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static byte[] getImageData(BufferedImage image) {
|
||||||
|
DataBuffer dataBuffer = image.getRaster().getDataBuffer();
|
||||||
|
if (dataBuffer instanceof DataBufferByte) {
|
||||||
|
return ((DataBufferByte) dataBuffer).getData();
|
||||||
|
} else if (dataBuffer instanceof DataBufferInt) {
|
||||||
|
int[] intData = ((DataBufferInt) dataBuffer).getData();
|
||||||
|
ByteBuffer byteBuffer = ByteBuffer.allocate(intData.length * 4);
|
||||||
|
byteBuffer.asIntBuffer().put(intData);
|
||||||
|
return byteBuffer.array();
|
||||||
|
} else {
|
||||||
|
int width = image.getWidth();
|
||||||
|
int height = image.getHeight();
|
||||||
|
byte[] data = new byte[width * height * 3];
|
||||||
|
int index = 0;
|
||||||
|
for (int y = 0; y < height; y++) {
|
||||||
|
for (int x = 0; x < width; x++) {
|
||||||
|
int rgb = image.getRGB(x, y);
|
||||||
|
data[index++] = (byte) ((rgb >> 16) & 0xFF); // Red
|
||||||
|
data[index++] = (byte) ((rgb >> 8) & 0xFF); // Green
|
||||||
|
data[index++] = (byte) (rgb & 0xFF); // Blue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=معالجة PDF باستخدام OCR
|
|||||||
extractImages.title=استخراج الصور
|
extractImages.title=استخراج الصور
|
||||||
extractImages.header=استخراج الصور
|
extractImages.header=استخراج الصور
|
||||||
extractImages.selectText=حدد تنسيق الصورة لتحويل الصور المستخرجة إلى
|
extractImages.selectText=حدد تنسيق الصورة لتحويل الصور المستخرجة إلى
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=استخراج
|
extractImages.submit=استخراج
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Обработка на PDF чрез OCR
|
|||||||
extractImages.title=Извличане на изображения
|
extractImages.title=Извличане на изображения
|
||||||
extractImages.header=Извличане на изображения
|
extractImages.header=Извличане на изображения
|
||||||
extractImages.selectText=Изберете формат на изображението, в който да преобразувате извлечените изображения
|
extractImages.selectText=Изберете формат на изображението, в който да преобразувате извлечените изображения
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Извличане
|
extractImages.submit=Извличане
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Processa PDF amb OCR
|
|||||||
extractImages.title=Extreu Imatges
|
extractImages.title=Extreu Imatges
|
||||||
extractImages.header=Extreu Imatges
|
extractImages.header=Extreu Imatges
|
||||||
extractImages.selectText=Selecciona el format d'imatge al qual convertir les imatges extretes
|
extractImages.selectText=Selecciona el format d'imatge al qual convertir les imatges extretes
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extreu
|
extractImages.submit=Extreu
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Zpracovat PDF s OCR
|
|||||||
extractImages.title=Extrahovat obrázky
|
extractImages.title=Extrahovat obrázky
|
||||||
extractImages.header=Extrahovat obrázky
|
extractImages.header=Extrahovat obrázky
|
||||||
extractImages.selectText=Vyberte formát obrázku pro extrahované obrázky
|
extractImages.selectText=Vyberte formát obrázku pro extrahované obrázky
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extrahovat
|
extractImages.submit=Extrahovat
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr = left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
language.direction=ltr
|
language.direction=ltr
|
||||||
|
|
||||||
pdfPrompt=Vælg PDF-fil(er)
|
pdfPrompt=Vælg PDF-fil(er)
|
||||||
@ -802,6 +802,7 @@ ocr.submit=Process PDF with OCR
|
|||||||
extractImages.title=Extract Images
|
extractImages.title=Extract Images
|
||||||
extractImages.header=Extract Images
|
extractImages.header=Extract Images
|
||||||
extractImages.selectText=Select image format to convert extracted images to
|
extractImages.selectText=Select image format to convert extracted images to
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extract
|
extractImages.submit=Extract
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
language.direction=ltr
|
language.direction=ltr
|
||||||
|
|
||||||
pdfPrompwt=PDF auswählen
|
pdfPrompt=Select PDF(s)
|
||||||
multiPdfPrompt=PDFs auswählen(2+)
|
multiPdfPrompt=PDFs auswählen(2+)
|
||||||
multiPdfDropPrompt=Wählen Sie alle gewünschten PDFs aus (oder ziehen Sie sie per Drag & Drop hierhin)
|
multiPdfDropPrompt=Wählen Sie alle gewünschten PDFs aus (oder ziehen Sie sie per Drag & Drop hierhin)
|
||||||
imgPrompt=Wählen Sie ein Bild
|
imgPrompt=Wählen Sie ein Bild
|
||||||
@ -802,6 +802,7 @@ ocr.submit=PDF mit OCR verarbeiten
|
|||||||
extractImages.title=Bilder extrahieren
|
extractImages.title=Bilder extrahieren
|
||||||
extractImages.header=Bilder extrahieren
|
extractImages.header=Bilder extrahieren
|
||||||
extractImages.selectText=Wählen Sie das Bildformat aus, in das extrahierte Bilder konvertiert werden sollen
|
extractImages.selectText=Wählen Sie das Bildformat aus, in das extrahierte Bilder konvertiert werden sollen
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extrahieren
|
extractImages.submit=Extrahieren
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Επεξεργασία PDF με OCR
|
|||||||
extractImages.title=Εξαγωγή Εικόνων
|
extractImages.title=Εξαγωγή Εικόνων
|
||||||
extractImages.header=Εξαγωγή Εικόνων
|
extractImages.header=Εξαγωγή Εικόνων
|
||||||
extractImages.selectText=Επιλέξτε μορφή εικόνας για να μετατρέψετε τις εξαγόμενες εικόνες
|
extractImages.selectText=Επιλέξτε μορφή εικόνας για να μετατρέψετε τις εξαγόμενες εικόνες
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Εξαγωγή
|
extractImages.submit=Εξαγωγή
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Process PDF with OCR
|
|||||||
extractImages.title=Extract Images
|
extractImages.title=Extract Images
|
||||||
extractImages.header=Extract Images
|
extractImages.header=Extract Images
|
||||||
extractImages.selectText=Select image format to convert extracted images to
|
extractImages.selectText=Select image format to convert extracted images to
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extract
|
extractImages.submit=Extract
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Process PDF with OCR
|
|||||||
extractImages.title=Extract Images
|
extractImages.title=Extract Images
|
||||||
extractImages.header=Extract Images
|
extractImages.header=Extract Images
|
||||||
extractImages.selectText=Select image format to convert extracted images to
|
extractImages.selectText=Select image format to convert extracted images to
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extract
|
extractImages.submit=Extract
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Procesar PDF con OCR
|
|||||||
extractImages.title=Extraer imágenes
|
extractImages.title=Extraer imágenes
|
||||||
extractImages.header=Extraer imágenes
|
extractImages.header=Extraer imágenes
|
||||||
extractImages.selectText=Seleccionar el formato de imagen para convertir las imágenes extraídas
|
extractImages.selectText=Seleccionar el formato de imagen para convertir las imágenes extraídas
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extraer
|
extractImages.submit=Extraer
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=PDF prozesatu OCR-rekin
|
|||||||
extractImages.title=Atera irudiak
|
extractImages.title=Atera irudiak
|
||||||
extractImages.header=Atera irudiak
|
extractImages.header=Atera irudiak
|
||||||
extractImages.selectText=Hautatu irudi-formatua ateratako irudiak bihurtzeko
|
extractImages.selectText=Hautatu irudi-formatua ateratako irudiak bihurtzeko
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Atera
|
extractImages.submit=Atera
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Traiter
|
|||||||
extractImages.title=Extraire les images
|
extractImages.title=Extraire les images
|
||||||
extractImages.header=Extraire les images
|
extractImages.header=Extraire les images
|
||||||
extractImages.selectText=Format d’image dans lequel convertir les images extraites
|
extractImages.selectText=Format d’image dans lequel convertir les images extraites
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extraire
|
extractImages.submit=Extraire
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr = left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
language.direction=ltr
|
language.direction=ltr
|
||||||
|
|
||||||
pdfPrompt=Roghnaigh PDF(s)
|
pdfPrompt=Roghnaigh PDF(s)
|
||||||
@ -802,6 +802,7 @@ ocr.submit=Próiseáil PDF le OCR
|
|||||||
extractImages.title=Sliocht Íomhánna
|
extractImages.title=Sliocht Íomhánna
|
||||||
extractImages.header=Sliocht Íomhánna
|
extractImages.header=Sliocht Íomhánna
|
||||||
extractImages.selectText=Roghnaigh formáid íomhá chun íomhánna bainte a thiontú go
|
extractImages.selectText=Roghnaigh formáid íomhá chun íomhánna bainte a thiontú go
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Sliocht
|
extractImages.submit=Sliocht
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=OCR के साथ PDF प्रोसेस करें
|
|||||||
extractImages.title=छवियां निकालें
|
extractImages.title=छवियां निकालें
|
||||||
extractImages.header=छवियां निकालें
|
extractImages.header=छवियां निकालें
|
||||||
extractImages.selectText=निकाली गई छवियों को कन्वर्ट करने के लिए छवि प्रारूप चुनें
|
extractImages.selectText=निकाली गई छवियों को कन्वर्ट करने के लिए छवि प्रारूप चुनें
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=निकालें
|
extractImages.submit=निकालें
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Obradi PDF sa OCR-om
|
|||||||
extractImages.title=Ekstrakt slika
|
extractImages.title=Ekstrakt slika
|
||||||
extractImages.header=Ekstrakt slika
|
extractImages.header=Ekstrakt slika
|
||||||
extractImages.selectText=Odaberite format slike za pretvaranje izdvojenih slika
|
extractImages.selectText=Odaberite format slike za pretvaranje izdvojenih slika
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Izdvajanje
|
extractImages.submit=Izdvajanje
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=PDF feldolgozása OCR-rel
|
|||||||
extractImages.title=Képek kinyerése
|
extractImages.title=Képek kinyerése
|
||||||
extractImages.header=Képek kinyerése
|
extractImages.header=Képek kinyerése
|
||||||
extractImages.selectText=Válassza ki a képformátumot a kinyert képek konvertálásához
|
extractImages.selectText=Válassza ki a képformátumot a kinyert képek konvertálásához
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Kinyerés
|
extractImages.submit=Kinyerés
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Memproses PDF dengan OCR
|
|||||||
extractImages.title=Ekstrak Gambar
|
extractImages.title=Ekstrak Gambar
|
||||||
extractImages.header=Mengekstrak Gambar
|
extractImages.header=Mengekstrak Gambar
|
||||||
extractImages.selectText=Pilih format gambar yang akan dikonversi
|
extractImages.selectText=Pilih format gambar yang akan dikonversi
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Ekstrak
|
extractImages.submit=Ekstrak
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Scansiona testo nel PDF con OCR
|
|||||||
extractImages.title=Estrai immagini
|
extractImages.title=Estrai immagini
|
||||||
extractImages.header=Estrai immagini
|
extractImages.header=Estrai immagini
|
||||||
extractImages.selectText=Seleziona il formato in cui salvare le immagini estratte
|
extractImages.selectText=Seleziona il formato in cui salvare le immagini estratte
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Estrai
|
extractImages.submit=Estrai
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=OCRでPDFを処理する
|
|||||||
extractImages.title=画像の抽出
|
extractImages.title=画像の抽出
|
||||||
extractImages.header=画像の抽出
|
extractImages.header=画像の抽出
|
||||||
extractImages.selectText=抽出した画像のフォーマットを選択
|
extractImages.selectText=抽出した画像のフォーマットを選択
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=抽出
|
extractImages.submit=抽出
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=인식
|
|||||||
extractImages.title=이미지 추출
|
extractImages.title=이미지 추출
|
||||||
extractImages.header=이미지 추출
|
extractImages.header=이미지 추출
|
||||||
extractImages.selectText=추출된 이미지를 변환할 이미지 형식을 선택합니다.
|
extractImages.selectText=추출된 이미지를 변환할 이미지 형식을 선택합니다.
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=추출
|
extractImages.submit=추출
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Verwerk PDF met OCR
|
|||||||
extractImages.title=Afbeeldingen extraheren
|
extractImages.title=Afbeeldingen extraheren
|
||||||
extractImages.header=Afbeeldingen extraheren
|
extractImages.header=Afbeeldingen extraheren
|
||||||
extractImages.selectText=Selecteer het beeldformaat voor geëxtraheerde afbeeldingen
|
extractImages.selectText=Selecteer het beeldformaat voor geëxtraheerde afbeeldingen
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extraheer
|
extractImages.submit=Extraheer
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Behandle PDF med OCR
|
|||||||
extractImages.title=Hent ut bilder
|
extractImages.title=Hent ut bilder
|
||||||
extractImages.header=Hent ut bilder
|
extractImages.header=Hent ut bilder
|
||||||
extractImages.selectText=Velg bildeformat for å konvertere de hentede bildene til
|
extractImages.selectText=Velg bildeformat for å konvertere de hentede bildene til
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Hent ut
|
extractImages.submit=Hent ut
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Przetwarzaj PDF za pomocą OCR
|
|||||||
extractImages.title=Wyodrębnij obrazy
|
extractImages.title=Wyodrębnij obrazy
|
||||||
extractImages.header=Wyodrębnij obrazy
|
extractImages.header=Wyodrębnij obrazy
|
||||||
extractImages.selectText=Wybierz format obrazu, na który chcesz przekonwertować wyodrębniony obraz.
|
extractImages.selectText=Wybierz format obrazu, na który chcesz przekonwertować wyodrębniony obraz.
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Wyodrębnij
|
extractImages.submit=Wyodrębnij
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Processar PDF com OCR
|
|||||||
extractImages.title=Extrair imagens
|
extractImages.title=Extrair imagens
|
||||||
extractImages.header=Extrair imagens
|
extractImages.header=Extrair imagens
|
||||||
extractImages.selectText=Selecione o formato de imagem para converter as imagens extraídas
|
extractImages.selectText=Selecione o formato de imagem para converter as imagens extraídas
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extrair
|
extractImages.submit=Extrair
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Processar PDF com OCR
|
|||||||
extractImages.title=Extrair Imagens
|
extractImages.title=Extrair Imagens
|
||||||
extractImages.header=Extrair Imagens
|
extractImages.header=Extrair Imagens
|
||||||
extractImages.selectText=Selecione o formato de imagem para converter as imagens extraídas
|
extractImages.selectText=Selecione o formato de imagem para converter as imagens extraídas
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extrair
|
extractImages.submit=Extrair
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Procesează PDF-ul cu OCR
|
|||||||
extractImages.title=Extrage Imagini
|
extractImages.title=Extrage Imagini
|
||||||
extractImages.header=Extrage Imagini
|
extractImages.header=Extrage Imagini
|
||||||
extractImages.selectText=Selectați formatul imaginii în care să se convertească imaginile extrase
|
extractImages.selectText=Selectați formatul imaginii în care să se convertească imaginile extrase
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extrage
|
extractImages.submit=Extrage
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Обработка PDF с OCR
|
|||||||
extractImages.title=Извлечь изображения
|
extractImages.title=Извлечь изображения
|
||||||
extractImages.header=Извлечь изображения
|
extractImages.header=Извлечь изображения
|
||||||
extractImages.selectText=Выберите формат изображения для преобразования извлеченных изображений в
|
extractImages.selectText=Выберите формат изображения для преобразования извлеченных изображений в
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Извлечь
|
extractImages.submit=Извлечь
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Spracovať PDF s OCR
|
|||||||
extractImages.title=Extrahovať obrázky
|
extractImages.title=Extrahovať obrázky
|
||||||
extractImages.header=Extrahovať obrázky
|
extractImages.header=Extrahovať obrázky
|
||||||
extractImages.selectText=Vyberte formát obrázka na konverziu extrahovaných obrázkov
|
extractImages.selectText=Vyberte formát obrázka na konverziu extrahovaných obrázkov
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extrahovať
|
extractImages.submit=Extrahovať
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Obradi PDF sa OCR-om
|
|||||||
extractImages.title=Izdvajanje slika
|
extractImages.title=Izdvajanje slika
|
||||||
extractImages.header=Izdvajanje slika
|
extractImages.header=Izdvajanje slika
|
||||||
extractImages.selectText=Odaberite format slike za konvertovanje izdvojenih slika
|
extractImages.selectText=Odaberite format slike za konvertovanje izdvojenih slika
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Izdvajanje
|
extractImages.submit=Izdvajanje
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Bearbeta PDF med OCR
|
|||||||
extractImages.title=Extrahera bilder
|
extractImages.title=Extrahera bilder
|
||||||
extractImages.header=Extrahera bilder
|
extractImages.header=Extrahera bilder
|
||||||
extractImages.selectText=Välj bildformat att konvertera extraherade bilder till
|
extractImages.selectText=Välj bildformat att konvertera extraherade bilder till
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Extrahera
|
extractImages.submit=Extrahera
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=ประมวลผล PDF ด้วย OCR
|
|||||||
extractImages.title=แยกรูปภาพ
|
extractImages.title=แยกรูปภาพ
|
||||||
extractImages.header=แยกรูปภาพ
|
extractImages.header=แยกรูปภาพ
|
||||||
extractImages.selectText=เลือกรูปแบบภาพที่จะใช้ในการแปลงรูปภาพที่แยกได้
|
extractImages.selectText=เลือกรูปแบบภาพที่จะใช้ในการแปลงรูปภาพที่แยกได้
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=แยก
|
extractImages.submit=แยก
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=PDF'i OCR(Metin Tanıma) ile İşle
|
|||||||
extractImages.title=Resimleri Çıkar
|
extractImages.title=Resimleri Çıkar
|
||||||
extractImages.header=Resimleri Çıkar
|
extractImages.header=Resimleri Çıkar
|
||||||
extractImages.selectText=Çıkarılan resimleri dönüştürmek için resim formatını seçin
|
extractImages.selectText=Çıkarılan resimleri dönüştürmek için resim formatını seçin
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Çıkar
|
extractImages.submit=Çıkar
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=Обробка PDF з OCR
|
|||||||
extractImages.title=Витягнути зображення
|
extractImages.title=Витягнути зображення
|
||||||
extractImages.header=Витягнути зображення
|
extractImages.header=Витягнути зображення
|
||||||
extractImages.selectText=Виберіть формат зображення для перетворення витягнутих зображень у
|
extractImages.selectText=Виберіть формат зображення для перетворення витягнутих зображень у
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Витягнути
|
extractImages.submit=Витягнути
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
###########
|
###########
|
||||||
# Generic #
|
# Generic #
|
||||||
###########
|
###########
|
||||||
# the direction that the language is written (ltr = left to right, rtl = right to left)
|
# the direction that the language is written (ltr=left to right, rtl = right to left)
|
||||||
language.direction=ltr
|
language.direction=ltr
|
||||||
|
|
||||||
pdfPrompt=Chọn (các) tệp PDF
|
pdfPrompt=Chọn (các) tệp PDF
|
||||||
@ -802,6 +802,7 @@ ocr.submit=Xử lý PDF với OCR
|
|||||||
extractImages.title=Trích xuất hình ảnh
|
extractImages.title=Trích xuất hình ảnh
|
||||||
extractImages.header=Trích xuất hình ảnh
|
extractImages.header=Trích xuất hình ảnh
|
||||||
extractImages.selectText=Chọn định dạng hình ảnh để chuyển đổi hình ảnh đã trích xuất
|
extractImages.selectText=Chọn định dạng hình ảnh để chuyển đổi hình ảnh đã trích xuất
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=Trích xuất
|
extractImages.submit=Trích xuất
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=用OCR处理PDF
|
|||||||
extractImages.title=提取图像
|
extractImages.title=提取图像
|
||||||
extractImages.header=提取图像
|
extractImages.header=提取图像
|
||||||
extractImages.selectText=选择图像格式,将提取的图像转换为
|
extractImages.selectText=选择图像格式,将提取的图像转换为
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=提取
|
extractImages.submit=提取
|
||||||
|
|
||||||
|
|
||||||
|
@ -802,6 +802,7 @@ ocr.submit=使用 OCR 處理 PDF
|
|||||||
extractImages.title=提取圖片
|
extractImages.title=提取圖片
|
||||||
extractImages.header=提取圖片
|
extractImages.header=提取圖片
|
||||||
extractImages.selectText=選擇要轉換提取影像的影像格式
|
extractImages.selectText=選擇要轉換提取影像的影像格式
|
||||||
|
extractImages.allowDuplicates=Save duplicate images
|
||||||
extractImages.submit=提取
|
extractImages.submit=提取
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,6 +27,10 @@
|
|||||||
<option value="gif">GIF</option>
|
<option value="gif">GIF</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<input type="checkbox" name="allowDuplicates" id="allowDuplicates">
|
||||||
|
<label for="allowDuplicates" th:text="#{extractImages.allowDuplicates}"></label>
|
||||||
|
</div>
|
||||||
<button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{extractImages.submit}"></button>
|
<button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{extractImages.submit}"></button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user