Java 对 PDF 文件添加水印
在实际开发中,我们可能需要对 PDF 文件添加水印,例如公司标识、版权信息等。本文介绍如何使用 Java 及 iText 库向 PDF 文件添加水印。
1. 引入 iText 依赖
iText 是一个强大的 PDF 处理库,支持创建、修改 PDF 文件。要使用 iText,请在 pom.xml
文件中添加以下 Maven 依赖:
xml
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext7-core</artifactId>
<version>7.1.16</version>
</dependency>
</dependencies>
2. 添加文本水印
以下示例展示了如何向 PDF 每一页添加半透明的文本水印:
java
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import java.io.File;
import java.io.IOException;
public class PdfWatermark {
public static void main(String[] args) throws IOException {
String src = "input.pdf";
String dest = "output.pdf";
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
int numberOfPages = pdfDoc.getNumberOfPages();
for (int i = 1; i <= numberOfPages; i++) {
PdfPage page = pdfDoc.getPage(i);
Rectangle pageSize = page.getPageSize();
PdfCanvas over = new PdfCanvas(page);
Canvas canvas = new Canvas(over, pageSize);
Paragraph watermark = new Paragraph("CONFIDENTIAL")
.setFontSize(50)
.setFontColor(ColorConstants.GRAY)
.setOpacity(0.3f);
canvas.showTextAligned(watermark,
pageSize.getWidth() / 2,
pageSize.getHeight() / 2,
TextAlignment.CENTER,
(float) Math.toRadians(45));
}
pdfDoc.close();
System.out.println("水印添加完成!");
}
}
说明:
- 读取已有 PDF 并创建新的 PDF 文件。
- 遍历所有页面,绘制文本水印。
setOpacity(0.3f)
使水印半透明。showTextAligned
方法可调整水印位置和旋转角度。
3. 添加图片水印
如果需要使用图片作为水印,可以使用 Image
类:
java
import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.*;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Image;
import java.io.IOException;
public class PdfImageWatermark {
public static void main(String[] args) throws IOException {
String src = "input.pdf";
String dest = "output_with_image_watermark.pdf";
String watermarkPath = "watermark.png";
PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
ImageData imageData = ImageDataFactory.create(watermarkPath);
int numberOfPages = pdfDoc.getNumberOfPages();
for (int i = 1; i <= numberOfPages; i++) {
PdfPage page = pdfDoc.getPage(i);
Rectangle pageSize = page.getPageSize();
PdfCanvas over = new PdfCanvas(page);
Canvas canvas = new Canvas(over, pageSize);
Image watermark = new Image(imageData);
watermark.setOpacity(0.3f)
.scaleToFit(pageSize.getWidth() / 2, pageSize.getHeight() / 2)
.setFixedPosition(pageSize.getWidth() / 4, pageSize.getHeight() / 4);
canvas.add(watermark);
}
pdfDoc.close();
System.out.println("图片水印添加完成!");
}
}
说明:
- 读取 PDF 文件和水印图片。
- 使用
setOpacity(0.3f)
让水印透明。 scaleToFit
控制图片大小。setFixedPosition
设置水印位置。
4. 结论
通过 iText,我们可以轻松地为 PDF 添加文本或图片水印。以上代码可根据需求进行调整,如:
- 修改水印字体、颜色、透明度。
- 动态调整水印位置。
- 处理加密 PDF(需要解密后再添加水印)。
希望本教程对你有所帮助!🚀