Я использую PDFBox 2.0.8 для замены изображения в документе PDF.Мой процесс включает в себя извлечение изображения из документа и запись в файловую систему.Сожмите изображение, которое было извлечено.Сжатое изображение необходимо заменить исходным изображением.Однако после замены PDF показывает искаженное изображение.См. Страницу # 1 по ссылке https://35.200.235.243/compression/download?fileName=/outbox/pdf/test123/test1-compress.pdf. Если я открою этот документ в Chrome, то, похоже, будет лучше.Однако на рабочем столе он искажен.В хроме цвет фона изменился.Тем не менее, в этом объекте нет маски
for (COSName xObjectName : resources.getXObjectNames()) {
PDXObject xObject = resources.getXObject(xObjectName);
if (xObject instanceof PDImageXObject) {
imageCounter++;
System.out.println("cosname="+xObjectName.toString());
PDImageXObject original_img = ((PDImageXObject) xObject);
String suffix = original_img.getSuffix();
File imageFile = new File(destPath+"/"+"image"+imageCounter+"."+suffix);
int imageWidth = original_img.getWidth();
int imageHeight = original_img.getHeight();
BufferedImage bImage = new BufferedImage(imageWidth,imageHeight,BufferedImage.TYPE_INT_RGB);
bImage = original_img.getOpaqueImage();
ImageIO.write(bImage,suffix, imageFile);
if(suffix.equalsIgnoreCase("jpg") || suffix.equalsIgnoreCase("jpeg")) {
System.out.println("found jpg="+imageFile.getAbsolutePath());
CompressPDFJPEG compress = new CompressPDFJPEG(imageFile.getAbsolutePath(), directoryID);
HashMap compressedFilesMap = compress.getCompressedFiles();
String compressedFiles [] = (String[]) compressedFilesMap.get("compressedFiles");
String replaceImageFile = "";
for (int i=0;i<compressedFiles.length;i++) {
if (compressedFiles[i] != null) {
replaceImageFile = compressedFiles[i];
PDImageXObject replacement_img = PDImageXObject.createFromFile(replaceImageFile, doc);
resources.put(xObjectName, replacement_img);
doc.save(outFileName);
break;
}
}
}
if(suffix.equalsIgnoreCase("png")) {
CompressPDFPNG compress = new CompressPDFPNG(imageFile.getAbsolutePath(), directoryID);
HashMap compressedFilesMap = compress.compressPNG();
String compressedFiles [] = (String[]) compressedFilesMap.get("compressedFiles");
String replaceImageFile = "";
for (int i=0;i<compressedFiles.length;i++) {
if (compressedFiles[i] != null) {
replaceImageFile = compressedFiles[i];
PDImageXObject replacement_img = PDImageXObject.createFromFile(replaceImageFile, doc);
resources.put(xObjectName, replacement_img);
break;
}
}
}
}
}
}
doc.close();
Вот различные ссылки Оригинальный PDF: https://35.200.235.243/compression/download?fileName=/inbox/pdf/test1.pdf Извлеченное изображение: https://35.200.235.243/compression/download?fileName=/work/pdf/test123/image2.jpg
Сжатое изображение: https://35.200.235.243/compression/download?fileName=/work/pdf/test123/image2-compress1.jpg Сжатый PDF: https://35.200.235.243/compression/download?fileName=/outbox/pdf/test123/test1-compress.pdf
Снимок экрана рабочего стола (сжатый PDF):