Aspose.word转换PDF踩坑总结 |
您所在的位置:网站首页 › word转pdf表格缺失 › Aspose.word转换PDF踩坑总结 |
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文档。经过一番搜索后,找到了以下几种方案。 序号 描述 备注 测试结果 1 前端绘制canvas,保存为图片,后端将图片生成PDF canvas 1、 生成的图片不清晰 2、 只能生成当前屏幕的截图,页面缺失 2 前端直接转为PDF jspdf.js 原理同上,结果同上 3 wkhtmltopdf服务端命令调用 1、 需要在服务器安装wkhtmltopdf程序 2、 集成方式:Java调用shell命令将页面地址传入wkhtmltopdf工具来生成PDF 3、 pass原因:需要重构页面;华为云容器部署难以实现 4 Apache iText Jar包集成 1、 对HTML的css样式渲染效果很差,导致生成的PDF样式错乱 2、 对HTML标签要求严格,标签未关闭则会渲染失败 5 flying-saucer-pdf
Jar包集成 1、 基于Apache iText二次开发 2、 支持css样式渲染 3、 也存在HTML标签要求严格的问题,因台账功能中包含富文本编辑器,无法保证渲染效果 6 Aspose.word Jar包集成 企业级收费产品 1、 收费 2、 暂未实现如何设置字体,导致在Linux部署时生成的文档字体存在小小的问题 7 Spire.doc Jar包集成 企业级收费产品 1、 收费 2、 只能对通过Office创建的文档进行转换,对于使用html-docx.js生成的文档无法转换 8 Docx4j Jar包集成 1、 只能对通过Office创建的文档进行转换,对于使用html-docx.js生成的文档无法转换 2、 效率极低,50Kb的docx文档转换过程需要1分钟以上 9 MdToPdf Jar包集成 1、 只支持markDown文件转换为PDF 2、 无法渲染图片 3、 无法完美渲染表格
经过多方对比,比较符合需求的只有方案6(Aspose.word) 万幸的是,找到了热心网友上传的破解Jar包,无需设置Licence,生成的文档中也没有版权水印等信息。 3 集成Aspose.word目前只存在一个问题,字体设置未生效。 在外网环境中,生成的PDF效果正常。 在内网环境中,文档中部分文字显示效果不理想,效果如下。 尝试解决: 将外网机器中的“C:windows/fonts”中的所有字体拷贝至内网机器中并安装,问题依旧未能解决。 查询word官方文档,在程序中添加了字体扫描路径,问题依旧未能解决。
暂时放弃,直接在Linux环境进行部署测试。 在Linux环境部署后,新的问题出现了。
猜测这个问题应该是服务器未安装中文字体导致的,因此将windows端的中文字体上传至服务器,并安装,问题解决。 4 华为云部署 云上环境和252测试系统区别很大,252是jar包部署,华为云是docker环境部署。 在云服务器上提前装好了中文字体,然而在部署后,经过测试,中文字体依旧没能正常渲染。 猜测原因可能是docker镜像中不存在中文字体,而华为云部署时上传jar包后,打镜像的过程是华为云实现的,无法进行介入,无法安装字体。 与华为云负责人进行协调,答复是不支持,并且不提供帮助。 在多方同事的协助下,进行了两个方向的研究,一、程序配置字体扫描及字体设置;二、依赖自带中文字体的基础镜像手动构建docker镜像。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |