最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用Spire.PDF實現(xiàn)高效壓縮PDF文件

 更新時間:2025年08月29日 09:03:52   作者:咕白m625  
這篇文章主要介紹了過大的文件體積常引發(fā)傳輸卡頓、加載緩慢等問題,本文將解析?Spire.PDF?for?Java?的?PDF?壓縮方案,有需要的可以了解下

在數(shù)字化辦公場景中,PDF文件因格式通用性成為主流載體,但過大的文件體積常引發(fā)傳輸卡頓、加載緩慢等問題。本文將解析 Spire.PDF for Java 的 PDF 壓縮方案,包括文檔內容、圖片、字體的壓縮等。

一、PDF壓縮的三大技術維度解析

Spire.PDF for Java 通過以下技術路徑實現(xiàn)精準壓縮:

1.圖像壓縮

圖片是導致PDF體積增大的主要因素,Spire.PDF for Java 支持設置setImageQuality()參數(shù),自動調整圖片質量, 以及設置 setResizeImages() 來減少圖片大小。

2.字體精簡策略

通過 setCompressFonts() 來壓縮字體,也可以通過setUnembedFonts()方法取消嵌入字體以減小文件大小。

3.內容優(yōu)化

通過 setCompressContents() 來壓縮PDF內部內容流,該方法能保持文檔完整性。

二、PDF 壓縮代碼

開發(fā)者可通過以下核心步驟實現(xiàn)壓縮 PDF:

// 創(chuàng)建 PdfCompressor 對象并傳入文檔
PdfCompressor compressor = new PdfCompressor("test.pdf");

// 壓縮內容
OptimizationOptions options = compressor.getOptions();
options.setCompressContents(true);

// 壓縮圖片
options.getImageCompressionOptions().setCompressImage(true);
options.getImageCompressionOptions().setImageQuality(ImageQuality.Low);
options.getImageCompressionOptions().setResizeImages(true);

// 優(yōu)化字體
options.getTextCompressionOptions().setCompressFonts(true);

Maven 依賴配置:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.pdf</artifactId>
    <version>11.8.3</version>
</dependency>

免費版:

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.pdf.free</artifactId>
    <version>9.13.0</version>
</dependency>

技術亮點

零依賴運行:無需安裝 Adobe Reader 或 Ghostscript

通過以上三重壓縮機制,Java開發(fā)者可以最大程度的減少 PDF 文檔大小。建議在文件生成階段即調用壓縮接口,相比后期處理更能節(jié)省系統(tǒng)資源。

三、方法補充

方法一:

添加依賴

<dependency>
    <groupId>com.luhuiguo</groupId>
    <artifactId><a  target="_blank" rel="nofollow">aspose-pdf</a></artifactId>
    <version>23.1</version>
</dependency>

示例代碼

public class OptimizePdf {

    public static void optimize(String source, String target) {
        <a  target="_blank" rel="nofollow">Document</a> doc = new Document(source);
        //設置壓縮屬性
        <a  target="_blank" rel="nofollow">OptimizationOptions</a> opt = new OptimizationOptions();
        //刪除PDF不必要的對象
        opt.setRemoveUnusedObjects(true);
        //鏈接重復流
        opt.setLinkDuplcateStreams(false);
        //刪除未使用的流
        opt.setRemoveUnusedStreams(false);
        //刪除不必要的字體
        opt.setUnembedFonts(true);
        //壓縮PDF中的圖片
        opt.getImageCompressionOptions().setCompressImages(true);
        //圖片壓縮比, 0 到100可選,越低壓縮比越大
        opt.getImageCompressionOptions().setImageQuality(50);
        doc.optimizeResources(opt);
        //優(yōu)化web的PDF文檔
        doc.optimize();
        doc.save(target);
    }

    public static void main(String[] args) {
        String source = "/Users/zhanghe/Desktop/2.pdf";
        String target = "/Users/zhanghe/Desktop/1.pdf";
        optimize(source, target);
    }
}

方法二:

引入依賴

<dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>3.0.0</version>
        </dependency>

完整代碼實現(xiàn)

import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.cos.COSName;

import java.io.File;
import java.io.IOException;

public class TextOptimizedPdfCompressor {

    public static void textOptimizedPdfCompressor(String inputPath, String outputPath) {
        try (PDDocument document = Loader.loadPDF(new File(inputPath))) {
            // 核心優(yōu)化流程(傳遞 document 參數(shù))
            for (PDPage page : document.getPages()) {
                compressContent(page);
                compressImages(document, page); // ? 關鍵修改:傳入 document 對象
            }

            document.save(outputPath);
            System.out.println("? 壓縮完成!");
        } catch (IOException e) {
            System.err.println("錯誤信息: " + e.getMessage());
        }
    }

