
在许多 Java 应用程序中,处理 PDF 文件是一项常见需求——无论是生成发票、修改合同,还是为报告添加批注,都经常需要对 PDF 文档进行操作。虽然 PDF 格式因其稳定性和跨平台特性,成为文档共享的常用格式,但如果没有合适的开发库,直接通过代码编辑 PDF 文件可能会比较复杂。
本教程将介绍如何使用 Spire.PDF for Java(一个功能全面且易于使用的 PDF 开发 API)对 PDF 文件中的内容进行添加、替换、删除和安全保护操作。我们将通过示例详细讲解如何添加页面、文本、图像、表格、注释,如何替换内容、删除元素,以及如何使用水印和密码保护文件。
- 为什么选择 Spire.PDF 在 Java 编辑 PDF 文件
- 配置 Java 开发环境
- 在 Java 中向 PDF 文件添加内容
- 在 Java 中替换 PDF 文件中的内容
- 在 Java 中移除 PDF 文件中的内容
- 在 Java 中保护 PDF 文件
- 结论
- Java 编辑 PDF 常见问题解答
为什么选择 Spire.PDF 在 Java 编辑 PDF 文件
Spire.PDF 提供了一套完整的 PDF 处理功能,非常适合需要在 Java 应用程序中操作 PDF 文件的开发人员。以下是选择 Spire.PDF 的几个主要原因:
- 易于使用:API 直观易懂,只需少量代码即可完成复杂操作。
- 功能丰富:Spire.PDF 支持多种功能,包括文本和图像处理、页面管理以及安全功能。
- 高性能:该库经过性能优化,即使是大型 PDF 文件也能快速处理。
- 无外部依赖:Spire.PDF 是一个独立运行的类库,无需在项目中额外添加其他依赖组件。
借助 Spire.PDF,开发人员可以轻松处理 PDF 文件,而无需深入了解 PDF 格式本身的复杂结构。
配置 Java 开发环境
安装 Spire.PDF for Java
开始使用 Spire.PDF 前,首先需要将其添加到 Java 项目中。您可以从其官方网站下载该库,或通过 Maven 引入:
Maven 用户配置方式:
<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>12.6.4</version>
</dependency>
</dependencies>
手动配置方式:
从官方网站下载 Spire.PDF for Java,并将 JAR 文件添加到项目的 classpath 中。
初始化并加载 PDF 文档
完成类库配置后,就可以开始加载 PDF 文件。操作如下:
PdfDocument doc = new PdfDocument();
doc.loadFromFile("sample.pdf");
此代码创建了一个新的 PdfDocument 对象,并通过指定路径加载 PDF 文件。通过调用 loadFromFile,PDF 文档将被加载到内存中,之后即可进行进一步编辑操作。
在 Java 中向 PDF 文件添加内容
使用 Spire.PDF for Java,可以轻松向现有 PDF 文档中添加各种内容,例如新页面、文本、图片、表格以及批注等。
添加新页面
向现有 PDF 文档添加新页面非常简单。示例代码如下:
// 添加新页面
PdfPageBase new_page = doc.getPages().add(PdfPageSize.A4, new PdfMargins(54));
// 在页面上绘制文本或进行其他操作
new_page.getCanvas().drawString("这是一个新添加的页面。", new PdfTrueTypeFont(new Font("Times New Roman",Font.PLAIN,18)), PdfBrushes.getBlue(), 0, 0);
在上述代码中,我们使用 add 方法创建了一个 A4 大小并带有指定边距的新页面。然后,我们使用指定的字体和颜色在新页面上绘制字符串。drawString 方法将文本放置在页面的左上角,让您能够快速添加内容。
向 PDF 文件添加文本
要将文本插入到现有页面的特定区域,请使用以下代码:
// 获取特定页面
PdfPageBase page = doc.getPages().get(0);
// 定义一个用于放置文本的矩形区域
Rectangle2D.Float rect = new Rectangle2D.Float(54, 300, (float) page.getActualSize().getWidth() - 108, 100);
// 创建画刷和字体
PdfSolidBrush brush = new PdfSolidB
rush(new PdfRGBColor(Color.BLUE));
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Microsoft YaHei", Font.PLAIN,18));
// 在页面的指定区域绘制文本
page.getCanvas().drawString("此行由 Spire.PDF for Java 创建。",font, brush, rect);
该代码获取文档的第一页,并定义了一个用于放置文本的矩形。Rectangle2D.Float 类允许您指定文本定位的精确尺寸。然后,我们使用 drawString 方法,用蓝色画刷和自定义字体绘制指定文本,确保文本在定义区域内渲染。

