PDF 文档中的文字水印是显示在 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.4.2</version>
</dependency>
</dependencies>
在 PDF 文档中添加单一文字水印
单一文字水印是指只在同一个 PDF 页面中间出现一次的文字水印。使用 Spire.PDF for Java 在 PDF 文档中添加单一文字水印的操作步骤如下:
- 创建 PdfDocument 类的对象。
- 用 PdfDocument.loadFromFile() 方法载入 PDF 文件。
- 循环遍历 PDF 文档中的所有页面以逐个添加水印。
- 用 PdfDocument.getPages().get() 方法获取一个页面。
- 用 PdfPageBase.getCanvas().setTransparency() 方法设置水印文字的透明度。
- 用 PdfPageBase.getCanvas().translateTransform() 设置坐标的偏移量。
- 用 PdfPageBase.getCanvas().rotateTransform() 方法设置水印文字的旋转角度。
- 用 PdfPageBase.getCanvas().drawString() 方法将水印绘制在此页面上。
- 用 PdfDocument.saveToFile() 方法保存文档。
- Java
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
public class insertSingleTextWaterMark {
public static void main(String[] args) {
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//载入PDF文档
pdf.loadFromFile("人的注意力很容易分散.pdf");
//循环遍历 PDF 文档中的所有页面以逐个添加水印
String text = "草稿";
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", Font.BOLD, 50));
float set1 = (float) (font.measureString(text).getWidth() * Math.sqrt(2)/4);
float set2 = (float) (font.measureString(text).getHeight() * Math.sqrt(2)/4);
for (int i = 0; i < pdf.getPages().getCount(); i++){
//获取一个页面
PdfPageBase page = pdf.getPages().get(i);
//设置水印文字的透明度
page.getCanvas().setTransparency(0.8f);
//设置坐标的偏移量
page.getCanvas().translateTransform(page.getCanvas().getSize().getWidth()/2 - set1 - set2, page.getCanvas().getSize().getHeight()/2 + set1 - set2);
//设置水印文字的旋转角度
page.getCanvas().rotateTransform(-45);
//将水印绘制在该页面上
page.getCanvas().drawString(text, font, PdfBrushes.getDarkGray(), 0, 0);
}
//保存文档
pdf.saveToFile("单一文字水印.pdf");
}
}
在 PDF 文档中添加平铺文字水印
平铺文字水印在同一 PDF 页面上多次出现,多用于保护文档的版权和不当使用等。我们可以利用 Spire.PDF for Java 中的类和方法自定义一个方法用于插入平铺文字水印到 PDF 文档。操作步骤如下:
- 创建 PdfDocument 类的对象。
- 用 PdfDocument.loadFromFile() 方法载入 PDF 文件。
- 循环遍历 PDF 文档中的所有页面以逐个添加水印。
- 用 PdfDocument.getPages().get() 方法获取一个页面。
- 用自定义的 insertTextWatermark() 方法插入水印到该页面。
- 用 PdfDocument.saveToFile() 方法保存文档。
- Java
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import com.spire.pdf.htmlconverter.qt.Size;
import java.awt.*;
import java.awt.geom.*;
public class insertTiledTextWatermark {
public static void main(String[] args) {
//创建PdfDocument类的对象
PdfDocument pdf = new PdfDocument();
//载入PDF文件
pdf.loadFromFile("人的注意力很容易分散.pdf");
//循环遍历PDF文档中的所有页面以逐个添加水印
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("黑体", Font.BOLD, 20));
for (int i = 0; i < pdf.getPages().getCount(); i++){
PdfPageBase pageBase = pdf.getPages().get(i);
insertTextWatermark(pageBase, font, "请勿复制", 3, 3);
}
//保存文档
pdf.saveToFile("平铺文字水印.pdf");
}
static void insertTextWatermark(PdfPageBase page, PdfTrueTypeFont font, String watermark, int row, int column) {
//计算两个偏移变量的值以用于计算坐标的平移量
float set1 = (float)(font.measureString(watermark).getWidth() * Math.sqrt(2)/4);
float set2 = (float)(font.measureString(watermark).getHeight() * Math.sqrt(2)/4);
//创建一个平铺笔刷
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 - set1 - set2, brush.getSize().getHeight()/2 + set1 - set2);
brush.getGraphics().rotateTransform(-45);
//绘制水印文本到平铺笔刷
brush.getGraphics().drawString(watermark, font, PdfBrushes.getViolet(), 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 天的临时许可证。