水印个别用于标注文档的版权信息、作者、所属机构或者文档属性等。不同于文本批注等,文字水印是绘制到页面中的元素,所以不会被轻易删除。因而,水印也是一种很好的防伪伎俩。水印又分为文本水印和图片水印两种。之前曾经介绍过向 PDF 中增加文本水印的办法。这次,我将分享通过 Java 代码给 PDF 文档增加图像水印的具体方法和示例代码。应用到的工具是 Free Spire.PDF for Java(免费版)。
程序环境
IntelliJ IDEA 2018 (jdk 1.8.0)
在进行操作之前先导入 JAR 包,请参考以下两种导入形式:
办法一 :如果您应用的是 maven,先创立 maven 我的项目。而后通过增加以下代码来配置 pom.xml 文件,再点击 Import Changes 将 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.free</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
办法二 :如果您没有应用 maven,则能够从此链接下载 Free Spire.PDF for Java,找到 lib 文件夹下的 Spire.Pdf.jar 并进行解压;而后在 IDEA 中创立一个新我的项目,顺次点击“文件”(File),“我的项目构造”(Project Structure),“组件”(Modules),“依赖项”(Dependencies),再点击右方绿色“+”下的第一个选项“JAR 文件或门路”(JARs or Directories),找到解压后的 Spire.Pdf.jar 文件,点击确认,将其导入到我的项目中。
单个图像水印
代码介绍:
首先,创立一个新的 PdfDocument 对象。接着,应用 loadFromFile() 办法从磁盘上载入 PDF 文档和要嵌入的图片。而后,循环遍历所有页面以插入水印。对于每个页面,获取页面的宽度和高度,并设置图片的透明度和初始坐标。应用 drawImage() 办法在页面的两头地位绘制水印图片。最初,应用 saveToFile() 办法指定要保留的文件名和文件格式,并将批改后的 PDF 文档保留在磁盘上。
残缺代码:
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("sample.pdf");
// 载入图片
PdfImage image = PdfImage.fromFile("image.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("result1.pdf");
}
}
效果图:
平铺图像水印
代码解释:
首先,创立一个新的 PdfDocument 对象。接着,应用 loadFromFile() 办法从磁盘上载入 PDF 文档和要嵌入的图片。而后,循环遍历所有页面以插入水印。对于每个页面,应用自定义的 insertImageWatermark() 办法插入平铺图片水印。在 insertImageWatermark() 办法中,创立一个平铺笔刷,并将图片绘制在笔刷上。应用该平铺笔刷绘制水印图片,并通过 drawRectangle() 办法在页面上绘制矩形并利用平铺笔刷。最初,应用 saveToFile() 办法指定要保留的文件名和文件格式,最初保存文档。
残缺代码:
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("sample.pdf");
// 载入图片
PdfImage image = PdfImage.fromFile("image.png");
// 循环遍历文档页面以插入水印
for (int i = 0; i < pdf.getPages().getCount(); i++) {
// 获取一个页面
PdfPageBase page = pdf.getPages().get(i);
// 应用自定义办法插入平铺图片水印
insertImageWatermark(page, image, 3, 3);
}
// 保存文档
pdf.saveToFile("result2.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()))));
}
}