Java에서 PDF 이미지 압축
Spire.Pdf.jar 설치
Maven을 사용하는 경우 프로젝트의 pom.xml 파일에 다음 코드를 추가하여 애플리케이션에서 Spire.Pdf.jar를 쉽게 가져올 수 있습니다. 비 Maven 프로젝트의 경우 this link에서 jar 파일을 다운로드하고 수동으로 애플리케이션의 종속성으로 추가합니다.
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>http://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId> e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<verson>4.8.7</version>
</dependency>
</dependencies>
예시 1. 고품질 이미지만 압축
Spire.PDF는 PdfPageBase.getImagesInfo() 메서드를 제공하여 특정 페이지에서 이미지 정보를 검색합니다. 이미지 정보에는 PdfImageInfo.getIndex() 메서드에 의해 반환되는 이미지 인덱스가 포함됩니다. 그런 다음 PdfPageBase.tryCompressImage(int imgIndex) 메서드를 사용하여 지정된 이미지를 압축할 수 있습니다.
tryCompressImage() 메서드는 고해상도 이미지만 압축합니다. 저품질 이미지는 더 이상 압축되지 않습니다.
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.exporting.PdfImageInfo;
public class CompressHighQualityImage {
public static void main(String[] args) {
//Load the sample PDF document
PdfDocument doc = new PdfDocument("C:\\Users\\Administrator\\Desktop\\Images.pdf");
//Set IncrementalUpdate to false
doc.getFileInfo().setIncrementalUpdate(false);
//Declare a PdfPageBase variable
PdfPageBase page;
//Loop through the pages
for (int i = 0; i < doc.getPages().getCount(); i++) {
//Get the specific page
page = doc.getPages().get(i);
if (page != null) {
if(page.getImagesInfo() != null){
//Loop through the images in the page
for (PdfImageInfo info: page.getImagesInfo()) {
//Use tryCompressImage method the compress high-resolution images
page.tryCompressImage(info.getIndex());
}
}
}
}
//Save to file
doc.saveToFile("output/Compressed.pdf");
}
}
예시 2. 이미지를 어느 정도 압축
PDF 페이지에서 이미지 정보를 가져온 후 특정 이미지를 기반으로 PdfBitmap 개체를 만들 수 있습니다. PdfBitmap.setQuality() 메서드를 사용하여 이미지 품질을 어느 정도 줄인 다음 PdfPageBase.replaceImage() 메서드를 사용하여 문서에서 이전 이미지를 압축된 이미지로 바꿉니다.
import com.spire.license.LicenseProvider;
import com.spire.pdf.*;
import com.spire.pdf.exporting.PdfImageInfo;
import com.spire.pdf.graphics.PdfBitmap;
public class CompressAllImages {
public static void main(String[] args) {
//Load the sample PDF document
PdfDocument doc = new PdfDocument("C:\\Users\\Administrator\\Desktop\\Images.pdf");
//Set IncrementalUpdate to false
doc.getFileInfo().setIncrementalUpdate(false);
//Loop through the pages
for (int i = 0; i < doc.getPages().getCount(); i++) {
//Get the specific page
PdfPageBase page = doc.getPages().get(i);
//Get image info from the page
PdfImageInfo[] images = page.getImagesInfo();
//Determine if there is any image in the pgae
if (images != null && images.length > 0)
//Loop through the images
for (int j = 0; j < images.length; j++) {
//Get the specific image
PdfImageInfo image = images[j];
PdfBitmap bp = new PdfBitmap(image.getImage());
//Reset the image quality
bp.setQuality(40);
//Replace the old image with the compressed image
page.replaceImage(j, bp);
}
}
//Save to file
doc.saveToFile("output/CompressAll.pdf", FileFormat.PDF);
doc.close();
}
}
Reference
이 문제에 관하여(Java에서 PDF 이미지 압축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eiceblue/compress-pdf-images-in-java-16b3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)