1 需求背景
运营台账功能需要将用户上传的doc、docx、wps格式的文档进行在线预览。(2月17日用户提交需求)
运营台账功能的“一键生成”功能需要生成PDF,并自动上传以及下载至用户端。(3月2日用户提交需求)
2 方案研究
2.1 在线预览
文件可能存在两个来源,一、前端生成后用户手动上传;二、用户手动创建文件后上传。
程序生成的文件采用了jquery.wordexport.js实现,将html文本添加MSOffice文件头后直接存储为doc。
而用户自己创建的文件则是由Micro Office或者WPS生成,这两种文件存在本质性的区别。
因此为了兼容所有情况,需要对不同类型的文件进行统一处理。经过查询各种资料,找到了kkFileView开源项目。
kkFileView项目为文件文档在线预览项目解决方案,对标业内付费产品有【
永中office
】【
office365
】【
idocv
】等。
使用spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,Excel,pdf,txt,zip,rar,图片等等。
然而,开发的过程终究会遇到各种坎坷。使用jquery.wordexport.js生成doc文件,kkFileView无法正确渲染。因此考虑更换前端生成doc文档插件。
经过测试,生成的doc文件如果在pc端打开后另存为docx格式后再上传,kkFileView是可以正常渲染的。因此找到了Html-docx.js插件, 它可以将HTML转换为docx,于是将其集成到开发环境中,就在我们以为一切都已经OK的时候,用户提交了新的需求:需要将页面导出为PDF。
2.2 生成PDF
与台账功能十分相似的还有另外一个功能:月报。月报中也存在一键导出、上传。而月报的页面布局、样式相对比较复杂,因此我们需要的还是直接将HTML文本转换为PDF文档。经过一番搜索后,找到了以下几种方案。
经过多方对比,比较符合需求的只有方案6(Aspose.word)
万幸的是,找到了热心网友上传的破解Jar包,无需设置Licence,生成的文档中也没有版权水印等信息。
3 集成Aspose.word
目前只存在一个问题,字体设置未生效。
在外网环境中,生成的PDF效果正常。
在内网环境中,文档中部分文字显示效果不理想,效果如下。
尝试解决:
将外网机器中的“C:windows/fonts”中的所有字体拷贝至内网机器中并安装,问题依旧未能解决。
查询word官方文档,在程序中添加了字体扫描路径,问题依旧未能解决。
暂时放弃,直接在Linux环境进行部署测试。
在Linux环境部署后,新的问题出现了。
猜测这个问题应该是服务器未安装中文字体导致的,因此将windows端的中文字体上传至服务器,并安装,问题解决。
4 华为云部署
云上环境和252测试系统区别很大,252是jar包部署,华为云是docker环境部署。
在云服务器上提前装好了中文字体,然而在部署后,经过测试,中文字体依旧没能正常渲染。
猜测原因可能是docker镜像中不存在中文字体,而华为云部署时上传jar包后,打镜像的过程是华为云实现的,无法进行介入,无法安装字体。
与华为云负责人进行协调,答复是不支持,并且不提供帮助。
在多方同事的协助下,进行了两个方向的研究,一、程序配置字体扫描及字体设置;二、依赖自带中文字体的基础镜像手动构建docker镜像。