1.需求

通过word模板和库表中数据动态生成word文档。

word操作工具本身自带word转xml(直接另存为xml即可)。

但是需求明确了,只能用word模板,也不允许用户手动从word转xml再上传。

数据动态生成使用了freemark,freemark需要一个xml或flt文件,所以结合上边的不能传xml的需求,我将word模板使用Spire.Doc将word模板转xml,在使用freemark进行xml的动态解析完成了任务

2.问题

在使用Spire.Doc的word文档产生了警告水印

(Evaluation Warning: The document was created with Spire.Doc for JAVA.)

3.问题解决

3.1. 我是先从网上找方案但是我使用第一种方法直接报错,也没找到报错原因,直接放弃,第二种因为得换包并且有长度限制,直接放弃

方法一:

//重新读取生成的文档    
  InputStream is = new FileInputStream("E:\\demo.docx");
        XWPFDocument document = new XWPFDocument(is);
        //以上Spire.Doc 生成的文件会自带警告信息,这里来删除Spire.Doc 的警告
        document.removeBodyElement(0);
        //输出word内容文件流,新输出路径位置
        OutputStream os=new FileOutputStream("E:\\demo1.docx");
        try {
            document.write(os);
            System.out.println("生成docx文档成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
方法二:

用free spire.Doc for Java这个是免费版,有一定限制, 导出的时候可生成的段落不能超过固定的数量,但是导出来的Word是没有警告信息的,商业版的spire.Doc for Java才会有警告信息
————————————————
版权声明:本文为CSDN博主「一纸的空白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33745005/article/details/108140983

3.2. 下面是我的解决方案

我首先想到的是解析每一行的word成数组,然后将第一行元素删除掉并且将数据输出到新的文件(我在思考word文档的格式问题怎么解决,但是我决定先试一下),当我解析出来以后我发现word文档输出出来是一行xml。于是我想到了新的解决方式:将xml中的警告直接用空字符串替换掉在输出,贴代码

下面方法我是直接对生成的word进行操作的,也可以在word转xml时直接对xml进行操作,原理和方法完全一样

//这里是根据解析出的xml抽取出的警告水印的样式及其xml标签,方便下面替换用
//如果这里只是替换文字的话会有空行,所以直接将整个标签替换
private final String WARN = "<w:p><w:pPr /><w:r><w:rPr><w:color w:val=\"FF0000\" /><w:sz w:val=\"24\" /></w:rPr><w:t xml:space=\"preserve\">Evaluation Warning: The document was created with Spire.Doc for JAVA.</w:t></w:r></w:p>";//原文件
String docName = fileName + uuid + ".doc";
File file = new File(docPath);
/*** 消除警告开始* 创建解析对象,注意这里的包是cn.hutool.core.io.file.FileReader* 因为这里使用jdk自带的java.io.FileReader时候解析出的xml不全*/
FileReader fileReader = new FileReader(file);
String str = fileReader.readString();
//替换
str = str.replaceAll(WARN,"");
//输出,这里的包我就直接用的java.io,用hutool也没问题
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(str);//消除警告结束

下面是word转xml

//这里的包是com.spire.doc.Document
Document doc = new Document();
doc.loadFromStream(inputStream, FileFormat.Doc);
doc.saveToFile(xmlPath, FileFormat.Word_Xml);
doc.dispose();

使用到的jar包 pom

    <repositories><repository><id>com.e-iceblue</id><url>http://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories><dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.doc</artifactId><version>3.7.2</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.19</version></dependency></dependencies>

4.总结

word的本质其实是xml,这应该也是word存储样式的本质。

喜欢记得关注点赞~

转载请注明出处哦~

java使用Spire.Doc生成的word文件去除水印(头部的警告信息)相关推荐

  1. linux中java使用spire.doc工具将word转html

    linux中java使用spire.doc工具将word转html 1.问题描述: linux CentOS出现jre1.8.0_271/lib/i386/libfontmanager.so找不到li ...

  2. freemarker生成的word文件打不开

    用eclipse写了一个程序, 使用freemaker生成word文件,生成的word文件可以打开.但是将程序打成jar包后,运行jar包,生成的word文件就打不开了.截图: 然后我用Editplu ...

  3. PDF文件编辑技巧之PDF文件去除水印方法

    PDF文件相信大家都会使用到,有时候我们不止局限于使用PDF文件还需要编辑PDF文件的时候,那么PDF文件的编辑技巧有什么呢.总所周知PDF文件的编辑是需要PDF编辑器的,编辑器的使用技巧有什么呢,好 ...

  4. JAVA使用spire.doc将富文本和latex公式生成word文档

    需求说明:数据库中存放的信息为富文本数据,并且包含了latex公式的代码,现在需要将富文本和latex公式数据输出到word文档中. 生成逻辑:将数据获取后进行遍历,获取每个节点,然后将节点增加到段落 ...

  5. java 使用Spire.Doc实现Word文档插入图片

    目录 使用步骤 1.引入依赖 2.关键代码 Spire.Doc for Java 是一款专业的 Java Word 组件,开发人员使用它可以轻松地将 Word 文档创建.读取.编辑.转换和打印等功能集 ...

  6. Java使用Spire.Doc实现Word文档添加图片水印

    通过本文你将学到: Spire.Doc是什么? 如何在项目中引入Spire.Doc依赖? 项目中基于Spire.Doc封装工具类实现Word文档添加图片水印? 一.Spire.Doc是什么? 1.Sp ...

  7. POI生成word文档,再通过spire.doc.free 实现word转pdf

    一.POI实现导出当前页面为word文档 1.导入poi依赖 <dependency><groupId>org.apache.poi</groupId><ar ...

  8. java通过spire.doc实现word增加水印功能

    目的: 动态给word文档添加水印,生成相应格式.基于Spire为免费版,以及Spire.Doc的运行无需安装Microsoft Word.而且,它可以将Microsoft Word文档创建功能集成到 ...

  9. Java使用Spire.Doc将多个word里的内容合并到一个word里边,格式保留

    import com.spire.doc.*; /*** 合并word文档*/ public class MergeDocFile {//将2.doc合并到1里边,这是在1.doc里另开一页放的2.d ...

最新文章

  1. C语言网络编程:TCP客户端实现
  2. mxnet转onnx
  3. code::blocks 修改代码字体颜色大小等
  4. Effective C++ ——让自己习惯C++
  5. 广度优先遍历_LeetCode | 广度优先遍历
  6. 学习 |《神经网络与深度学习》的讲义
  7. python 第四天
  8. 物联网卡有哪几种类型
  9. Python实现:超分子化学的建模------如何操控客体分子穿过主体分子和计算该过程能量变化(高斯(Gauss)输入文件为例,一键批量处理)
  10. 应用层下的人脸识别(三):人脸比对
  11. word复制或粘贴等操作使应用未响应
  12. Unity基础案例讲解:创建小型太空射击游戏(二)
  13. 关于Network ACLs的理解
  14. Hadoop退出安全模式
  15. EChart 展现内蒙古地图数据
  16. 南开大学张昊计算机,张昊(东北大学工商管理学院副教授)_百度百科
  17. 1.cpt介绍与思科设备的基本配置
  18. Android OpenGL ES (十三) 视频播放器
  19. 5G商用大幕拉开 下一个风口:行业新应用、新业务或新商业模式?
  20. 与Bosun一起监控

热门文章

  1. 全志F1C100s主线linux入坑记录 (1)linux系统移植
  2. this指向及改变this指向的方法
  3. Linux高性能集群(AMD处理器)Linpack测试方法
  4. 大数据基础之Hive(四)—— 常用函数和压缩存储
  5. 学习Hadoop的前提条件
  6. 贝尔生物再度备战上市:拟赴上交所主板IPO,已实现连续盈利
  7. mysql更新10000条记录_如何快速更新数据库中的百万条数据
  8. golang 从windows 剪切板 (剪贴板)中读取bmp图片数据的方法
  9. 2.1.2 BCD码
  10. C# API POST与GET的调用