Hi,阿金 ...

Doc电子报告研发

发表: 2019-01-09 分类:

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

选型阶段,测试了几个简单的模板,文本变量替换完全没问题,就匆匆使用了.
经过几天试用,完全解决不了问题.
问题:

  1. 分块没法复制
  2. 表格生成有问题
  3. 库Bug太多,很多千年bug没有修复
  4. 复制的数据结构完全就蒙逼了
  5. 打开文本写入会丢失原word样式
  6. 模板正则有问题,兼容性也存在问题.
  7. 文档太差,没法入手

Bug太多,有很多需要修改源码才能使用,时间紧就没有使用.迫切使用第二方案.

在线Word解析

地址:http://www.xdocin.com
这个云模板,支持很多数据结构,直接调用API就能使用,可以生成word,pdf.
也是基于word模板变量替换方式来完成的.
一些简单的结构还比较OK,格式不会丢失.

缺点和问题:

  1. 基于对象的模板变量,虽然可以支持多层结构的数据 ,但是有个缺点,就是不能跨页,如果数据量多超就显示不全. 对象就是Word”文本框”来实现.
  2. 无故多空白,串行等现象
  3. 无法支持运算
  4. 富文本不支持
  5. 公式不支持
  6. 图片很难调整
  7. 不支持私有布署
  8. 不开源,有问题只能面对黑洞

Python方案

回到原点,PHPWord虽然可以能写入任意内容,但是质量效率都成问题.我们考虑使用其它语言方案,不能在一棵树上吊死.
选择一门稍微快速入手的语言,Python.
git:https://github.com/python-openxml/python-docx

通过python生成api,然后使用php去调用.
python-docx,可以私有化布署,支持富文本与公式,调整样式等自定义操作.

缺点:

  1. 复增加杂度跨语言,维护难度增加
  2. 已经失去word模板的用处,基本上是创建word.
  3. 不能可视化,调整很复杂.
  4. 由于word的格式与html常用的富文本不一样,比如公式表达不一样.前端UI后word需要两套处理方案.

通过上面几次选型,决定再回归到最初html方案,直接导出PDF,不在生成word.减少复杂度.

需要解决问题:

  1. 报告生成
  2. 报告预览
  3. UI和报告一至
  4. 减少复杂度
  5. 支持定制化的所有要求
  6. 浏览器兼容性
  7. 跨平台

因为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 许可协议。转载请注明出处!

扫描二维码,分享此文章