代码拉取完成,页面将自动刷新
按照OFD标准 GB/T 33190-2016 15.2 分页注释文件 的设计水印应该以一种特殊的注释类型存在于OFD页面中。
基于上述设计OFDRW提供一种便捷的水印设置方式 org.ofdrw.layout.edit.Watermark
。
通过该对象可以设置水印区域、内容、文字效果、颜色、旋转角度、字体等属性,快速向 整个文档 添加水印。
您需要通过下面方式进行水印的添加:
public class Main{
public static void main(String[] args)throws Exception {
Path srcP = Paths.get("src.ofd");
Path outP = Paths.get("watermarked.ofd");
// 1. 打开需要添加水印的文件
try (OFDReader reader = new OFDReader(srcP);
OFDDoc ofdDoc = new OFDDoc(reader, outP)) {
// 2. 创建水印对象
Watermark watermark = new Watermark(ofdDoc.getPageLayout());
// 3. 设置水印的属性
watermark .setValue("测试水印")
.setFontName("宋体")
.setColor("#FF0000")
.setFontWeight("900")
.setAngle(330d)
.setFontSize(5d);
// 4. 添加水印到页面
ofdDoc.addWatermark(watermark);
}
// 5. 关闭文件 try-resource close
}
}
效果如下:
示例代码详见: WatermarkTest.java
若您需要向指定页面添加水印,或者需要更加复杂的水印效果,那么org.ofdrw.layout.edit.Watermark
就难以满足您的需求,这时您可以通过自定义注释对象实现水印。
自定义水印的添加步骤如下:
public class Main{
public static void main(String[] args) {
Path srcP = Paths.get("src/test/resources", "no_page_container.ofd");
Path outP = Paths.get("target/AddWatermarkAnnot.ofd");
// 1. 打开需要添加水印的文件
try (OFDReader reader = new OFDReader(srcP);
OFDDoc ofdDoc = new OFDDoc(reader, outP)) {
Double width = ofdDoc.getPageLayout().getWidth();
Double height = ofdDoc.getPageLayout().getHeight();
// 2. 创建注释对象,并且设置类型为水印
Annotation annotation = new Annotation(new ST_Box(0d, 0d, width, height), AnnotType.Watermark, ctx -> {
// 3. 提供注释绘制器,并在绘制器内部实现水印的绘制逻辑
ctx.font = "8mm 宋体";
ctx.fillStyle = "rgba(170, 160, 165, 0.4)";
for (int i = 0; i <= 8; i++) {
for (int j = 0; j <= 8; j++) {
ctx.save();
ctx.translate(22.4 * i, j * 50);
ctx.rotate(45);
ctx.fillText("保密资料", 10, 10);
ctx.restore();
}
}
});
// 4. 添加注释到页面
ofdDoc.addAnnotation(1, annotation);
}
// 5. 关闭文件 try-resource close
}
}
效果如下:
示例代码详见: WatermarkTest.java
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。