添加和删除 pdf 文档中的水印在文档管理、k8凯发天生赢家的版权保护、信息安全等领域扮演着重要角色。水印可以是一种视觉标记,如公司 logo、k8凯发天生赢家的版权信息或“机密”字样,用于表明文档的来源、状态或所有权。添加水印可以增强文档的k8凯发天生赢家的版权保护,防止未经授权的复制和分发。同时,在某些情况下,如当文档被合法购买或授权使用后,可能需要删除水印以提供更清晰的阅读体验或进一步的编辑权限。本文将介绍如何使用 spire.pdf for java 在 java 项目中添加和移除 pdf 文档中的水印。
安装 spire.pdf for java
首先,您需要在 java 程序中添加 spire.pdf.jar 文件作为依赖项。jar 文件可以从此链接下载。如果您使用 maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 jar 文件。
com.e-iceblue
e-iceblue
https://repo.e-iceblue.cn/repository/maven-public/
e-iceblue
spire.pdf
10.6.2
java 在 pdf 文档中添加水印
spire.pdf 提供了一个通过 pdfwatermarkannotation 对象向 pdf 页面添加水印的方法。值得注意的是,采用此方法添加的水印,日后可以被轻易地移除。以下是主要的关键步骤:
- 初始化一个 pdfdocument 实例。
- 使用 pdfdocument.loadfromfile() 方法加载一个 pdf 文档。
- 创建一个 pdftruetypefont 字体对象,用户绘制水印文本。
- 创建一个 rectangle2d 类型对象,用于定义页面的边界。
- 使用 for 循环迭代 pdf 文档中的所有的 pdfpagebase 页面对象。
- 创建一个 pdftemplate 对象用于绘制水印,设置其尺寸与当前页面相同。
- 调用自定义的 insertwatermark() 方法,在 pdftemplate 对象上绘制水印内容。
- 创建一个 pdfwatermarkannotation 对象,并定义水印放置的位置。
- 创建一个 pdfappearance 对象,用于配置水印的视觉效果。
- 使用 pdfappearance.setnormal(pdftemplate) 方法将 pdftemplate 对象关联到 pdfappearance 对象。
- 使用 pdfwatermarkannotation.setappearance(pdfappearance) 方法将 pdfappearance 对象关联到 pdfwatermarkannotation 对象。
- 通过 pdfpagebase.getannotationswidget().add(pdfwatermarkannotation) 方法将水印注释添加到页面中。
- 使用 pdfdocument.savetofile() 方法保存到文件中。
- java
import com.spire.pdf.*;
import com.spire.pdf.annotations.*;
import com.spire.pdf.annotations.appearance.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.*;
public class addwatermarkinpdf {
public static void main(string[] args) {
// 创建pdfdocument对象
pdfdocument pdfdocument = new pdfdocument();
// 从文件加载pdf文档
pdfdocument.loadfromfile("示例.pdf");
// 设置字体样式,这里选择"微软雅黑",字号为22
font font = new font("微软雅黑", java.awt.font.plain, 22);
// 创建pdftruetypefont对象用于后续的文本渲染
pdftruetypefont truetypefont = new pdftruetypefont(font);
// 获取页面对象
pdfpagebase page;
// 定义水印文本
string watermarkannotationtext = "id_0";
// 创建尺寸对象
dimension2d dimension2d = new dimension();
// 创建矩形对象
rectangle2d lorect = new rectangle2d.float();
// 遍历pdf中的每一页
for (int i = 0; i < pdfdocument.getpages().getcount(); i ) {
// 获取当前页
page = pdfdocument.getpages().get(i);
// 设置尺寸对象大小为当前页的大小
dimension2d.setsize(page.getclientsize().getwidth(), page.getclientsize().getheight());
// 设置矩形对象框架,即整个页面的范围
lorect.setframe(new point2d.float(0, 0), dimension2d);
// 创建pdftemplate对象,用于绘制水印
pdftemplate template = new pdftemplate(page.getclientsize().getwidth(),page.getclientsize().getheight());
// 插入水印
insertwatermark(template,truetypefont,"禁止修改");
// 创建pdfwatermarkannotation对象,定义水印位置
pdfwatermarkannotation watermarkannotation=new pdfwatermarkannotation(lorect);
// 创建pdfappearance对象,设置水印外观
pdfappearance appearance=new pdfappearance(watermarkannotation);
// 设置水印的正常状态模板
appearance.setnormal(template);
// 将外观设置到水印对象中
watermarkannotation.setappearance(appearance);
// 设置水印文本
watermarkannotation.settext(watermarkannotationtext);
// 设置水印打印矩阵,用于控制水印的位置和大小
watermarkannotation.getfixedprint().setmatrix(new float[]{1,0,0,1,0,0});
// 设置水平偏移量
watermarkannotation.getfixedprint().sethorizontaltranslation(0.5f);
// 设置垂直偏移量
watermarkannotation.getfixedprint().setverticaltranslation(0.5f);
// 将水印添加到页面的注释小部件中
page.getannotationswidget().add(watermarkannotation);
}
// 保存pdf文档至文件
pdfdocument.savetofile("添加水印.pdf");
// 关闭并释放pdf文档资源
pdfdocument.dispose();
}
// 定义一个静态方法用于向pdf模板中插入水印
static void insertwatermark(pdftemplate template, pdftruetypefont font, string watermark) {
// 创建一个dimension2d对象,用于设置水印刷子的大小
dimension2d dimension2d = new dimension();
// 设置水印刷子的大小为模板宽度和高度的一半和三分之一
dimension2d.setsize(template.getwidth() / 2, template.getheight() / 3);
// 创建一个pdftilingbrush对象,用于重复填充水印图案
pdftilingbrush brush = new pdftilingbrush(dimension2d);
// 设置水印的透明度为0.3
brush.getgraphics().settransparency(0.3f);
// 开始一组图形状态保存
brush.getgraphics().save();
// 平移图形上下文,使其中心与水印刷子的中心对齐
brush.getgraphics().translatetransform((float) brush.getsize().getwidth() / 2, (float) brush.getsize().getheight() / 2);
// 旋转图形上下文,使水印倾斜45度
brush.getgraphics().rotatetransform(-45);
// 在图形上下文中绘制水印文字,使用指定的字体、颜色和居中对齐方式
brush.getgraphics().drawstring(watermark, font, pdfbrushes.getviolet(), 0, 0, new pdfstringformat(pdftextalignment.center));
// 结束一组图形状态保存并恢复
brush.getgraphics().restore();
// 重置水印透明度为1,即完全不透明
brush.getgraphics().settransparency(1);
// 创建一个rectangle2d对象,用于定义水印的填充区域
rectangle2d lorect = new rectangle2d.float();
// 设置水印的填充区域为整个模板的大小
lorect.setframe(new point2d.float(0, 0), template.getsize());
// 使用水印刷子在模板上绘制水印
template.getgraphics().drawrectangle(brush, lorect);
}
}
java 从 pdf 文档中移除水印
spire.pdf 可以移除通过 pdfwatermarkannotation 对象向 pdf 页面添加的水印。以下是详细的步骤:
- 初始化一个 pdfdocument 实例。
- 使用 pdfdocument.loadfromfile() 方法加载一个 pdf 文档。
- 通过 for 循环迭代 pdf 文档中的每一个 pdfpagebase 页面对象。
- 使用 pdfpagebase.getannotationswidget() 方法获取当前页面的所有注释。
- 再次使用 for 循环遍历当前页面的每一个注释对象, 筛选出 pdfwatermarkannotationwidget 类型的注释。
- 通过 pdfwatermarkannotationwidget.gettext() 方法来判断出目标水印注释并执行删除操作。
- 使用 pdfdocument.savetofile() 方法保存到文件中。
- java
import com.spire.pdf.*;
import com.spire.pdf.annotations.*;
public class removewatermarkfrompdf {
public static void main(string[] args) {
// 创建pdfdocument对象
pdfdocument pdfdocument = new pdfdocument();
// 从文件加载pdf文档
pdfdocument.loadfromfile("水印.pdf");
// 定义一个字符串id,用于匹配和删除特定的水印
string id = "id_0";
// 遍历pdf文档中的每一页
for (int i = 0; i < pdfdocument.getpages().getcount(); i ) {
// 获取当前页面的所有注释
pdfannotationcollection annotationwidget = pdfdocument.getpages().get(i).getannotationswidget();
// 遍历当前页面的所有注释
for (int j = 0; j < annotationwidget.getcount(); j ) {
// 检查当前注释是否为水印注释
if (annotationwidget.get(j) instanceof pdfwatermarkannotationwidget) {
// 如果水印文本与id相等,则删除该水印
if (annotationwidget.get(j).gettext().equals(id)) {
annotationwidget.remove(annotationwidget.get(j));
}
}
}
}
// 将修改后的pdf文档保存到新文件
pdfdocument.savetofile("移除水印.pdf");
// 释放pdfdocument对象资源
pdfdocument.dispose();
}
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。