首页 > 编程语言 >Java: 压缩PDF文档

Java: 压缩PDF文档

时间:2022-09-30 17:01:09浏览次数:75  
标签:Java doc PdfDocument 文档 pdf PDF 压缩

PDF文档在日常工作中应用广泛,经常用于保存公司文件,电子图书或网络资料等大篇幅内容。然而,内容过多往往也会导致PDF文件过大,不便于其保存和发送。在这种情况下,我们可以选择使用Free Spire.PDF for Java压缩PDF文件。这一方法主要通过压缩文件内的图片、不需要的注释行和空格等来压缩文件大小,以此节约储存空间,减少文件传送时间。以下是具体的操作步骤。

安装Spire.PDF.Jar

方法一:

如果您使用的是 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>

 

 

方法二:

如果您没有使用 maven,则可以从此链接下载Free Spire.PDF for Java,找到lib文件夹下的Spire.PDF.jar并进行解压;然后在IDEA中创建一个新项目,依次点击“文件”(File),“项目结构”(Project Structure),“组件”(Modules),“依赖项”(Dependencies),再点击右方绿色“+”下的第一个选项“JAR文件或路径”(JARs or Directories),找到解压后的Spire.PDF.jar 文件,点击确认,将其导入到项目中。

 

注意:Free Spire.PDF for Java支持10页内的PDF文档,如果PDF页数过多,可以选择使用Spire.PDF for Java

压缩PDF文档

下面是详细操作步骤和相关代码:

  • 创建PdfDocument类的对象。
  • 使用PdfDocument.loadFromFile()方法加载PDF文档。
  • 使用PdfDocument.getFileInfo().setIncrementalUpdate() 方法禁用增量更新。
  • 使用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 CompressPdfDocument {

    public static void main(String[] args) {

        //创建PdfDocument类的对象
        PdfDocument doc = new PdfDocument();

        //加载PDF文档
        doc.loadFromFile("sample.pdf");

        //禁用增量更新
        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);
                }

            //将结果文档保存至另一个PDF文档中
            doc.saveToFile("Compressed.pdf");
            doc.close();
        }
    }
}

标签:Java,doc,PdfDocument,文档,pdf,PDF,压缩
From: https://www.cnblogs.com/Gia-/p/16745462.html

相关文章

  • Java Hutool 包工具类推荐 ExcelUtil
    JavaHutool包工具类推荐ExcelUtil包引入hutool包版本号可根据实际情况更换 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifa......
  • Java HttpUtil 工具类 (使用 Apache HttpClient 包)
    JavaHttpUtil工具类(使用ApacheHttpClient包)第一步引入包 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</a......
  • Java集合框架之List
    1.List集合概要2.Iterable接口1.概要2.重要方法forEach方法:对Collection集合中的每个对象进行消费List<Student>list=Stream.generate(()->newStudent("张......
  • Java线程池
    Java线程池线程池的执行过程当向线程池提交一个新的任务,线程池首先判断核心线程池的线程是否都在执行任务。如果不是,创建一个新的工作线程来执行任务。如果核心线程的......
  • 力扣500(java&python)-键盘行(简单)
    题目:给你一个字符串数组words,只返回可以使用在美式键盘同一行的字母打印出来的单词。键盘如下图所示。美式键盘中:第一行由字符"qwertyuiop"组成。第二行由字符"......
  • JAVA关键字修饰
    Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。default (即默认,什么也不写):在同一包内可见,不使用任何修饰符。使......
  • java 遍历目录 删除目录 判断是否为目录
    删除目录privatestaticbooleandeleteDir(Filefile){if(file==null||!file.exists()){System.out.println("deletefilesfail,fi......
  • Java GUI编程(二)Swing
    一,窗口 二,弹窗publicclassDialogDemoextendsJFrame{publicDialogDemo(){this.setVisible(true);this.setSize(700,500);thi......
  • java mail实现POP3协议收件的Oauth认证
    1.背景   有team使用了office365的国际版邮箱进行收发邮件,但是微软会在十月一后关闭基本身份认证,选择使用OAuth身份验证连接IMAP、POP或SMTP协议,微软给出了相......
  • Java:通过标记直接跳出嵌套的循环结构
    这是我在刷面试题的时候遇到的一个使用方法,之前甚至对这种方法闻所未闻,不禁感慨自己的才疏学浅。闲话少说,直接进入正题。具体的使用就是在需要跳出的循环结构前面加一个......