报表工具有哪些打印技术?

在 C/S 时代,报表是由应用程序显示的,可以直接操控打印机来实现打印。进入到 B/S 时代后,报表呈现变成浏览器的事情了,而浏览器中的 JS 编程不能直接控制打印机,只能依靠浏览器本身的打印能力。这种方式下的问题很多,比如不能精确分页,浏览器一般是根据用户设置的页面大小和 web 页面的内容多少来自行决定分页位置,程序员很难控制;再比如不能准确对齐边边距及打印文字,无法实现发票套打等功能。

浏览器为弥补这些能力,提供了 ActiveX 控件,这相当于把原来的 C/S 前端程序搬进了浏览器,这样就可以解决打印精确度和分页可控性等问题。但是 ActiveX 有很严重的安全问题:只要电脑的用户可以完成的任务,它都可以完成,比如它可以存取注册表、可以随意访问本地文件系统等。这一点严重违背了浏览器的原则,所以后来逐渐被禁用了。

很多报表工具是 Java 写成的,而 ActiveX 技术常常和 Java 并不相容。为了更好的兼容 Java,浏览器也提供了 Java Applet 来嵌入 Java 程序,可以把 Applet 理解为用 Java 编写的 ActiveX。这样也就可以在浏览器端利用 Java 的能力实现打印了,也就是 Applet 打印。Applet 打印对于精确度和分页的处理几乎做到了完美,而且打印速度也比较快:

imagepng

但是,Applet 打印也有不足之处,主要体现在两方面:一个是 Applet 方式本身的配置要求严格,一个是 Java 和浏览器的升级引起的一系列问题。Applet 要求客户端至少安装了 jre,这点操作对人员要求有点高了。虽然 Applet 比 ActiveX 的安全性要好一点,但仍有安全问题。近年来浏览器都强化了安全性,对 Java Applet 也进行了限制,要求进行数字签名,所以 Java7 以上版本打印时容易弹出以下对话框,添加了用户操作:

imagepng

谷歌浏览器干脆从 42 版本开始禁用了 Java 插件,火狐浏览器也随后禁用了 Java 插件,目前就只有 IE 内核的浏览器支持,虽然现在适用面很窄了,但也有一些用户仍然选择使用该方式。

Flash 是浏览器中一直可以使用且安装率很高的通用插件,它有较强的图形呈现等能力,而且可以编程,于是被想到用来实现打印。Flash 打印方式的出现解决了打印操作复杂度高、浏览器资源占用多的问题。它的实现原理是:客户端点击打印后会触发 Flash Player 插件(插件几乎浏览器都自带,一般不会给终端带来安装的麻烦,而且浏览器资源占用少),Flash 会按照传递过来的内容再画到自己的面板中,然后传到打印机打印,总体来看打印速度也挺快的。Flash 打印也属于精确打印,矢量打印模式下内容不失真。

imagepng

现在虽然用 Flash 打印的比较多,但是 Flash 打印有个无法解决的弊端,就是它自身的安全沙箱机制,这个机制不允许传递纸张信息,那么就会造成一个问题:客户在打印前需要手动调整纸张。

PDF 打印也是替代 applet 打印的一种常用打印方式,它的实现的原理是是从服务器端下载一个 PDF 文件流,然后调用 Adobe Reader,从而利用 Adobe 实现打印功能。也因此要给浏览器安装对应插件,不过一般情况下系统安装 Adobe Reader 后会自动给 浏览器安装对应插件。

PDF 打印是 Adobe Reader 打印的,前端并没有自编的代码了,好处是彻底没有安全性问题了,不用担心服务器端的恶意代码攻击本地电脑,但缺点是无法进行复杂的逻辑控制,比如无法在打印界面进行打印缩放、清除图层、镜像打印、分栏等设置。

小结 1

每种打印方式都有它各自的优势和不足,一个好的报表工具,除了 ActiveX 外,应当同时支持其他几种打印方式,以便于让用户在不同需求场景下自由选择使用。

