首頁 > 軟體

詳解如何通過Java實現壓縮PDF檔案

2022-12-15 14:00:06

PDF檔案是我們日常辦公中使用最頻繁的檔案格式。但因為大多數PDF檔案都包含很多頁面影象或大量圖片,這就導致PDF檔案過大,處理起來較為麻煩。PDF檔案過大,就會導致傳輸或者下載的速度變慢,也會增加傳輸失敗的風險,影響辦公效率。因此我們需要對PDF檔案進行壓縮。本文將從以下兩方面介紹如何通過Java應用程式壓縮PDF檔案。

在使用PDF檔案過程中,經常會出現由於體積過大導致檔案傳輸失敗的情況。遇到這種情況,我們可以先將PDF檔案壓縮一下再進行傳輸。而除了壓縮檔案內容以外,壓縮圖片是縮小PDF檔案的主要方法之一。本文將分為2部分分別介紹如何通過Java程式碼壓縮PDF檔案。希望這篇文章能對大家有所幫助。

  • 壓縮PDF檔案中的內容及圖片
  • 壓縮PDF檔案中的高解析度圖片

引入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 檔案。

完整程式碼

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 檔案。

完整程式碼

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");
    }
}

效果對比圖

到此這篇關於詳解如何通過Java實現壓縮PDF檔案的文章就介紹到這了,更多相關Java壓縮PDF內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com