详解如何通过Java实现压缩PDF文档(亲测)

167 篇文章 6 订阅

PDF文档是我们日常办公中使用最频繁的文档格式。但因为大多数PDF文档都包含很多页面图像或大量图片,这就导致PDF文档过大,处理起来较为麻烦。本文将介绍如何通过Java应用程序压缩PDF文档,需要的可以了解一下

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>
        <name>e-iceblue</name>
        <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 文件。

完整代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

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 文件。

完整代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/269935.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用iText库来操作PDF文件。下面分别介绍如何设置PDF文档的编码格式和背景色。 1. 设置PDF文档编码格式 在iText中,可以通过设置字体来指定PDF文档的编码格式。具体步骤如下: 1)创建一个PdfWriter对象。 ``` PdfWriter writer = new PdfWriter("output.pdf"); ``` 2)通过PdfWriter对象创建一个PdfDocument对象。 ``` PdfDocument pdfDoc = new PdfDocument(writer); ``` 3)创建一个字体对象,并指定编码格式。 ``` PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", false); ``` 其中,“STSong-Light”是字体名称,“UniGB-UCS2-H”是编码格式,false表示不需要嵌入字体。 4)创建一个段落对象,并设置字体。 ``` Paragraph para = new Paragraph("你好,世界!", font); ``` 5)将段落对象添加到文档中。 ``` pdfDoc.add(para); ``` 完整代码如下: ``` PdfWriter writer = new PdfWriter("output.pdf"); PdfDocument pdfDoc = new PdfDocument(writer); PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", false); Paragraph para = new Paragraph("你好,世界!", font); pdfDoc.add(para); pdfDoc.close(); ``` 2. 设置PDF文档背景色 在iText中,可以通过设置页面属性来指定PDF文档的背景色。具体步骤如下: 1)创建一个PdfWriter对象。 ``` PdfWriter writer = new PdfWriter("output.pdf"); ``` 2)通过PdfWriter对象创建一个PdfDocument对象。 ``` PdfDocument pdfDoc = new PdfDocument(writer); ``` 3)创建一个页面对象,并设置背景色。 ``` PdfPage page = pdfDoc.addNewPage(); page.setBackgroundColor(new DeviceRgb(255, 255, 0)); ``` 其中,DeviceRgb是iText库提供的一个表示RGB颜色的类,可以通过传入红、绿、蓝三个参数来创建。 4)创建一个段落对象,并将其添加到页面中。 ``` Paragraph para = new Paragraph("你好,世界!"); new Canvas(page, pdfDoc, page.getPageSize()) .add(para); ``` 完整代码如下: ``` PdfWriter writer = new PdfWriter("output.pdf"); PdfDocument pdfDoc = new PdfDocument(writer); PdfPage page = pdfDoc.addNewPage(); page.setBackgroundColor(new DeviceRgb(255, 255, 0)); Paragraph para = new Paragraph("你好,世界!"); new Canvas(page, pdfDoc, page.getPageSize()) .add(para); pdfDoc.close(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值