一种web报表浏览器中直接打印的方法

文档序号:8395687阅读:1714来源:国知局
一种web报表浏览器中直接打印的方法
【技术领域】
[0001]本发明属于印刷打印领域,尤其涉及一种WEB报表浏览器中直接打印的方法。
【背景技术】
[0002]企业信息系统常用架构分为C/S(客户机/服务器)架构及B/S(浏览器/服务器)架构。在B/S架构中,由于终端用户使用浏览器访问信息系统,无需安装和维护客户端软件,因此逐步成为了企业信息系统的首选架构。
[0003]当前,WEB报表打印方案有多种,各有其特点及不足。
[0004]使用浏览器的菜单打印功能直接打印。这是最简单的WEB报表打印方案,只需点击页面上的打印菜单,无需编写代码。但这种方案问题很多,难以满足用户需求。比如:不能精确分页,有出现打出半行字的风险,页眉页脚也需要从菜单中区设置等。
[0005]调用Window, print O打印。这种方案是在浏览器页面中使用脚本编程调用浏览器的打印功能以打印浏览器窗口或子窗口中的内容,其本质与点击打印功能菜单相同,不能精确分页,难以设置页眉页脚,优点是可以在页面上提供打印按钮,用户无需点击菜单。
[0006]导出到EXCEL或PDF文件的打印。这种报表打印方案比较常见,易于实现。其过程是:当用户在WEB页面上点击打印按钮时,浏览器向服务器发送打印当前报表请求;服务器检索数据、获取报表格式,然后将要打印的内容输出到EXCEL文件或PDF文件中;服务器处理完毕将EXCEL或PDF的文件链接发给浏览器供用户下载打印。这种方式的优点是能实现精确的打印,但需要客户端安装EXCEL或PDF软件,操作较麻烦,此外,服务器要完成创建报表的大部分工作,对服务器的压力较大。
[0007]ActiveX控件打印。这种方案是编写一个C/S的打印控件,然后嵌入到网页里,将要打印的数据装入到控件中,然后打印。这种方案的优点是打印精度高,分页、设置打印参数等都恩能够实现。但缺点也很明显,嵌入的ActiveX控件破坏了 web应用的整体html风格,且这样的控件通常都比较大,一般都超过1M,下载费时。
[0008]Applet方式打印。Applet是运行在浏览器上的JAVA小应用程序,Applet的成本巨大,使用这种方式打印,分页或精确打印都可以实现,但其存在如下缺点:1)安装Applet成本很高,需要下载十几M的文件(包括Applet及其运行支持环境JRE)并安装。2)打印报表时,需要重新向服务器检索报表数据,效率低。因为浏览器中展示报表时使用HTML方式,打印室,Applet不会使用当前html页面中的报表数据,需要从服务器下载数据到Applet来打印。
[0009]综上所述,当前WEB报表打印方案存在如下不足:
[0010]I)使用浏览器自带打印功能难以实现精确分页及页眉页脚设置。
[0011]2)非浏览器打印方式代价较大,效率偏低。

【发明内容】

