随笔 - 11  文章 - 0 评论 - 0 阅读 - 1196
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

最近做项目 要求生成word文件及PDF文件,生成word文件时其中内容要根据不同公司提供的内容动态替换里面的值。参考了很多之后选择用word模板生成word文件。

其中主要参考:https://www.cnblogs.com/suzan/p/10577738.html

 简单的word模板:https://files.cnblogs.com/files/blogs/809524/title.zip?t=1709017146&download=true

生产wode文档用的是freemarker方式

1.要先有一个word文档,如上需要动态替换的内容用英文替换(其中汉字最好用宋体,因为word转pdf的时候会乱码,但是我用的方式微软雅黑也可以转pdf,其中图片也是可以替换的)

2.有了word文档后(要用.docx文件不要用.doc 文件),将后缀直接改为.zip,改后解压看到如下形式文档。

3.将word下document.xml修改,主要就是替换英文为带括号形式,图片如果没有64位编码就看下word/media 图片就明白了,这个文件夹下就是模板中所有图片,如果我们后续需要替换其中某张图片再java中获取到文件流然后直接替换即可。

4.改完document.xml后复制一份到本地(document本地.xml),然后到步骤2文件夹下重新压缩为zip文件--此时我们有一个改了document文件的zip文件及一份新的document文件。

5.有了两个模板文件就是java实现,主要思想是用freemarker把document本地.xml 当成模板,然后将后台数据渲染到这个xml中,然后替换zip中的document.xml.替换图片也是同理。

6.这时下载出来的word文档就是替换文字及图片后的word.docx文件。

因为这里生成了word文件而word和PDF内容格式肯定要求是一样的,所以第一反应就是将word转为PDF,以下就是word转pdf的过程。

1.word转pdf要求是不失真,免费

2.网上推荐的方式有 itexpdf(失真很厉害用不成);

         poi包方式(各种包的报错,Poi引用的一些类包里没有,将其他包引入后这些包又有引用类没有,解决不完,用不成);

           docx4j(比上面两种好一些,但是也失真厉害达不到生产使用的标准,生成pdf的时间也长)

         aspose-words(pj 版包,效果不错)

3. aspose-words方式需要lincense.xml要不有水印,图片文字都不失真,推荐。

4.整体思想是用前一步骤生成word文件然后转pdf,然后删除word文件。

有需要代码的私聊吧。

 

posted on   防守三巨臀  阅读(842)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示