Java实现给Word文件添加文字水印


Posted in Java/Android onFebruary 15, 2022

Word中设置水印时,可预设的文字或自定义文字设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法。下面,将以Java代码为例,对Word每一页设置不同的文字水印效果作详细介绍。

方法思路

在给Word每一页添加水印前,首先需要在Word文档每一页正文的最后一个字符后面插入“连续”分节符,然后在每一节的页眉段落里添加艺术字类型的形状对象,并设置艺术字的坐标位置、样式、对齐方式等。最后保存文档。

Jar引入

在程序中引入 Free Spire.Doc for Java 中的Spire.Doc.jar文件(该文件在lib文件夹下);如果需要通过Maven下载导入,可进行如下配置pom.xml:

<repositories>
        <repository>
            <id>com.e-iceblue</id>
            <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>

Java代码

给每页添加图片水印时,可参考如下步骤:

  1. 创建Document类的对象,并通过Document.loadFromFile(String fileName)方法加载Word文档。
  2. 通过Document.getSections().get(int index)方法获取指定节。
  3. 通过Section.getHeadersFooters().getHeader()方法获取页眉,HeaderFooter.addParagraph()方法添加段落到页眉。
  4. 创建ShapeObject类的对象,并传入参数设置形状类型为Text_Plain_Text类型的艺术字。并调用方法设置艺术字样式,如艺术字高度、宽度、旋转、颜色、对齐方式等。
  5. 通过Paragraph.getChildObjects().add(IdocumentObject entity)方法添加艺术字到段落。
  6. 最后,通过Document.saveToFile(String fileName, FileFormat fileFormat)方法保存文档。

不同页面中设置不一样的文字水印效果,只需要获取该页面对应节的页眉段落,然后参考上述用到的方法步骤逐一添加即可。

下面是完整的Java代码示例:

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.ShapeObject;

import java.awt.*;

public class DifferentTextWatermark {
    public static void main(String[] args) {
        //加载Word测试文档
        Document doc = new Document();
        doc.loadFromFile("test.docx");

        //获取文档第一节
        Section section1 = doc.getSections().get(0);

        //定义水印文字的纵向坐标位置
        float y = (float) (section1.getPageSetup().getPageSize().getHeight()/3);

        //添加文字水印1
        HeaderFooter header1 = section1.getHeadersFooters().getHeader();//获取页眉
        header1.getParagraphs().clear();//删除原有页眉格式的段落
        Paragraph para1= header1.addParagraph();//重新添加段落
        //添加艺术字并设置大小
        ShapeObject shape1 = new ShapeObject(doc, ShapeType.Text_Plain_Text);
        shape1.setWidth(362);
        shape1.setHeight(118);
        //设置艺术字文本内容、位置及样式(即文本水印字样)
        shape1.setRotation(315);
        shape1.getWordArt().setText("内部使用");
        shape1.setFillColor(new Color(128,128,128));
        shape1.setLineStyle(ShapeLineStyle.Single);
        shape1.setStrokeColor(new Color(128,128,128));
        shape1.setStrokeWeight(0.5);
        shape1.setVerticalPosition(y);
        shape1.setHorizontalAlignment(ShapeHorizontalAlignment.Center);
        para1.getChildObjects().add(shape1);

        //同理设置第二节页眉中的文字水印2
        Section section2 = doc.getSections().get(1);
        HeaderFooter header2 = section2.getHeadersFooters().getHeader();
        header2.getParagraphs().clear();
        Paragraph para2= header2.addParagraph();
        ShapeObject shape2 = new ShapeObject(doc, ShapeType.Text_Plain_Text);
        shape2.setWidth(362);
        shape2.setHeight(118);
        shape2.setRotation(315);
        shape2.getWordArt().setText("绝密资料");
        shape2.setFillColor(new Color(221,160,221));
        shape2.setLineStyle(ShapeLineStyle.Single);
        shape2.setStrokeColor(new Color(221,160,221));
        shape2.setStrokeWeight(0.5);
        shape2.setVerticalPosition(y);
        shape2.setHorizontalAlignment(ShapeHorizontalAlignment.Center);
        para2.getChildObjects().add(shape2);

        //同理设置第三节中的页眉中的文字水印3
        Section section3 = doc.getSections().get(2);
        HeaderFooter header3 = section3.getHeadersFooters().getHeader();
        header3.getParagraphs().clear();
        Paragraph para3= header3.addParagraph();
        ShapeObject shape3 = new ShapeObject(doc, ShapeType.Text_Plain_Text);
        shape3.setWidth(362);
        shape3.setHeight(118);
        shape3.setRotation(315);
        shape3.getWordArt().setText("禁止传阅");
        shape3.setFillColor(new Color(70,130,180));
        shape3.setLineStyle(ShapeLineStyle.Single);
        shape3.setStrokeColor(new Color(70,130,180));
        shape3.setStrokeWeight(0.5);
        shape3.setVerticalPosition(y);
        shape3.setHorizontalAlignment(ShapeHorizontalAlignment.Center);
        para3.getChildObjects().add(shape3);

        //保存文档
        doc.saveToFile("DifferentTextWatermark.docx",FileFormat.Docx_2013);
        doc.dispose();
    }
}

如图,每一页均可显示不同的文字水印效果:

Java实现给Word文件添加文字水印

到此这篇关于Java实现给Word文件添加文字水印的文章就介绍到这了,更多相关Java Word文字水印内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
基于Java的MathML转图片的方法(示例代码)
Jun 23 Java/Android
Java集成swagger文档组件
Jun 28 Java/Android
Java图书管理系统,课程设计必用(源码+文档)
Jun 30 Java/Android
浅谈resultMap的用法及关联结果集映射
Jun 30 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
springboot如何接收application/x-www-form-urlencoded类型的请求
Nov 02 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
java开发双人五子棋游戏
May 06 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
Java结构型设计模式之组合模式详解
Sep 23 Java/Android
SSM项目使用拦截器实现登录验证功能
Jan 22 #Java/Android
利用Sharding-Jdbc进行分库分表的操作代码
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 #Java/Android
JavaCV实现照片马赛克效果
Jan 22 #Java/Android
maven依赖的version声明控制方式
深入浅出讲解Java8函数式编程
Jan 18 #Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 #Java/Android
You might like
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
php制作文本式留言板
2015/03/18 PHP
php动态绑定变量的用法
2015/06/16 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
layui 实现表单和文件上传一起传到后台的例子
2019/09/16 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
Python 字符串中的字符倒转
2008/09/06 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
推荐信模板
2014/05/09 职场文书
入团申请书格式
2019/06/20 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
再谈python_tkinter弹出对话框创建
2022/03/20 Python
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server