集智平台完备的打印参数设置
1. 问题概述
 几乎所有的应用都有报表展现与输出" target="_blank" class="geeznLink10">打印功能,有打印功能就会有打印参数的设置需求。常见的打印参数设置有:页边距设置(左边距、右边距、上边距、下边距)、纸张方向设置(纵向或横向)、纸张类型设置、纸张大小设置……
 高级一些的打印参数设置有:设置首页页号、设置要打印的连续页号、设置打印份数、设置要打印页的类型(打印所有页、打印偶数页、打印奇数页)、设置打印缩放比例……
 还有一些我们很难想到的打印参数设置:比如要打印的报表包含许多页,后一页报表中包含对前面页中数据的汇总,在打印的过程中用户忽然发现某一页报表中的数据填错了,这一页报表的错误会影响到后面的报表页,这时用户需要马上停止后面报表的打印,以减少纸张的浪费,这种终止正在进行的打印任务的设置只有当我们遇到时才会想到,正常情况下是很难想到的。此外还有许多我们想不到的打印参数设置。
 一般的产品能够满足常见的打印参数设置需求。高级点的产品能部分满足高级一些的打印参数设置需求,比如我们最常用的word可以设置要打印的页号,设置要打印的连续页号、设置打印份数、按纸张大小进行缩放等等。而那些很难想到的打印参数设置几乎没有产品能够满足,比如终止正在进行的打印任务,word、excel都不支持。
 面临困难
 软件产品实现几种打印参数设置并不难,难就难在把所有的打印参数设置需求都考虑周全了。目前没有任何一家产品能够满足所有的打印参数设置需求,可这些需求又确实存在,那么该如何处理呢?有两种方案可以解决这个问题:
 第一方案:用户编程来实现打印参数的设置。
 如果要用户编程来实现打印参数的设置,那么对用户的编程能力要求非常高,硬件、软件都得熟练掌握。比如:必须熟练掌握软件编程语言、打印机的工作原理、操作系统编程、线程、打印队列、堆栈等等,而一般的用户很难达到这个高度。
 第二方案:使用产品生产商提供的接口进行二次开发。
 如果使用产品生产商提供的接口进行二次开发来实现打印参数的设置,对用户的编程能力要求大大降低了,可是大多数的产品生产商不能提供充分的接口来满足用户对打印参数设置的需求。
 两种解决方案都存在问题,难道面对用户的打印参数设置需求就没有完美的解决办法吗?当然不是,润乾的产品一贯以用户的需求为出发点,它提供了完备的打印参数设置来满足用户的各种打印需求。
 2. 原理功能说明
 润乾完备的打印参数设置
 润乾提供的完备的打印参数设置是通过向用户提供API进行二次开发来实现的,润乾提供的API是经过积累了众多用户的打印参数设置需求和长久的实践、探索开发出来的。像终止正在打印的报表这样的打印设置需求润乾给出了极好的支持,用户只需调用API中的方法就可轻松的实现。
 PrintFrame和PrintSetup是润乾提供的两个主要的打印参数设置类。
 PrintFrame报表打印对话框类,本类为用户提供了一系列的方法,通过这些方法可以指定打印页、指定打印页范围、设置报表分栏数、设置打印纸张的页面设置、设置报表的横向居中方式、设置要打印页的类型、调整页面的页边距、细化打印比例、设置当前定义打印范围内的首页、设置当前定义范围内的末页、设置当前定义范围内的前页、设置当前定义范围内的后页、调整打印显示比例、终止正在进行的打印任务……
 PrintSetup打印设置类,本类用于设置和获取报表的打印配置信息。如设置是否打印背景图、设置页边距、设置纸张方向、取分栏数、取标题横向分页时的打印方式……
 3. 部分程序说明
 用户只需以下两步就可轻松实现随心所欲的打印报表。
 第一步:计算报表
 PrintSetup ps = new PrintSetup(); //打印设置
 ps.setLeftMargin(left); //设置左边距,left为上图中输入的左边距的值
 ps.setTopMargin(top); //设置顶距,top为上图中输入的顶距值
 ps.setBottomMargin(last); //设置底边距,last为上图中输入的底距值
 ReportDefine rd = (ReportDefine) ReportUtils.read(reportFile); //reportFile为要计算的报表文件
 rd.setPrintSetup(ps); //把页边距设置到报表中
 ……
 Engine engine = new Engine(rd, cxt);
 IReport iReport = engine.calc(); //计算报表
 第二步:利用PrintFrame类提供的方法设置自定义打印参数
 (1) 定义一个报表打印对话框类对象
 PrintFrame pf=new PrintFrame(iReport,null); //iReport为第一步中计算的报表
 (2) 设置报表的分栏数
 pf.setColumns(2); //设置报表的分栏数为:2
 (3) 设置要打印的页号,可以多次调以设置多个页
 pf.setPrintablePages(1); //设置要打印的页号为:1
 (4) 设置要打印的连续页号,包括起始和终止页号
 pf.setPrintablePages(2,6); //设置要打印的连续页号为:2到6
 (5) 设置横向对齐方式,“PrintSetup.HALIGN_CENTER”表示居中;“PrintSetup.HALIGN_LEFT”表示居左;“PrintSetup.HALIGN_RIGHT”表示居右
 pf.setHorizontalAlign(PrintSetup.HALIGN_CENTER); //设置横向对齐方式为:居中
 (6) 设置打印纸张的页面设置
 PageFormat pageFormat=new PageFormat(); //定义描述打印页面方向和大小的对象
 Paper paper=new Paper(); //定义一个新纸张对象
 paper.setSize(684,792); //设置纸张的大小
 paper.setImageableArea(100,100,594,702) ; //设置打印区域的大小
 pageFormat.setPaper(paper); //为PageFormat对象设置Paper对象。
 pf.setPrintPageFormat(pageFormat); //设置打印纸张的页面设置
 (7) 设置打印时对报表的缩放比例,该比例为百分数,例如100为原值大小。
 pf.setPrintZoomScale(80); //设置打印缩放比例80%
 (8) 设置预览报表时对报表的缩放比例,修改该比例仅影响显示,跟实际打印输出没有关系,该比例为百分数,例如100为原值大小。
 pf.setDisplayScale(100); //设置报表的显示比例100%
 (9) 在当前的页面定义范围内设置要显示的页面,页号从1开始
 pf.goToPage(1); //设置要显示的页号为:1
 (10)设置当前定义范围内的首页
 pf.goToFirstPage(1); //设置当前定义范围内的首页为:1
 (11)设置当前定义范围内的末页
 pf.goToLastPage(6); //设置当前定义范围内的末页为:6
 (12)设置当前定义范围内的前页
 pf.goToPreviousPage(5); //设置当前定义范围内的前页为:5
 (13)设置当前定义范围内的后页
 pf.goToNextPage(6); //设置当前定义范围内的后页为:6
 (14)获取显示报表的面板
 pf.getReportPane(); //获取显示报表的面
 (15)获取当前的打印任务对象,可以自己取消或者获取对象里面的任何有意义的信息。注意:只有调用了类似于Print的方法之后,该对象才不为null
 pf.getPrinterJob();
 (16)直接在后台打印报表,不显示打印窗口,不选择打印机
 pf.backgroundPrinting();
 ……
 5. 总结
 从以上介绍可以看出,润乾提供了完备的打印参数设置,用户只需调用润乾的API就可轻松的实现各种打印参数的设置。
 具体可详见API应用开发教程打印设置等章节