Doc电子报告研发过程
这是记录一次电子报告研发过程,口水记录.
项目中需要生成电子报告;
一切不讲实际场景的解决方案都是耍牛氓.
场景
- 类似ERP系统,需要生成电子报告;
- 需要私网部署;
- 电子报告格式复杂,内容包含:富文本,公式,特殊字符,表格,图片,分页涵盖Word的功能;
- 内容长度不限制;
- 后台服务器主要使用PHP开发,但不限制PHP,NodeJS,Pyhton,Java,C++都可以;
- 服务器主要使用CentOS7
- 线下主要通过修改使用Word模板生成报告;
- 使用Word打印;
- Word有良好打印格式支持;
- 电子报告是必须流程;
解决方案
HTML转WORD方案
通过html生成pdf或word,也研究过markdown转word.
虽然能达到要求,但是由于前端html的使用分辨率px来计算,打印使用点pi来计算,很难精确控制页面样式.
html转pdf的方案工具很多,
文档格式的瑞士军刀pandoc,很多格式都可以转换
官网:http://www.pandoc.org/
在macos,window,linux下都可以安装使用.
常用转换格式,看下图
虽然很强大,但生成文档质量差强人意,个人使用可以,客户很挑,有可能为了个空格折腾一星期都解决不了.
PHPWord方案
设想通过word模板生成word,设想很美好,现实很骨感.
PHPOffice的GitHub:
https://github.com/PHPOffice/PHPWord
选型阶段,测试了几个简单的模板,文本变量替换完全没问题,就匆匆使用了.
经过几天试用,完全解决不了问题.
问题:
- 分块没法复制
- 表格生成有问题
- 库Bug太多,很多千年bug没有修复
- 复制的数据结构完全就蒙逼了
- 打开文本写入会丢失原word样式
- 模板正则有问题,兼容性也存在问题.
- 文档太差,没法入手
Bug太多,有很多需要修改源码才能使用,时间紧就没有使用.迫切使用第二方案.
在线Word解析
地址:http://www.xdocin.com
这个云模板,支持很多数据结构,直接调用API就能使用,可以生成word,pdf.
也是基于word模板变量替换方式来完成的.
一些简单的结构还比较OK,格式不会丢失.
缺点和问题:
- 基于对象的模板变量,虽然可以支持多层结构的数据 ,但是有个缺点,就是不能跨页,如果数据量多超就显示不全. 对象就是Word”文本框”来实现.
- 无故多空白,串行等现象
- 无法支持运算
- 富文本不支持
- 公式不支持
- 图片很难调整
- 不支持私有布署
- 不开源,有问题只能面对黑洞
Python方案
回到原点,PHPWord虽然可以能写入任意内容,但是质量效率都成问题.我们考虑使用其它语言方案,不能在一棵树上吊死.
选择一门稍微快速入手的语言,Python.
git:https://github.com/python-openxml/python-docx
通过python生成api,然后使用php去调用.
python-docx,可以私有化布署,支持富文本与公式,调整样式等自定义操作.
缺点:
- 复增加杂度跨语言,维护难度增加
- 已经失去word模板的用处,基本上是创建word.
- 不能可视化,调整很复杂.
- 由于word的格式与html常用的富文本不一样,比如公式表达不一样.前端UI后word需要两套处理方案.
通过上面几次选型,决定再回归到最初html方案,直接导出PDF,不在生成word.减少复杂度.
需要解决问题:
- 报告生成
- 报告预览
- UI和报告一至
- 减少复杂度
- 支持定制化的所有要求
- 浏览器兼容性
- 跨平台
因为ERP有大量打印需要,自定义打印内容,硬件交互,本地文件处理的需要.
这次直接使用封装html方案,来避规这些问题,通过选型,我们使用了Electron方案.
参考后面<<electron生成pdf>>文章
WebOffice方案
如果需要真正可被化在线编辑Word,只能使用在线文档编辑控件了.这个布署复杂,收费,难以自定义.
官方office online:
https://products.office.com/zh-cn/office-online/documents-spreadsheets-presentations-office-online
服务器不跨不平台且收费,客户端跨平台免费使用.
这个方案,算是最后的稻草,基于能省则省的原则,到最后再尝试.
本文作者:阿金
本文链接:http://www.hi-arkin.com/2019/01/09/Electron/report/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
扫描二维码,分享此文章