大清单报表的打印?

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

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



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

但这个做法仍然比较麻烦,特别是现代浏览器加强了安全控制,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万块硬盘。

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

原文地址:http://blog.51cto.com/12749034/2124966

时间: 2024-10-04 18:32:16

大清单报表的打印?的相关文章

大清单报表应当怎么做?

在数据查询时,有时会碰到数据量很大的清单报表.用户输入的查询条件很宽泛,可能会从数据库中查出几百上千万行甚至过亿的记录.如果等着把这些记录全部检索出来再生成报表呈现,那需要很长时间,用户体验恶劣:而且报表一般采用内存运算机制,大多数情况下也装不下这么多数据.所以,我们一般都是使用分页呈现的方式,尽量快速地呈现出第一页,然后可以随意翻页显示,每次只显示一页,也不会造成内存溢出. 那么,一般的报表工具或BI系统都是怎么实现这一机制的呢? 绝大多数产品都是使用数据库分页的方法来做的. 具体来讲,就是利

ASP环境下轻松实现报表的打印 (转)

作者:zcg2000 一.前言 ASP在电子商务上应用广泛,报表的处理又有一些麻烦.本文介绍了在ASP中利用 本人写的Report Server Page脚本解释器实现报表的显示.打印. 二.准备工作 (1)安装Visual Reprort Design软件 Visual Report Design是本人写的一个免费的报表设计器,程序的发行只需要 安装一个60K的控件即可. 想要的网友可以到http://go.163.com/reportpro/下载 (2)设计报表 通过Visual Repor

吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享

很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很多人觉得在线设计报表这个功能比较不错,但是很多人也会有疑问.这边文章就简单讲解一下如何开发这个功能的,供大家学习参考,如果有任何疑问可以直接联系我,当然也有很多不足之处希望大家多多谅解和指点. 一. 各种需求报表以及打印 最开始之初在Web上做打印是每个打印也都会做一个页面,利用的是浏览器自身带的打

php部分:网页中报表的打印

网页中报表的打印,是通过调用window对象中的print()方法实现打印功能的: 调用浏览器本身的打印功能实现打印 <a href="#" onclick="window.print()">打印</a> 主要页面代码:查询nation表 <body> <table border="1" cellspacing="0" cellpadding="0"> <

关于Web报表FineReport打印的开发应用案例

报表打印是报表使用和开发过程中经常碰到的问题,这里汇总了关于Web报表开发打印功能的一些典型应用案例,以应用最广泛的FineReport为例. 案例一:java直接调用报表打印 当java后台定义定时打印的功能,同时又需要直接调用报表的打印的时候,由于打印机型号和纸张不同,需要指定打印机,从而打印是否成功并设置返回值.那么怎么样可以实现这一过程呢? 实现过程 1.定义报表运行环境 // 定义报表运行环境,才能执行报表            String envPath = "D:\\FineRe

大数据集报表点击表头排序

在润乾官方在线 demo的 "交互报表" 中,有介绍 "点击表头排序" 的报表案例,该报表针对普通统计类报表.对于使用大数据集的报表,当按照此方式改造时发现排序没起作用或仅对第一页或前几页排序,后面的都没成功. 要想了解啥原因导致?就需要分析该报表的做法及知道大数据集的取数原理. 首先,来分析下在线 demo“点击报表排序”的做法. 润乾报表中实现排序的方式有两种: 1. 借助数据集 sql,即 order by … 2. 数据集函数 如ds.select() 都有

葡萄城报表之分栏报表-物品清单报表实现

提起分栏报表,它的数据组织形式就如同小时候使用的数学作业本一样,将数据分为多栏显示,当然写作业时有的人习惯横向写,有的人则喜欢竖着写完,在写另一栏.所有的电子技术都是采用隐喻的手法,从物理世界而来,分栏报表也是源于生活,分栏报表也可以行分栏(竖向分栏)和列分栏(横向分栏). 分栏数可以分为两栏或多栏. 行分栏数据流从上往下的方向显示数据,超过固定的行数就另起一栏显示,列分栏的数据的流向是从左往右,超过固定的列数就另起一栏显示.在商业报表系统中常见的分栏报表有商品标签.员工工卡.条码打印等.由此可

分栏报表-物品清单报表实现

提起分栏报表,它的数据组织形式就如同小时候使用的数学作业本一样,将数据分为多栏显示,当然写作业时有的人习惯横向写,有的人则喜欢竖着写完,在写另一栏.所有的电子技术都是采用隐喻的手法,从物理世界而来,分栏报表也是源于生活,分栏报表也可以行分栏(竖向分栏)和列分栏(横向分栏).分栏数可以分为两栏或多栏.行分栏数据流从上往下的方向显示数据,超过固定的行数就另起一栏显示,列分栏的数据的流向是从左往右,超过固定的列数就另起一栏显示. 在商业报表系统中常见的分栏报表有商品标签.员工工卡.条码打印等.由此可见

报表与打印学习总目录

以前写了一些关于报表的和打印类的文章,包括一些转载的,这里做下总结 一.RDLC系列 RDLC系列之一 简介和入门 RDLC系列之二 子报表 RDLC系列之三 图片显示 RDLC系列之四 常见错误 RDLC系列之五 初试XAML RDLC系列之六 打印纸张的大小(未解决) RDLC系列之七 条码打印 RDLC直接打印帮助类 RDLC使用手册_RDLC报表部署 RDLC报表系列--------行分组报表 ReportViewer (RDLC) 中的换行符是什么 Visual Studio 2005