为 PDF 文档添加水印是保护知识产权、标识文件状态和强化品牌形象的重要措施。Java 开发者可以借助 Spire.PDF for Java 库,实现文本水印(如"机密"标签)与图形 印(含企业标识)的自动化添加,并支持自定义文本样式、透明度、旋转角度等高级特性。
本实践指南将分步演示如何使用 Spire.PDF 在 Java 中实现 PDF 水印功能 。通过学习经实践验证的水印添加技术,您将掌握提升文档安全性与专业呈现效果的有效方法。
用于添加水印的 Java PDF 库
Spire.PDF for Java 是一款多功能类库,可简化 PDF 文档操作(包括水印添加)。其直观的 API 让开发者能用最简代码实现水印功能,同时提供对水印外观和位置的精细化控制。
开始使用前,请下载 Spire.PDF for Java 并将其引用到项目中。对于 Maven 用户,请在 pom.xml 文件中添加如下配置:
<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>11.6.2</version>
</dependency>
</dependencies>
在 Java 中向 PDF 添加水印的步骤
- 使用 PdfDocument 加载 PDF。
- 定义水印(文本与字体样式或图像文件)。
- 设置透明度(例如,0.3为淡,0.7为更强的可见性)。
- 计算位置(例如,居中,自定义位置)。
- 将水印应用于所有页面或特定页面。
- 将修改后的文档保存到新文件。
向 PDF 添加文本水印
文本水印非常适合添加"草稿"、"机密"等标签或版权声明。实现过程包括:使用 PdfDocument 加载PDF文件,定义字体和画刷进行样式设置,然后遍历每个页面,通过自定义的方法 addTextWatermark 应用文本水印。该方法负责管理透明度、定位和按照指定样式绘制文本。
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.Dimension2D;
public class AddTextWatermark {
public static void main(String[] args) {
// 创建 PdfDocument 对象
PdfDocument doc = new PdfDocument();
// 加载 PDF 文档
doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");
// 创建字体和画刷
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", Font.PLAIN, 50), true);
PdfBrush brush = PdfBrushes.getBlue();
// 指定水印文本
String watermarkText = "版权所有,翻版必究";
// 指定透明度级别
float opacity = 0.4f;
// 遍历页面
for (int i = 0; i < doc.getPages().getCount(); i++) {
PdfPageBase page = doc.getPages().get(i);
// 在页面上绘制水印文本
addTextWatermark(page, watermarkText, font, brush, opacity);
}
// 将更改保存到另一个文件
doc.saveToFile("output/Watermark.pdf");
// 释放资源
doc.dispose();
}
// 向给定页面添加文本水印的方法
private static void addTextWatermark(PdfPageBase page, String watermarkText, PdfTrueTypeFont font, PdfBrush brush, float opacity) {
// 设置水印的透明度
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);
}
}
向 PDF 添加图像水印
图像水印(如企业 LOGO)能显著提升文档的专业性。该功能的实现流程为:首先加载PDF文档并指定图像路径和透明度参数,然后遍历每个页面,通过自定义的方法 addImageWatermark 应用图片水印。该方法负责加载图像、计算坐标,并按指定透明度将图像绘制到页面上。
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
public class AddImageWatermark {
public static void main(String[] args) {
// 创建 PdfDocument 对象
PdfDocument doc = new PdfDocument();
// 加载 PDF 文档
doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");
// 指定图像路径
String imagePath = "C:\\Users\\Administrator\\Desktop\\logo.png";
// 指定透明度级别
float opacity = 0.3f;
// 遍历页面
for (int i = 0; i < doc.getPages().getCount(); i++) {
// 在当前页面绘制水印图像
addImageWatermark(doc.getPages().get(i), imagePath, opacity);
}
// 将更改保存到另一个文件
doc.saveToFile("output/Watermark.pdf");
// 释放资源
doc.dispose();
}
// 向给定页面添加图像水印的方法
private static void addImageWatermark(PdfPageBase page, String imagePath, float opacity) {
// 加载图像
PdfImage image = PdfImage.fromFile(imagePath);
// 获取图像的宽度和高度
double imageWidth = (double)image.getWidth();
double imageHeight = (double)image.getHeight();
// 获取页面的宽度和高度
double pageWidth = page.getActualSize().getWidth();
double pageHeight = page.getActualSize().getHeight();
// 计算水印在页面上的居中位置
double x = (pageWidth - imageWidth) / 2;
double y = (pageHeight - imageHeight) / 2;
// 设置水印的透明度
page.getCanvas().setTransparency(opacity);
// 在计算的位置绘制图像
page.getCanvas().drawImage(image, x, y);
}
}
常见问题解答
Q1. 可以旋转水印文本吗?
您可以通过调用 page.getCanvas().rotateTransform(angle) 方法在绘制文本前旋转画布坐标系。请注意:
- 旋转后坐标系会发生改变,原计算的中心点坐标 (x, y) 将不再准确
- 需要重新计算文本位置坐标以确保水印显示在合适的位置
Q2. 如何调整水印的位置?
您可以修改 addTextWatermark 和 addImageWatermark 方法中的 x 和 y 坐标来更改水印位置。
Q3. 可以在同一PDF中添加多个水印吗?
可以,通过使用不同参数多次调用 drawString() 或 drawImage() 。或者,您可以借 PdfTilingBrush 来实现平铺的水印效果,参考文章:Java 添加平铺水印到 PDF
Q4. 可以使用透明PNG作为水印吗?
可以,Spire.PDF保留PNG图像的透明度。
Q5. 如何仅在特定页面上应用水印?
修改循环以针对特定页面,例如,if (i == 0) 仅在第一页应用水印。
结论
总结而言,使用 Java 为 PDF 文档添加水印只需选择合适的工具和技术即可轻松实现。通过 Spire.PDF for Java 库,开发者能够无缝集成动态文本水印(如版权声明)或高分辨率图像 Logo,同时保持文件的最佳性能表现。
本指南提供了从环境配置到最终实现的完整步骤,确保您能有效保护文档安全。无论是个人使用还是专业需求,添加水印都是一项关键技能,能为您的作品增添专业性和完整性。
申请临时License
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期30天的临时许可证。