向 PDF 文件添加图像
插入图像到 PDF 也同样简单:
// 获取特定页面
PdfPageBase page = doc.getPages().get(0);
// 加载图像
PdfImage image = PdfImage.fromFile("logo.png");
// 指定添加图像的坐标
float x = 54;
float y = 300;
// 在页面的指定坐标处绘制图像
page.getCanvas().drawImage(image, x, y);
这里,我们从指定文件路径加载图像,并在第一页的定义坐标 (x, y) 处绘制它。drawImage 方法允许您精确地定位图像,方便将视觉元素融入文档中。

向 PDF 文件添加表格
Spire.PDF 也支持向 PDF 文档中插入表格:
// 获取特定页面
PdfPageBase page = doc.getPages().get(0);
// 创建表格
PdfTable table = new PdfTable();
// 定义表格数据
String[][] data = {
new String[]{"姓名", "年龄", "国家"},
new String[]{"Alice", "25", "美国"},
new String[]{"Bob", "30", "英国"},
new String[]{"Charlie", "28", "加拿大"}
};
// 将数据分配给表格
table.setDataSource(data);
// 设置表格样式
PdfTableStyle style = new PdfTableStyle();
style.getDefaultStyle().setFont(new PdfTrueTypeFont(new Font("Arial", Font.PLAIN, 12)));
table.setStyle(style);
// 在页面上绘制表格
table.draw(page, new Point2D.Float(50, 80));
在此示例中,我们创建了一个表格,并使用二维数组定义其数据源。分配数据后,我们使用 PdfTableStyle 为表格设置样式,这允许您自定义字体和表格外观。最后,我们使用 draw 方法在指定坐标处渲染第一页的表格。
添加注释或批注
PDF 批注可以增强文档的交互性,例如添加备注、评论或提示信息。实例代码如下:
// 获取特定页面
PdfPageBase page = doc.getPages().get(0);
// 创建自由文本注释
PdfPopupAnnotation popupAnnotation = new PdfPopupAnnotation();
popupAnnotation.setLocation(new Point2D.Double(90, 260));
// 设置注释的内容
popupAnnotation.setText("这是一个由 Spire.PDF for Java 添加的弹出式注释。");
// 设置注释的图标和颜色
popupAnnotation.setIcon(PdfPopupIcon.Comment);
popupAnnotation.setColor(new PdfRGBColor(Color.RED));
// 将注释添加到注释集合中
page.getAnnotations().add(popupAnnotation);
此代码段在页面上的指定位置创建一个弹出式注释。通过调用 setLocation,定义注释出现的位置。setText 方法允许您指定注释中显示的内容,同时您可以自定义批注的图标和颜色。最后,该注释被添加到页面的注释集合中。

您可能还喜欢:在 Java 中向 PDF 文档添加页码
在 Java 中替换 PDF 文件中的内容
除了向 PDF 文件添加内容之外,开发人员还经常需要修改已有内容,例如替换文本或更新图片。
使用 Spire.PDF for Java,可以方便地对 PDF 文档中的文本和图片进行替换操作。
替换 PDF 文件中的文本
要替换 PDF 中的现有文本,可以使用以下代码:
// 创建 PdfTextReplaceOptions 对象
PdfTextReplaceOptions textReplaceOptions = new PdfTextReplaceOptions();
// 指定文本替换选项
textReplaceOptions.setReplaceType(EnumSet.of(ReplaceActionType.IgnoreCase));
// 遍历页面
for (int i = 0; i < doc.getPages().getCount(); i++) {
// 获取特定页面
PdfPageBase page = doc.getPages().get(i);
// 基于页面创建 PdfTextReplacer 对象
PdfTextReplacer textReplacer = new PdfTextReplacer(page);
// 设置替换选项
textReplacer.setOptions(textReplaceOptions);
// 将所有匹配的目标文本替换为新文本
textReplacer.replaceAllText("PDF", "OFD");
}
在此示例中,我们创建了一个 PdfTextReplaceOptions 对象用于设置文本替换规则,例如忽略大小写。然后,通过循环遍历 PDF 文档中的所有页面,并为每一页创建一个 PdfTextReplacer 对象。最后,调用 replaceAllText 方法,以将所有出现的 "PDF" 替换为 "OFD"。

