.Net 5 下的可打印图文报表解决方案 |牛气冲天新年征文

559 阅读4分钟

最近需要处理一个有关打印的问题,有一些界面上的要求。首要选择是ECharts渲染图,因为其界面的表现是非常酷的;其次要求支持渲染表格;再次是需要可以打印、导出为word、pdf、excel等格式,有关打印,之前也处理过很多,最近的应用基本都是基于Fast-report,利用后台产生pdf完成的,当然前端也有很多的插件,比如vue-print等,针对这个功能,又有什么更好的方案呢?

先比对几个商业产品看看,毕竟商业版的比较重产品化。

1、纯后端方案

1.1、Fastreport.Net

最新版本支持.NET 5,我是去年的版本,支持到.net core 3.1,就使用其制作了几个例子,简单测试了下:

  • 表格支持非常棒,之前的应用基本都是表格类的;
  • 图片也是支持的,可以传入url地址进行实时抓取;
  • 有设计器支持
  • 导出支持多种格式,覆盖功能要求
  • 缺点, 支持的chart是基于微软ms chart的,其严重依赖于.net framework 3.5,因此并不适合.net core/.net 5下的应用开发,其官网某些地方声称支持,但在提问论坛里发现有这个问题,并且没有解决方案。
  • 暂时淘汰出局

1.2、ActiveReports

葡萄城的产品,价格未知,想询下价,发现客服巨慢,暂时并不知道具体价格,估计按人头计算吧。

  • 其他FastReport支持的特点基本都能支持;
  • 完美支持.NET 5;
  • 支持丰富的chart,从官网上看,图例看起来很low,属于几年前的样子,并部讨喜;
  • 不支持导出word;
  • 由于价格和图例的问题,暂时淘汰

2、纯前端方案

基于上面两个后端方案,ActiveReports 有前端方案,FastReport没有纯前端的方案。 这里罗列下功能和对应的插件,主要基于vue来显示需求。

2.1、vue-print

vue打印插件之一,其整体表现良好,但基于echarts,需要处理一些小坑,对于打印应该不是特别大的问题,其缺陷是对于导出,仍然需要一套新的方案来实现。

2.2、window.print()

前端原生支持,大部分插件的打印都是基于此封装而来。

2.3、vue-pdf

展示pdf,可以使用vue-pdf插件

2.4、打印导出pdf

利用浏览器打印原理,利用浏览器功能导出pdf,可以使用 vue-print-nb

2.5 采用html2Canvas 导出pdf

这里采用Canvas画布作为中介,把html转为图形,然后导出到pdf,经常的问题是pdf不够清晰,或者太大。

2.6 在线预览

推荐采用 kkfileview,开源代码,支持私有部署,其基本对标付费产品有【永中office】【office365】【idocv】,基本支持主流办公文档的在线预览,如doc,docx,Excel,pdf,txt,zip,rar,图片等等

微软的在线预览可以试试 https://view.officeapps.live.com/op/view.aspx?src= 是官网提供的方法

3、综合方案

经过大致调研,发现并没有十全十美的方案。这也是非常奇怪的地方,可见互联网这么多年的发展,并没有把精力放在传统的痛点上,而是各类技术零零散散。报表、打印、导出这些功能一旦和h5结合起来,仍然需要整合。

我大致理出一个方案,也不一定是最合适的方案: 利用前端vue-print直接打印,利用后台渲染技术输出pdf、word等。

3.1、后台渲染技术

  • node-echart,支持Echarts3.0,作者已经不升级了,下载下来代码,并不能进行很好的升级,因为Echarts去掉了对Canvas注入的支持
  • 无头浏览器 考虑体格比较庞大,暂时不被考虑
  • PhantomJs 安装很方便,作者宣布不再进行新功能开发,不过好像仍然在维护中,仅仅保持功能的稳定可用吧。
  • Echarts原生图片生成 利用js生成图片,传递到后端保存 这里的PhantomJs 和 Echarts原生图片生成都是比较好的解决方案。而node-echart的环境部署简直是大型灾难现场,结果也很尴尬。

4、未完待续

暂时记录到此。