大清单报表的打印?

简介:

sjjt-211

我们谈了大清单报表的呈现方法,其实有时候这些报表还需要打印,比如银行打印流水对账单。

那么,打印是不是也要像呈现那样做一个缓存机制呢?


没有这个必要。打印和浏览不同,一般是从头到尾过一遍就行了,过程中没有翻页的需求。这样,只要流式读入数据逐步生成打印页就可以了,不会发生内存溢出的问题。

但这个做法仍然比较麻烦,特别是现代浏览器加强了安全控制,applet等插件经常被禁用,打印功能常常不能直接由报表工具提供,而要采用flash或PDF方式来实现。用flash可以做到流式读取,但并不简单,还会导致插件与后台耦合性过高,影响安全性;而PDF方式就是一次性生成一个文档,没办法实现这种机制了。


我们来算算打印100万行记录是什么情况。

假设一页纸能打印50行记录(这已经算多了),100万行记录就意味着2万页纸。2万页的连续打印,有多少打印机能做到这个指标?你的用户真有这样的设备吗?2万页纸大概有2米厚,什么打印机能把这些纸放进去?商用快速打印机一分钟也就30几页,就按50页/分钟算,2万页也需要7个钟头!作为一个机械设备能连续工作这么久是不容易的。

而100万行记录需要占多大内存呢?一条记录算1K已经很大(毕竟一页要打印50行的),100万行也就1G内存。这对于前端用于打印的普通PC来讲并不难满足。

这还是只算了100万记录的情况,如果把100万增加到500万,内存仍然可以承受,而打印机是万万吃不消了。也就是说,在现代计算机的内存容量下,打印这个功能采用全内存方式是没有问题的,几乎找不到需要流式读取的情况。作为一个要重复销售的商业软件,报表工具没必要去支撑这种极为罕见甚至根本不存在的应用场景。


这个计算结果,看起来有点荒唐,读者可能会觉得可笑。但这确实是和用户沟通需求时真实发生过的事情,实际上喊的记录行数比500万要大很多,而用户并没有认真计算过它意味着什么。经过一些常规计算我们就会发现,虽然有些用户在叫,大清单报表的打印其实是个伪需求。

大数据领域还有些类似的事,比如说10T数据想要3秒返回结果,用户却不会想到这很可能意味着1万块硬盘。

严谨认真一点,会推出许多想不到的有趣结论 :)。

 

相关文章
|
2月前
|
存储 SQL
物料清单应用输入模板的SQL存储过程设计
物料清单应用输入模板的SQL存储过程设计
|
Java API
QLExpress功能清单
QLExpress从一开始就是从复杂的阿里电商业务系统出发,并且不断完善的脚本语言解析引擎框架,在不追求java语法的完整性的前提下(比如异常处理,foreach循环,lambda表达式,这些都是groovy是强项),定制了很多普遍存在的业务需求解决方案(比如变量解析,spring打通,函数封装,操作符定制,宏替换),同时在高性能、高并发、线程安全等方面也下足了功夫,久经考验。
19763 1
|
运维 小程序 前端开发
基于小程序云开开发(统计学生信息并导出excel)1.0版本
基于小程序云开开发(统计学生信息并导出excel)1.0版本
96 0
基于小程序云开开发(统计学生信息并导出excel)1.0版本
|
存储 缓存 运维
DO447管理清单--管理清单变量
DO447管理清单--管理清单变量
184 0
DO447管理清单--管理清单变量
|
数据库
用条码标签打印软件批量打印物料标签
物料标签是粘贴在物料上的标识卡,每个公司都会对内部每一件物料粘贴物料标签,它们的内容详细地说明了物料的名称、型号、数量、生产日期等重要的信息。所以公司的物料管理部门经常需要批量打印大量的物料标签。那么如何才能批量打印物料标签呢?今天就分享一下怎么用条码标签打印软件批量打印物料标签。
2170 0
|
XML BI 数据格式
将RDL报表转换成RDLC报表的函数
原文:将RDL报表转换成RDLC报表的函数 近日研究RDLC报表,发现其不能与RDL报表兼容,尤其是将RDL报表转换成RDLC报表。
878 0
|
BI
在不预览的情况下打印本地报表
链接地址: https://msdn.microsoft.com/zh-cn/library/ms252091.aspx
763 0