PDF檔案是我們日常辦公中使用最頻繁的檔案格式,但因為大多數PDF檔案都包含很多頁面影像或大量圖片,這就導致PDF檔案過大,處理起來較為麻煩,PDF檔案過大,就會導致傳輸或者下載的速度變慢,也會增加傳輸失敗的風險,影響辦公效率,因此我們需要對PDF檔案進行壓縮,本文將從以下兩方面介紹如何通過Java應用程式壓縮PDF檔案,
在使用PDF檔案程序中,經常會出現由于體積過大導致檔案傳輸失敗的情況,遇到這種情況,我們可以先將PDF檔案壓縮一下再進行傳輸,而除了壓縮檔案內容以外,壓縮圖片是縮小PDF檔案的主要方法之一,本文將分為2部分分別介紹如何通過Java代碼壓縮PDF檔案,希望這篇文章能對大家有所幫助,
- 壓縮PDF檔案中的內容及圖片
-
壓縮PDF檔案中的高解析度圖片
1.引入jar包
匯入方法1:
手動引入,將 Free Spire.PDF for Java 下載到本地,解壓,找到lib檔案夾下的Spire.PDF.jar檔案,在IDEA中打開如下界面,將本地路徑中的jar檔案引入Java程式:

匯入方法2:如果您想通過 Maven安裝,則可以在 pom.xml 檔案中添加以下代碼匯入 JAR 檔案,
<repositories>
<repository>
<id>com.e-iceblue</id>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf.free</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
壓縮PDF檔案中的內容及圖片
壓縮PDF檔案中的內容及圖片的詳細步驟如下:
-
創建 PdfDocument 類的物件,
-
使用 PdfDocument.loadFromFile() 方法加載 PDF 檔案,
-
使用 PdfDocument.getFileInfo().setIncrementalUpdate() 方法將增量更新設定為false,
-
使用 PdfDocument.setCompressionLevel() 方法將壓縮級別設定為最佳,以壓縮檔案中的內容, 您可以從 PdfCompressionLevel 列舉中選擇其他一些級別,
-
回圈遍歷檔案中的頁面,使用 PdfPageBase.getImagesInfo() 方法獲取每個頁面的影像資訊集合,
-
遍歷集合中的所有專案,并使用 PdfBitmap.setQuality() 方法壓縮特定影像的質量,
-
使用 PdfPageBase.replaceImage() 方法將原始影像替換為壓縮影像,使用 PdfDocument.saveToFile() 方法將檔案保存到另一個 PDF 檔案,
完整代碼
Java
import com.spire.pdf.PdfCompressionLevel; import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; import com.spire.pdf.exporting.PdfImageInfo; import com.spire.pdf.graphics.PdfBitmap; public class CompressPDFImage { public static void main(String[] args) { //創建 PdfDocument 類的物件, PdfDocument doc = new PdfDocument(); //加載 PDF 檔案 doc.loadFromFile("測驗檔案.pdf"); //將增量更新設定為false doc.getFileInfo().setIncrementalUpdate(false); //將壓縮級別設定為最佳 doc.setCompressionLevel(PdfCompressionLevel.Best); //回圈遍歷檔案中的頁面 for (int i = 0; i < doc.getPages().getCount(); i++) { //獲取特定頁面 PdfPageBase page = doc.getPages().get(i); //獲取每個頁面的影像資訊集合 PdfImageInfo[] images = page.getImagesInfo(); //遍歷集合中的專案 if (images != null && images.length > 0) for (int j = 0; j < images.length; j++) { //獲取指定影像 PdfImageInfo image = images[j]; PdfBitmap bp = new PdfBitmap(image.getImage()); //設定壓縮質量 bp.setQuality(20); //用壓縮后的圖片替換原始圖片 page.replaceImage(j, bp); } //保存檔案 doc.saveToFile("壓縮PDF檔案.pdf"); doc.close(); } } }
效果對比圖

壓縮 PDF 檔案中的高解析度影像
本方法僅對檔案中的高解析度影像進行無損壓縮,而低解析度的影像將不再被壓縮,
- 創建 PdfDocument 類的物件,
- 使用 PdfDocument.loadFromFile() 方法加載 PDF 檔案,
- 使用 PdfDocument.getFileInfo().setIncrementalUpdate() 方法將 IncrementalUpdate 設定為 false,
- 宣告一個 PdfPageBase 變數,
- 回圈遍歷頁面并使用 PdfDocument.getPages().get() 方法獲取特定頁面,
- 回圈遍歷頁面中的影像,并使用 page.tryCompressImage(info.Index) 方法壓縮高解析度影像,
- 使用 PdfDocument.saveToFile() 方法將檔案保存到另一個 PDF 檔案,
完整代碼
Java
import com.spire.pdf.PdfDocument; import com.spire.pdf.PdfPageBase; import com.spire.pdf.exporting.PdfImageInfo; public class CompressPDFImage { public static void main(String[] args) { //創建 PdfDocument 類的物件 PdfDocument doc = new PdfDocument //加載 PDF 檔案 doc.loadFromFile("示例檔案.pdf"); //將IncrementalUpdate設定為false doc.getFileInfo().setIncrementalUpdate(false); //宣告一個 PdfPageBase 變數 PdfPageBase page; //回圈遍歷頁面 for (int i = 0; i < doc.getPages().getCount(); i++) { //獲取指定頁面 page = doc.getPages().get(i); if (page != null) { if(page.getImagesInfo() != null){ //回圈遍歷頁面中的影像 for (PdfImageInfo info: page.getImagesInfo()) { //使用tryCompressImage方法壓縮高解析度影像 page.tryCompressImage(info.getIndex()); } } } } //保存檔案 doc.saveToFile("輸出結果.pdf"); } }
效果對比圖

—本文完—
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539843.html
標籤:其他