替换 PDF 文件中的图像
替换图像遵循类似的模式:
// 获取特定页面
PdfPageBase page = doc.getPages().get(0);
// 加载图像
PdfImage image = PdfImage.fromFile("logo.png");
// 从页面获取图像信息
PdfImageHelper imageHelper = new PdfImageHelper();
PdfImageInfo[] imageInfo = imageHelper.getImagesInfo(page);
// 替换图像
imageHelper.replaceImage(imageInfo[0], image);
此代码使用 PdfImageHelper 类从指定页面检索图像信息。从文件加载新图像后,调用 replaceImage 将页面上第一个图像替换为新图像。

您可能还喜欢:Java 在 PDF 中应用不同的字体
在 Java 中移除 PDF 文件中的内容
除了添加和替换内容之外,删除 PDF 中不需要的元素也是常见需求。
从 PDF 文件中移除页面
要从 PDF 中移除整个页面,请使用以下代码:
// 移除特定页面
doc.getPages().removeAt(0);
这个简单的命令移除了文档的第一页。通过调用 removeAt,可以指定要移除页面的索引,从而简化 PDF 中的页面管理。
从 PDF 文件中删除图像
要从页面中移除图像:
// 获取特定页面
PdfPageBase page = pdf.getPages().get(0);
// 从页面获取图像信息
PdfImageHelper imageHelper = new PdfImageHelper();
PdfImageInfo[] imageInfos = imageHelper.getImagesInfo(page);
// 删除页面上指定的图像
imageHelper.deleteImage(imageInfos[0]);
此代码检索首页的所有图像,并使用 PdfImageHelper 的 deleteImage 方法删除第一个图像。
删除注释
移除注释也同样简单:
// 获取特定页面
PdfPageBase page = pdf.getPages().get(0);
// 移除指定的注释
page.getAnnotationsWidget().removeAt(0);
此代码段会删除指定页面中的第一个注释。removeAt 方法用于指定需要删除的批注索引,可以帮助开发人员快速清理 PDF 中不需要的评论或标记。
删除附件
如果 PDF 文件中包含附件,也可以通过以下方式删除:
// 获取附件集合
PdfAttachmentCollection attachments = doc.getAttachments();
// 移除特定附件
attachments.removeAt(0);
此代码检索文档的附件集合并使用 removeAt 方法移除第一个附件。
在 Java 中保护 PDF 文件
Spire.PDF for Java 提供了完善的安全功能,可以帮助开发人员轻松实现 PDF 文件保护。
在 PDF 文件上应用水印
水印常用于品牌展示、版权保护或防止文档被未经授权复制。以下代码展示了如何为 PDF 文件添加文本水印:
// 创建字体和画刷
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Black", Font.PLAIN, 50), true);
PdfBrush brush = PdfBrushes.getBlue();
// 指定水印文本
String watermarkText = "严禁复制";
// 指定不透明度级别
float opacity = 0.6f;
// 遍历页面
for (int i = 0; i < doc.getPages().getCount(); i++) {
PdfPageBase page = doc.getPages().get(i);
// 设置水印的透明度级别
page.getCanvas().setTransparency(opacity);
// 测量水印文本的尺寸
Dimension2D textSize = font.measureString(watermarkText);
// 获取页面的宽度和高度
double pageWidth = page.getActualSize().getWidth();
double pageHeight = page.getActualSize().getHeight();
// 计算将水印置于页面中心的位置
double x = (pageWidth - textSize.getWidth()) / 2;
double y = (pageHeight - textSize.getHeight()) / 2;
// 在页面上计算出的位置绘制水印文本
page.getCanvas().drawString(watermarkText, font, brush, x, y);
}
此代码配置文本水印的外观,并使用 drawString 方法将其放置在 PDF 文件每一页的中心,有效地阻止未经授权的复制。
用密码保护 PDF 文件
如果需要限制用户访问 PDF 文件,可以为文档设置密码保护。
// 指定用户密码和所有者密码
String userPassword = "open_psd";
String ownerPassword = "permission_psd";
// 使用两个密码创建 PdfSecurityPolicy 对象
PdfSecurityPolicy securityPolicy = new PdfPasswordSecurityPolicy(userPassword, ownerPassword);
// 设置加密算法
securityPolicy.setEncryptionAlgorithm(PdfEncryptionAlgorithm.AES_256);
// 设置文档权限(如果不设置,则默认为全部禁止)
securityPolicy.setDocumentPrivilege(PdfDocumentPrivilege.getAllowAll());
// 限制编辑
securityPolicy.getDocumentPrivilege().setAllowModifyContents(false);
securityPolicy.getDocumentPrivilege().setAllowCopyContentAccessibility(false);
securityPolicy.getDocumentPrivilege().setAllowContentCopying(false);
// 加密 PDF 文件
doc.encrypt(securityPolicy);
该代码通过定义用户密码(用于打开)和所有者密码(用于编辑、打印等权限),为 PDF 文档添加密码保护和加密功能。PdfSecurityPolicy 对象管理安全设置,包括 AES-256 加密算法和权限级别。最后,doc.encrypt(securityPolicy) 加密文档,确保只有授权用户才能访问或修改它。

