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方法重载和方法重写的区别到底在哪?
Jun 11 Java/Android
Java实现二维数组和稀疏数组之间的转换
Jun 27 Java/Android
Mybatis-plus在项目中的简单应用
Jul 01 Java/Android
Java 语言中Object 类和System 类详解
Jul 07 Java/Android
mybatis 获取无数据的字段不显示的问题
Jul 15 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
Java字符串逆序方法详情
Mar 21 Java/Android
详解Spring Bean的配置方式与实例化
Jun 10 Java/Android
springboot为异步任务规划自定义线程池的实现
Jun 14 Java/Android
HttpClient实现表单提交上传文件
Aug 14 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
WINXP下apache+php4+mysql
2006/11/25 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
python调用私有属性的方法总结
2020/07/24 Python
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
销售心得体会
2014/01/02 职场文书
村委会换届选举方案
2014/05/03 职场文书
个人汇报材料范文
2014/12/30 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
与死神共舞观后感
2015/06/15 职场文书
领导视察通讯稿
2015/07/18 职场文书
村主任当选感言
2015/08/01 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
js作用域及作用域链工作引擎
2022/07/07 Javascript