以上技术解决了精确打印的问题,而报表打印还有些其他常见的特殊需求:

静默打印

静默打印是指点击打印时不弹出选项窗口和打印机设置窗口,直接把报表结果输出到打印机。报表工具应提供静默打印前台实现方式。

例如提供前台 js 方法:

Applet 直接打印:directPrintReport(‘report1’)

Flash 直接打印:directFlashPrintReport(‘report1’)

Pdf 直接打印:directPdfPrintReport(‘report1’)

套打

套打是基于一个模板文件,把数据打印到指定位置的一种打印方式,这种打印需求实现的难点在于如何对内容进行精准定位,以及多页打印下的处理。类 excel 或者 excel 报表工具可以方便制作模板文件:

imagepng

分页处理应该由报表工具自行处理,不需要用户额外添加相关代码,强制分页机制要健全且易操作:

imagepng

批量打印

批量打印是指点击一次打印按钮就可以实现多张报表的打印输出。报表工具应该本身提供批量打印功能,且支持的打印方式越多越好。使用方式也要尽可能的简单易用,例如通过 URL 直接拼不同报表参数实现 pdf 批量打印:http://localhost:6868/demo/reportJsp/pdfBatchPrint.jsp?report={t1.rpx}{t2.rpx(arg1=1;arg2=2)} 由 URL 可以看出可以支持拼接不同带参数的报表文件,这一点也是需要批量打印支持的,另外,报表工具提供的批量打印还需要支持缩放打印、横纵向混合打印。

小结 2

静默打印、套打、批量打印一般也是报表工具自有的功能,只是可能提供的实现方案不一样。当然,报表工具提供的实现操作配置越简单越好。

扩展阅读:
浅谈报表工具的打印方案
如何实现报表直接打印需求
如何实现报表的批量打印需求
报表工具实现单据套打

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个指南让你熟悉报表设计器和了解报表设计的基本概念(各种区域,数据源,二次表,等等)。指南将帮助你开始用FastReport创建报表,但它不能告诉你怎样使用其它基本的报表设计器。 如果你不熟悉报表设计器,我们建议你参考QuickReport的帮助系统。QuickReport的指南已经包含在你的Delphi拷贝中。QuickReport的大部分基本概念也适用于FastReport,然而,FastReport能提供更多的弹性和最终用户的自定义。 关于FastReport的说明 FastReport是高弹性的报表设计器,用于报表的数据可以从任何类型的数据源获取,包含字符列表,BDE数据库,ADO数据源(不使用BDE),Interbase(使用IBO),Pascal数组和记录,以及一些不常用的数据源。 整个FastReport系统是用Delphi的Pascal编写的。FastReport不需要动态链接库,但需在你的项目中占用大约400kb(Delphi 5)。如果你想最终用户拥有设计能力,这将在你的.EXE中增加大约500kb。虽然这看上去比较大,但这只是其它设计的几分之一。你同样应该考虑到FastReport不仅仅只是包含最终用户更改报表设计的能力,还能够适应查询和数据库的变化。FastReport还包含自己的脚本语言,让应用程序和最终用户能够更容易地改变报表。如果你的大部分应用使用FastReport,你可以简单地配置FastReport BPL(大约1400kb)而所有你的应用程序只需要保留很少的一部分。 你可以发现FastReport有一个非常吸引人的用户界面,使用最新的用户界面组件,例如可停靠的工具栏。你的最终用户将会非常愿意使用这个设计器,只需使用鼠标就可以创建大多数报表。 FastReport是名副其实的快速报表:较其它一些Delphi报表设计器而言,你可以发现没有什么可以接近于它的开发速度。报表预览窗口一直是大多数报表设计器的弱点,高品质的外观,赋于你的应用程序非常专业的用户界面。 FastReport是一个已经拥有三年历史的非常成熟的报表设计器,成长使它拥有其它Delphi报表设计器所不能相比的诸多先进特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值