[0012]为解决上述问题本发明提供了一种WEB报表浏览器中直接打印的方法。本发明借助于浏览器脚本编程技术及浏览器的打印功能,提供了一种能实现精确分页及页眉页脚设置的高效的浏览器直接打印方案。
[0013]本发明提供的技术方案是:一种WEB报表浏览器中直接打印的方法,包括如下步骤:
[0014]步骤一):设计报表:在类EXCEL的报表设计器中设置报表的查询语句、标题区、表头区、数据区、表尾区、页眉页脚及页面尺寸及页边距;
[0015]步骤二)保存打印格式:在报表模板中设计内容节点保存报表在WEB浏览器上用于展示打印的格式;
[0016]步骤三)报表数据浏览:在浏览器端发出浏览报表请求,从服务器获取报表数据记录集合,保存到浏览器脚本数组对象中,并在页面上显示;
[0017]步骤四)调用报表打印页面:在浏览器中查看报表数据并单击打印按钮后,在当前页面的底部内联帧中加载报表打印页面以生成打印内容;
[0018]步骤五)获取报表打印格式:在内联帧的页面中从服务器获取当前报表的报表模板文件,包括如下过程:
[0019]I)获取内联帧父窗口中当前报表的ID ;
[0020]2)用报表ID从服务器获取报表模板文件;
[0021]步骤六)初始化打印区:从报表模板文件中提取打印区定义,并创建打印区对象,包括如下过程:
[0022]I )解析报表模板文件,提取其中的打印区集合;
[0023]II )对打印区集合的每个打印区,用一个对象表示,称为打印区对象,
[0024]对象属性包括:打印区名,宽度,高度及内容文本;
[0025]步骤七)创建报表页面框架:创建报表打印时每一页的内容结构框架;
[0026]步骤八)创建报表首页:根据报表页面框架创建报表的第一页,若整个报表只有一页,则报表首页包含报表表尾;
[0027]步骤九)创建报表续页:创建报表续页,所述报表续页不包括表头,可包含表尾;
[0028]步骤十)打印报表。
[0029]进一步的改进,所述步骤二 )包含如下步骤:
[0030]I)在报表模板中创建打印区集合节点,所述集合节点中包含所有将打印出来的报表区域的描述;
[0031]2)计算所有打印区的共同宽度,处理方式如下:
[0032]a.在报表设计器表格界面上找出所有被使用的列中最左的列;
[0033]b.在设计器表格界面上找出所有被使用的列中最右的列;
[0034]c.将最左的列、最右的列及最左的列和最右的列其之间的所有列的宽度相加,即得到总宽度。
[0035]3)创建表头区、表尾区、页眉区、页脚区的节点,四个区都被处理为独立的HTML表格,四个打印区的共同处理方法如下:
[0036]d.确定打印区的行区域与列区域,打印区的行由设计器界面上打印区标志确定,而所占列为最左的列至最右的列间的所有列;
[0037]e.根据打印区的行与列区域,生成对应的HTML格式的表格描述,描述信息包括表格的宽度、高度以及每个单元格的属性与文本内容;
[0038]f.创建打印区节点,并设置高度、宽度及名字等属性,其中打印区的名字标志打印区节点是何种打印区;
[0039]g.将表格描述设置为打印区节点的内容文本;
[0040]h将打印区节点作为子节点添加到打印区集合节点。
[0041]4)创建标题区、数据区节点:标题区与数据区两个打印区的处理方法如下:
[0042]1.确定打印区所在行区域及列区域;
[0043]g.根据打印区的行区域与列区域,生成对应的HTML格式的行描述;
[0044]k.创建打印区节点,并设置其高度、宽度及名字等属性,其中打印区的名字标志其是何种打印区;
[0045]1.将行描述设置为打印区节点的内容文本;
[0046]m.将打印区节点作为子节点添加到打印区集合节点、。
[0047]进一步的改进,步骤七)所述的内容结构框架页边距设置为6毫米,内容结构框架扣边距的部分为主内容区,所述主内容区宽度等于内容结构框架宽度减去12毫米,高度等于内容结构框架高度减去12毫米,设置主内容区最左上侧单元格的高度和宽度可以调节报表打印时的实际页面上边距和左边距,设置最下侧单元格的高度可调节实际页面下边距,最右空列的宽度可调节实际页面的右边距。
[0048]进一步的改进,所述步骤八)包含如下步骤:
[0049]8-4、设置报表总页数s = l;
[0050]8-5、在浏览器页面上添加一个主内容区;
[0051]8-3、页边距设置:根据报表模板文件中的页边距设置及报表页面框架的定义,调节主内容区中最左上侧单元格及最下侧单元格和最右侧单元格的尺寸使主内容区边距等于报表模板中的页边距;
[0052]8-6、设置页眉、页脚及表头:从打印区对象集合中获取页眉、页脚及报表表头的html形式表格描述文本,解析其中的函数,用函数的实际值替换其出现;
[0053]8-5、计算纸张剩余可用高度:用主内容区的高度减去实际上下页边距及报表表头区的高度,得到纸张剩余可用高度;
[0054]8-9、创建主内容区表格:在主内容区添加一个空的html表格,所述空的html表格的高度设置为纸张剩余可用高度;
[0055]8-10、添加标题区:从打印区对象集合中获取标题区的html表格行描述文本,添加到主内容区表格中,更新纸张剩余可用高度;
[0056]8-8、添加数据行:从打印区对象集合中获取数据区的html表格行描述文本DataTr及数据区的高度Hr。当报表数据数组对象中存在未使用数据记录且数据区的高度Hr <纸张剩余可用高度时H,反复执行如下步骤:
[0057]A.取得下一条数据记录;
[0058]B.用数据记录里的实际数据值替换数据区的html表格行描述文本中的字段名或函数或表达式;
[0059]C.追加处理后的数据行到空的html表格的末尾;
[0060]D.纸张剩余可用高度H =纸张剩余可用高度H-数据区的高度Hr ;
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1