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镜像。