如何通过Java应用程序压缩PDF文档
PDF文档是我们日常办公中使用最频繁的文档格式。但因为大多数PDF文档都包含很多页面图像或大量图片,这就导致PDF文档过大,处理起来较为麻烦。PDF文件过大,就会导致传输或者下载的速度变慢,也会增加传输失败的风险,影响办公效率。因此我们需要对PDF文档进行压缩。本文将从以下两方面介绍如何通过Java应用程序压缩PDF文档。
在使用PDF文件过程中,经常会出现由于体积过大导致文件传输失败的情况。遇到这种情况,我们可以先将PDF文件压缩一下再进行传输。而除了压缩文档内容以外,压缩图片是缩小PDF文档的主要方法之一。本文将分为2部分分别介绍如何通过Java代码压缩PDF文档。希望这篇文章能对大家有所帮助。
- 压缩PDF文档中的内容及图片
压缩PDF文档中的高分辨率图片
1.引入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 文件。
完整代码
Java
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 文件。
完整代码
Java
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文档
本篇文章将介绍通过Java编程来设置PDF文档保护的方法.我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑:也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为 ...
- Java 合并、拆分PDF文档
处理PDF文档时,我们可以通过合并的方式,来任意组几个不同的PDF文件或者通过拆分将一个文件分解成多个子文件,这样的好处是对文档的存储.管理很方便.下面将通过Java程序代码介绍具体的PDF合并.拆分 ...
- Java 插入附件到PDF文档
在文档中插入附件,可以起到与源文档配套使用的目的,以一种更简便的方式对文档起到补充说明的作用.下面将介绍通过Java编程插入附件到PDF文档中的方法.这里插入的文档可以是常见的文档类型,如Word.E ...
- 【PDF】java使用Itext生成pdf文档--详解
[API接口] 一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...
- Java实现HTML代码生成PDF文档
1.IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源. 2.Flying Sauser实现html2pdf,纠错能力差,支 ...
- java实现在线浏览PDF文档功能
实现在线浏览pdf文档功能(本代码适用于项目服务中固定的并且少量的pdf浏览,比如注册时的注册条款在线浏览等): //设置响应内容类型为PDF类型 response.setContentType(&q ...
- 将积累多年的java学习资料,pdf文档给大家分享一下,比如《大话设计模式》《算法》《Linux私房菜》等等
话不多说,资料目录如下,需要的拿走,下载的同时别忘了点下推荐. 需要的点下面链接,到小编网盘进行下载: 2-大话设计模式.pdf 链接:https://pan.baidu.com/s/1b05puNO ...
- Java 打印PDF文档的3种情况
以下内容归纳了通过Java程序打印PDF文档时的3种情形.即: 静默打印 显示打印对话框打印 打印PDF时自定义纸张大小 使用工具:Spire.PDF for Java Jar导入: 方法1:通过官网 ...
- Java 添加条码、二维码到PDF文档
本文介绍如何通过Java程序在PDF文档中添加条码和二维码.创建条码时,可创建多种不同类型的条码,包括Codebar.Code11.Code128A.Code128B.Code32.Code39.Co ...
- 程序生成word与PDF文档的方法(python)
程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用free ...
随机推荐
- k8s使用心得
查看当前所有namespaces [root@master ~]# kubectl get namespaces -A NAME STATUS AGE default Active 63d hkd A ...
- 关于使用git传输文件到GitHub
git status(查看本地git仓库情况) git add "文件名(精确到文件拓展名)" git commit -m "说明"(提交到上传缓存区域) gi ...
- SpringBoot 2.5.5整合轻量级的分布式日志标记追踪神器TLog
TLog能解决什么痛点 随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候.因为业务链路贯穿着很多微服务节点,导致定位某个请求的日志以及上下游业务的日志会变得有些困难. ...
- 深入浅出TCP与IP协议笔记
TCP/IP 4层结构:应用层 传输层 网络层 链路层 探索过程问题:一个主机的数据要经过哪些过程才到达对方的主机上 一组电信号就是一个数据包,一个数据包称为一帧,制定这个规则的就是以太网协议 ...
- 用昇腾AI护航“井下安全”
摘要:基于CANN(异构计算架构)打造的"智能矿山安全生产管理平台",能够更便捷和更高效地服务于更多矿山安全生产建设. 本文分享自华为云社区<华为携手云话科技助力矿山智能化, ...
- Trino Worker 规避 OOM 思路
背景 Trino 集群如果不做任何配置优化,按照默认配置上线,Master 和 Worker 节点都很容易发生 OOM.本文从 Trino 内存设计出发, 分析 Trino 内存管理机制,到限制与优化 ...
- Django系列---开发二
django.contrib.auth Django的用户验证框架,可以快速实现用户信息验证.登录.登出等用户操作 from django.contrib.auth import authentica ...
- 通过Jenkins,执行远程服务器的自动化脚本
通过Jenkins,可自动执行写好的应用部署.自动化测试等的脚本工具,实现测试环境的应用自动定时更新.自动执行测试等. 1. 安装SSH插件 进入[系统管理]-[插件管理]-[可用插件],搜索Publ ...
- SQL Server 读写分离配置的一些问题
1,新建发布服务器遇到此服务器上未安装复制组件 先执行以下sql use mastergoselect @@servername;select serverproperty('servername') ...
- <四>构造函数初始化列表
示例代码1 点击查看代码 class CDate{ public: CDate(int _year,int _month, int _day){ this->year=_year; this-& ...