您可能还喜欢:如何在 Java 中为 PDF 添加数字签名
结论
在 Java 中编辑 PDF 文件常被视为一项复杂的任务,但借助 Spire.PDF for Java,这一过程可以变得简单、高效。该库为开发者提供了灵活的 PDF 操作能力,可以通过清晰易懂的 API 来创建、修改、替换和保护 PDF 内容。从添加页面和图像到加密敏感文档,Spire.PDF 简化了工作流程中的每一步,同时保持专业的输出质量。
除了基础的 PDF 编辑功能之外,Spire.PDF 还支持自动化处理和企业级应用场景。无论您是将 PDF 处理集成到文档管理系统中,还是生成定制化报告,该库都能为长期项目提供稳定、可扩展的技术基础。凭借其全面的功能集和强大的性能,Spire.PDF for Java 是寻求对 PDF 文档进行精确、高效和可控操作的开发者的可靠选择。
Java 编辑 PDF 常见问题解答
问题1:在 Java 中编辑 PDF 的最佳库是什么?
答:Spire.PDF for Java 是全球开发者中的热门选择,它为有效的 PDF 处理提供了全面的功能。
问题2:可以使用 Java 编辑 PDF 中的现有文本吗?
答:可以。通过 Spire.PDF for Java,您可以使用 PdfTextReplacer 等类来替换或修改现有文本,并可自定义大小写敏感度和匹配行为选项。
问题3:如何在 Java 中插入或替换 PDF 中的图像?
答:在 Spire.PDF for Java 中,可以使用 drawImage() 插入图像,并使用 PdfImageHelper.replaceImage() 替换特定页面上的现有图像。
问题4:可以在 Java 中为 PDF 文件添加注释吗?
答:可以。使用 Spire.PDF for Java 提供的相应注释类,可以添加诸如高亮、评论和图章等注释。
问题5:可以从现有 PDF 文件中提取文本和图像吗?
答:可以。Spire.PDF for Java 提供了轻松提取 PDF 中文本、图像和其他元素的方法。有关详细说明和代码示例,请参阅:如何在 Java 中读取 PDF:提取文本、图像及更多内容
获取免费许可证
要充分体验 Spire.PDF for Java 的功能而不受任何评估限制,您可以申请 30 天免费试用许可证。







