在文章 Java 在 PDF 中插入、替换或删除图像中我们了解了怎样在 PDF 中插入,替换和删除图像。如果你想在其他地方使用 PDF 文档中包含的图片,可以将 PDF 中的图片提取出来;如果 PDF 文档中含有高质量图片,导致 PDF 很大,也可能需要压缩高质量图片的功能。在本文中,你将学习如何使用 Spire.PDF for Java 提取,压缩 PDF 文档中的图片。
安装 Spire.PDF for Java
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。 如果您使用 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</artifactId>
<version>10.12.10</version>
</dependency>
</dependencies>
提取 PDF 文档中的图片
Spire.PDF for Java 提供了 PdfImageHelper 类来操作处理图片,以下是提取 PDF 文档图片的详细操作步骤:
- 创建 PdfDocument 对象。
- 使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
- 循环遍历文档所有页面,并使用 PdfImageHelper.getImagesInfo() 方法获取当前页面的所有图像信息。
- 遍历获取的图像信息,使用 PdfImageInfo.getImage() 获取当前图像,并指定 PNG 图片格式进行保存。
- Java
import com.spire.pdf.*;
import com.spire.pdf.utilities.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class extractImage
{
public static void main(String[] args) throws IOException
{
// 创建一个PdfDocument对象
PdfDocument doc = new PdfDocument();
// 从指定路径加载PDF文档
doc.loadFromFile("C:\\示例.pdf");
// 声明一个int变量
int index = 0;
// 创建PdfImageHelper对象
PdfImageHelper imageHelper = new PdfImageHelper();
// 遍历PDF文档中的每一页
for (Object obj : (Iterable) doc.getPages())
{
PdfPageBase page =(PdfPageBase) obj;
// 获取当前页面的所有图像信息
PdfImageInfo[] imageInfos = imageHelper.getImagesInfo(page);
// 遍历当前页面的所有图像信息
for (PdfImageInfo info : imageInfos)
{
// 获取当前图像
BufferedImage image = info.getImage();
// 指定文件路径和文件名
File output = new File("C:\\提取的图片\\" + String.format("图片-%d.png", index++));
//将图片保存为PNG文件
ImageIO.write(image, "PNG", output);
}
}
// 释放PdfDocument对象
doc.dispose();
}
}
压缩 PDF 文档中的高质量图片
使用 PdfImageHelper 类还可以针对 PDF 文档中的高质量图片进行压缩,具体步骤如下:
- 创建 PdfDocument 对象。
- 使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
- 使用 PdfDocument.getFileInfo() 获取文档信息,并设置 setIncrementalUpdate() 参数为 false。
- 创建 PdfImageHelper 对象。
- 循环遍历文档所有页面,并使用 PdfImageHelper.getImagesInfo() 方法获取当前页面的所有图像信息。
- 遍历获取的图像信息,使用 PdfImageInfo.tryCompressImage() 压缩高质量图片。
- 使用 PdfDocument.saveToFile() 保存结果文档。
- Java
import com.spire.pdf.*;
import com.spire.pdf.utilities.*;
public class compressImage
{
public static void main(String[] args)
{
// 创建一个PdfDocument对象
PdfDocument doc = new PdfDocument();
// 从指定路径加载PDF文档
doc.loadFromFile("Images.pdf");
//设置IncrementalUpdate为false
doc.getFileInfo().setIncrementalUpdate(false);
// 创建PdfImageHelper对象
PdfImageHelper imageHelper = new PdfImageHelper();
// 遍历PDF文档中的每一页
for (Object obj : (Iterable) doc.getPages())
{
PdfPageBase page =(PdfPageBase) obj;
// 获取当前页面的所有图像信息
for (PdfImageInfo info : imageHelper.getImagesInfo(page))
{
//使用tryCompressImage方法压缩高质量图片
info.tryCompressImage();
}
}
//保存结果文档
String result = "CompressImages_out.pdf";
doc.saveToFile(result, FileFormat.PDF);
// 释放PdfDocument对象
doc.dispose();
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。