亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解如何通過Java實現(xiàn)壓縮PDF文檔

 更新時間:2022年12月13日 17:19:50   作者:E-iceblue  
PDF文檔是我們?nèi)粘^k公中使用最頻繁的文檔格式。但因為大多數(shù)PDF文檔都包含很多頁面圖像或大量圖片,這就導致PDF文檔過大,處理起來較為麻煩。本文將介紹如何通過Java應(yīng)用程序壓縮PDF文檔,需要的可以了解一下

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

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

  • 壓縮PDF文檔中的內(nèi)容及圖片
  • 壓縮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文檔中的內(nèi)容及圖片

壓縮PDF文檔中的內(nèi)容及圖片的詳細步驟如下:

  • 創(chuàng)建 PdfDocument 類的對象。
  • 使用 PdfDocument.loadFromFile() 方法加載 PDF 文檔。
  • 使用 PdfDocument.getFileInfo().setIncrementalUpdate() 方法將增量更新設(shè)置為false。
  • 使用 PdfDocument.setCompressionLevel() 方法將壓縮級別設(shè)置為最佳,以壓縮文檔中的內(nèi)容。 您可以從 PdfCompressionLevel 枚舉中選擇其他一些級別。
  • 循環(huán)遍歷文檔中的頁面,使用 PdfPageBase.getImagesInfo() 方法獲取每個頁面的圖像信息集合。
  • 遍歷集合中的所有項目,并使用 PdfBitmap.setQuality() 方法壓縮特定圖像的質(zhì)量。
  • 使用 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) {

        //創(chuàng)建 PdfDocument 類的對象。
        PdfDocument doc = new PdfDocument();

        //加載 PDF 文檔
        doc.loadFromFile("測試文檔.pdf");

        //將增量更新設(shè)置為false
        doc.getFileInfo().setIncrementalUpdate(false);

        //將壓縮級別設(shè)置為最佳
        doc.setCompressionLevel(PdfCompressionLevel.Best);

        //循環(huán)遍歷文檔中的頁面
        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());

                    //設(shè)置壓縮質(zhì)量
                    bp.setQuality(20);

                    //用壓縮后的圖片替換原始圖片
                    page.replaceImage(j, bp);
                }

            //保存文件
            doc.saveToFile("壓縮PDF文檔.pdf");
            doc.close();
        }
    }
}

效果對比圖

壓縮 PDF 文檔中的高分辨率圖像

本方法僅對文檔中的高分辨率圖像進行無損壓縮,而低分辨率的圖像將不再被壓縮。

  • 創(chuàng)建 PdfDocument 類的對象。
  • 使用 PdfDocument.loadFromFile() 方法加載 PDF 文檔。
  • 使用 PdfDocument.getFileInfo().setIncrementalUpdate() 方法將 IncrementalUpdate 設(shè)置為 false。
  •  聲明一個 PdfPageBase 變量。
  • 循環(huán)遍歷頁面并使用 PdfDocument.getPages().get() 方法獲取特定頁面。
  • 循環(huán)遍歷頁面中的圖像。并使用 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) {
 
        //創(chuàng)建 PdfDocument 類的對象
        PdfDocument doc = new PdfDocument
 
        //加載 PDF 文檔
        doc.loadFromFile("示例文檔.pdf");
 
        //將IncrementalUpdate設(shè)置為false
        doc.getFileInfo().setIncrementalUpdate(false);
 
        //聲明一個 PdfPageBase 變量
        PdfPageBase page;
 
        //循環(huán)遍歷頁面
        for (int i = 0; i < doc.getPages().getCount(); i++) {
 
            //獲取指定頁面
            page = doc.getPages().get(i);
            if (page != null) {
 
                if(page.getImagesInfo() != null){
 
                    //循環(huán)遍歷頁面中的圖像
                    for (PdfImageInfo info: page.getImagesInfo()) {
 
                        //使用tryCompressImage方法壓縮高分辨率圖像
                        page.tryCompressImage(info.getIndex());
                    }
                }
            }
        }
 
        //保存文件
        doc.saveToFile("輸出結(jié)果.pdf");
    }
}

效果對比圖

到此這篇關(guān)于詳解如何通過Java實現(xiàn)壓縮PDF文檔的文章就介紹到這了,更多相關(guān)Java壓縮PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 實例講解Java并發(fā)編程之變量

    實例講解Java并發(fā)編程之變量

    這篇文章主要介紹了實例講解Java并發(fā)編程之變量,本文講解了編寫線程安全需要關(guān)心的共享變量和可變變量,需要的朋友可以參考下
    2015-04-04
  • SpringBoot中EasyExcel實現(xiàn)Excel文件的導入導出

    SpringBoot中EasyExcel實現(xiàn)Excel文件的導入導出

    這篇文章主要介紹了SpringBoot中EasyExcel實現(xiàn)Excel文件的導入導出,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Mybatis遷移到Mybatis-Plus的實現(xiàn)方法

    Mybatis遷移到Mybatis-Plus的實現(xiàn)方法

    這篇文章主要介紹了Mybatis遷移到Mybatis-Plus的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Java有哪些操作字符串的類?區(qū)別在哪?

    Java有哪些操作字符串的類?區(qū)別在哪?

    今天給大家愛帶來的是關(guān)于Java的相關(guān)知識,文章圍繞著Java操作字符串的類展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java實現(xiàn)優(yōu)先隊列式廣度優(yōu)先搜索算法的示例代碼

    Java實現(xiàn)優(yōu)先隊列式廣度優(yōu)先搜索算法的示例代碼

    這篇文章主要為大家詳細介紹了Java如何實現(xiàn)優(yōu)先隊列式廣度優(yōu)先搜索算法,文中通過一個示例帶大家具體了解了實現(xiàn)的方法,需要的可以參考一下
    2022-08-08
  • Java基礎(chǔ)學習之關(guān)鍵字和變量數(shù)據(jù)類型的那些事

    Java基礎(chǔ)學習之關(guān)鍵字和變量數(shù)據(jù)類型的那些事

    變量就是系統(tǒng)為程序分配的一塊內(nèi)存單元,用來存儲各種類型的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)學習之關(guān)鍵字和變量數(shù)據(jù)類型的那些事,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • java實現(xiàn)十六進制字符unicode與中英文轉(zhuǎn)換示例

    java實現(xiàn)十六進制字符unicode與中英文轉(zhuǎn)換示例

    當需要對一個unicode十六進制字符串進行編碼時,首先做的應(yīng)該是確認字符集編碼格式,在無法快速獲知的情況下,通過一下的str4all方法可以達到這一目的
    2014-02-02
  • hadoop實現(xiàn)grep示例分享

    hadoop實現(xiàn)grep示例分享

    這篇文章主要介紹了hadoop實現(xiàn)grep示例,可從文檔中提取包含某些字符串的行,需要的朋友可以參考下
    2014-03-03
  • Springboot應(yīng)用中Mybatis輸出SQL日志的3種方法代碼示例

    Springboot應(yīng)用中Mybatis輸出SQL日志的3種方法代碼示例

    在前臺請求數(shù)據(jù)的時候,sql語句一直都是打印到控制臺的,有一個想法就是想讓它打印到日志里,該如何做呢?這篇文章主要給大家介紹了關(guān)于Springboot應(yīng)用中Mybatis輸出SQL日志的3種方法,需要的朋友可以參考下
    2024-01-01
  • Java Objects工具類原理及用法詳解

    Java Objects工具類原理及用法詳解

    這篇文章主要介紹了Java Objects工具類原理及用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08

最新評論