    // ================= 內容流壓縮 =================
    private static void compressContent(PDPage page) {
        page.getCOSObject().setItem(COSName.FILTER, COSName.FLATE_DECODE);
        page.getCOSObject().setInt(COSName.BITS_PER_COMPONENT, 8);
    }

    // ================= 圖片壓縮模塊 =================
    private static void compressImages(PDDocument document, PDPage page) throws IOException {
        PDResources resources = page.getResources();
        if (resources == null) return;

        for (COSName name : resources.getXObjectNames()) {
            if (resources.isImageXObject(name)) {
                PDImageXObject image = (PDImageXObject) resources.getXObject(name);

                // 僅處理大尺寸圖片
                if (image.getWidth() * image.getHeight() > 1_000_000) {
                    // ? 正確方式:使用傳入的 document 參數(shù)
                    PDImageXObject compressedImg = JPEGFactory.createFromImage(
                            document,
                            image.getImage(),
                            0.1f
                    );
                    resources.put(name, compressedImg);
                }
            }
        }
    }
}

到此這篇關于Java使用Spire.PDF實現(xiàn)高效壓縮PDF文件的文章就介紹到這了,更多相關Java壓縮PDF內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JDK自帶監(jiān)控工具jstat、jmap、jstack的使用指南(附命令示例)

    JDK自帶監(jiān)控工具jstat、jmap、jstack的使用指南(附命令示例)

    jstat是JDK中提供的一個命令行工具,主要用來打印JVM?性能數(shù)據(jù)相關的統(tǒng)計數(shù)據(jù),這篇文章主要介紹了JDK自帶監(jiān)控工具jstat、jmap、jstack的使用指南,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-01-01
  • java 字符串截取的實例詳解

    java 字符串截取的實例詳解

    這篇文章主要介紹了java 字符串截取的實例詳解的相關資料,這里提供了實例代碼幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • SpringBoot中構建生產級日志系統(tǒng)的優(yōu)雅指南

    SpringBoot中構建生產級日志系統(tǒng)的優(yōu)雅指南

    本文介紹了構建生產級日志系統(tǒng)的必要性及詳細步驟,包括需求描述,日志工具類封裝等內容,并給出了最佳實踐和檢查清單,希望對大家有所幫助
    2026-04-04
  • springboot?集成activemq項目配置方法

    springboot?集成activemq項目配置方法

    這篇文章主要介紹了springboot?集成activemq項目配置方法,e-car項目配置通過引入activemq依賴,本文結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Java匹配正則表達式匯總

    Java匹配正則表達式匯總

    java匹配字符串表達式在我們數(shù)據(jù)處理方面是及其重要的,現(xiàn)在就把我這幾天數(shù)據(jù)處理比較常用的向大家介紹一下,常規(guī)的一些匹配方式就不介紹了,我們來學習一些特殊的,感興趣的朋友跟隨小編一起看看吧
    2023-03-03
  • springboot swagger不顯示接口的問題及解決

    springboot swagger不顯示接口的問題及解決

    這篇文章主要介紹了springboot swagger不顯示接口的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java HashSet集合存儲遍歷學生對象代碼實例

    Java HashSet集合存儲遍歷學生對象代碼實例

    這篇文章主要介紹了Java HashSet集合存儲遍歷學生對象代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java讀取PDF中的表格的方法示例

    Java讀取PDF中的表格的方法示例

    本文主要介紹了Java讀取PDF中的表格的方法示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Java?jdk升級版本注意事項經驗分享

    Java?jdk升級版本注意事項經驗分享

    這篇文章主要介紹了Java?jdk升級版本注意事項的相關資料,涉及兼容性風險、JVM與GC機制變更、運維與環(huán)境配置風險等多方面內容,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-02-02
  • java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù)

    java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù)

    這篇文章主要為大家詳細介紹了java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03

最新評論

中江县| 木里| 苍南县| 临湘市| 祥云县| 烟台市| 武隆县| 安福县| 屯门区| 博兴县| 平泉县| 米易县| 贞丰县| 海南省| 乌拉特后旗| 山东省| 进贤县| 边坝县| 丰镇市| 广饶县| 西乡县| 荔波县| 同德县| 忻州市| 连州市| 虹口区| 嘉义市| 白山市| 泉州市| 成安县| 商城县| 大连市| 西丰县| 信宜市| 黄龙县| 昌都县| 江油市| 柘城县| 陆河县| 岑巩县| 宁远县|