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>11.1.2</version>
</dependency>
</dependencies>
在 PDF 文档中插入单一图片水印
插入单一图片水印时,通常将其放在 PDF 页面中央。以下是插入单一图片水印到 PDF 文档的详细操作步骤:
- 创建一个 PdfDocument 类的对象。
- 使用 PdfDocument.loadFromFile() 方法载入 PDF 文档。
- 使用 PdfImage.fromFile() 方法载入图片。
- 使用 PdfImage.getWidth() 和 PdfImage.getHeight() 方法获取图片的宽度和高度,用于计算插入水印的初始坐标。
- 循环遍历 PDF 文档中的各页以插入水印.
- 使用 PdfDocument.getPages().get() 方法获取一个页面。
- 使用 PdfPageBase.getActualSize().getWidth() 和 PdfPageBase.getActualSize().getHeight() 方法获取该页的宽度和高度,用于计算插入水印的初始坐标。
- 使用 PdfPageBase.getCanvas().setTransparency() 方法设置水印图片的透明度。
- 使用 PdfPageBase.getCanvas().drawImage() 方法在页面的中心位置绘制水印图片。
- 使用 PdfDocument.saveToFile() 方法保存文档。
- Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
public class insertSingleImageWatermark {
public static void main(String[] args) {
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//载入PDF文档
pdf.loadFromFile("人的注意力很容易分散.pdf");
//载入图片
PdfImage image = PdfImage.fromFile("图标.png");
//获取图片的宽度和高度用于计算插入水印的初始坐标
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
//循环遍历所有页面以插入水印
for (int i = 0; i < pdf.getPages().getCount(); i++) {
//获取一个页面
PdfPageBase page = pdf.getPages().get(i);
//获取该页面的宽度和高度,用于计算插入水印的初始坐标
float pageWidth = (float) (page.getActualSize().getWidth());
float pageHeight = (float) (page.getActualSize().getHeight());
//设置水印图片的透明度
page.getCanvas().setTransparency(0.3f);
//在页面的中间位置绘制水印图片
page.getCanvas().drawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight);
}
//保存文档
pdf.saveToFile("单一图片水印.pdf");
}
}
在 PDF 文档中插入平铺图片水印
平铺图片水印是指在同一 PDF 页面上重复显示同一水印图片多次的水印。在插入平铺图片水印时,我们可以自定义水印图片重复的次数。插入平铺图片水印到 PDF 文档的详细操作步骤如下:
- 创建一个 PdfDocument 类的对象。
- 使用 PdfDocument.loadFromFile() 方法载入 PDF 文档。
- 使用 PdfImage.fromFile() 方法载入图片。
- 循环遍历各页以插入水印。
- 使用 PdfDocument.getPages().get() 方法获取指定页面。
- 使用自定义方法 insertImageWatermark() 来插入一个平铺图像水印。
- 使用 PdfDocument.saveToFile() 方法保存文档。
- Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTilingBrush;
import java.awt.*;
public class insertTiledImageWatermark {
public static void main(String[] args) {
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//载入PDF文档
pdf.loadFromFile("人的注意力很容易分散.pdf");
//载入图片
PdfImage image = PdfImage.fromFile("图标.png");
//循环遍历文档页面以插入水印
for (int i = 0; i < pdf.getPages().getCount(); i++ ) {
//获取一个页面
PdfPageBase page = pdf.getPages().get(i);
//使用自定义方法插入平铺图片水印
insertImageWatermark(page, image, 3, 3);
}
//保存文档
pdf.saveToFile("平铺图片水印.pdf");
}
static void insertImageWatermark(PdfPageBase page, PdfImage image, int row, int column) {
//创建一个平铺笔刷
PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int) (page.getActualSize().getWidth()/column), (int) (page.getActualSize().getHeight()/row)));
brush.getGraphics().setTransparency(0.3f);
brush.getGraphics().save();
brush.getGraphics().translateTransform(brush.getSize().getWidth()/2 - image.getWidth()/2, brush.getSize().getHeight()/2 - image.getHeight()/2);
//将图片绘制于笔刷
brush.getGraphics().drawImage(image, 0, 0);
brush.getGraphics().restore();
//使用该平铺笔刷绘制水印图片
page.getCanvas().drawRectangle(brush, new Rectangle(new Point(0, 0), new Dimension((int) (page.getActualSize().getWidth()), (int) (page.getActualSize().getHeight()))));
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。