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

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

Info

Publication number
CN104714766A
CN104714766A CN201510107601.7A CN201510107601A CN104714766A CN 104714766 A CN104714766 A CN 104714766A CN 201510107601 A CN201510107601 A CN 201510107601A CN 104714766 A CN104714766 A CN 104714766A
Authority
CN
China
Prior art keywords
report
page
print zone
height
print
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510107601.7A
Other languages
English (en)
Other versions
CN104714766B (zh
Inventor
聂作先
蒋新华
聂明星
邵明
李光洋
朱悦涵
王平阳
张顺淼
杨海燕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujian University of Technology
Original Assignee
Fujian University of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujian University of Technology filed Critical Fujian University of Technology
Priority to CN201510107601.7A priority Critical patent/CN104714766B/zh
Publication of CN104714766A publication Critical patent/CN104714766A/zh
Application granted granted Critical
Publication of CN104714766B publication Critical patent/CN104714766B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种WEB报表浏览器中直接打印的实现方法,包括如下步骤:步骤一):设计报表;步骤二)保存打印格式;步骤三)报表数据浏览;步骤四)调用报表打印页面;步骤五)获取报表打印格式;步骤六)初始化打印区;步骤七)创建报表页面框架;步骤八)创建报表首页;步骤九)创建报表续页;步骤十)打印报表。本发明能实现报表页眉页脚的复杂设置及精确分页打印,大大降低服务器的压力,无需额外安装软件组件,效率较高。

Description

一种WEB报表浏览器中直接打印的方法
技术领域
本发明属于印刷打印领域,尤其涉及一种WEB报表浏览器中直接打印的方法。
背景技术
企业信息系统常用架构分为C/S(客户机/服务器)架构及B/S(浏览器/服务器)架构。在B/S架构中,由于终端用户使用浏览器访问信息系统,无需安装和维护客户端软件,因此逐步成为了企业信息系统的首选架构。
当前,WEB报表打印方案有多种,各有其特点及不足。
使用浏览器的菜单打印功能直接打印。这是最简单的WEB报表打印方案,只需点击页面上的打印菜单,无需编写代码。但这种方案问题很多,难以满足用户需求。比如:不能精确分页,有出现打出半行字的风险,页眉页脚也需要从菜单中区设置等。
调用Window.print()打印。这种方案是在浏览器页面中使用脚本编程调用浏览器的打印功能以打印浏览器窗口或子窗口中的内容,其本质与点击打印功能菜单相同,不能精确分页,难以设置页眉页脚,优点是可以在页面上提供打印按钮,用户无需点击菜单。
导出到EXCEL或PDF文件的打印。这种报表打印方案比较常见,易于实现。其过程是:当用户在WEB页面上点击打印按钮时,浏览器向服务器发送打印当前报表请求;服务器检索数据、获取报表格式,然后将要打印的内容输出到EXCEL文件或PDF文件中;服务器处理完毕将EXCEL或PDF的文件链接发给浏览器供用户下载打印。这种方式的优点是能实现精确的打印,但需要客户端安装EXCEL或PDF软件,操作较麻烦,此外,服务器要完成创建报表的大部分工作,对服务器的压力较大。
ActiveX控件打印。这种方案是编写一个C/S的打印控件,然后嵌入到网页里,将要打印的数据装入到控件中,然后打印。这种方案的优点是打印精度高,分页、设置打印参数等都恩能够实现。但缺点也很明显,嵌入的ActiveX控件破坏了web应用的整体html风格,且这样的控件通常都比较大,一般都超过1M,下载费时。
Applet方式打印。Applet是运行在浏览器上的JAVA小应用程序,Applet的成本巨大,使用这种方式打印,分页或精确打印都可以实现,但其存在如下缺点:1)安装Applet成本很高,需要下载十几M的文件(包括Applet及其运行支持环境JRE)并安装。2)打印报表时,需要重新向服务器检索报表数据,效率低。因为浏览器中展示报表时使用HTML方式,打印室,Applet不会使用当前html页面中的报表数据,需要从服务器下载数据到Applet来打印。
综上所述,当前WEB报表打印方案存在如下不足:
1)使用浏览器自带打印功能难以实现精确分页及页眉页脚设置。
2)非浏览器打印方式代价较大,效率偏低。
发明内容
为解决上述问题本发明提供了一种WEB报表浏览器中直接打印的方法。本发明借助于浏览器脚本编程技术及浏览器的打印功能,提供了一种能实现精确分页及页眉页脚设置的高效的浏览器直接打印方案。
本发明提供的技术方案是:一种WEB报表浏览器中直接打印的方法,包括如下步骤:
步骤一):设计报表:在类EXCEL的报表设计器中设置报表的查询语句、标题区、表头区、数据区、表尾区、页眉页脚及页面尺寸及页边距;
步骤二)保存打印格式:在报表模板中设计内容节点保存报表在WEB浏览器上用于展示打印的格式;
步骤三)报表数据浏览:在浏览器端发出浏览报表请求,从服务器获取报表数据记录集合,保存到浏览器脚本数组对象中,并在页面上显示;
步骤四)调用报表打印页面:在浏览器中查看报表数据并单击打印按钮后,在当前页面的底部内联帧中加载报表打印页面以生成打印内容;
步骤五)获取报表打印格式:在内联帧的页面中从服务器获取当前报表的报表模板文件,包括如下过程:
1)获取内联帧父窗口中当前报表的ID;
2)用报表ID从服务器获取报表模板文件;
步骤六)初始化打印区:从报表模板文件中提取打印区定义,并创建打印区对象,包括如下过程:
Ⅰ)解析报表模板文件,提取其中的打印区集合;
Ⅱ)对打印区集合的每个打印区,用一个对象表示,称为打印区对象,
对象属性包括:打印区名,宽度,高度及内容文本;
步骤七)创建报表页面框架:创建报表打印时每一页的内容结构框架;
步骤八)创建报表首页:根据报表页面框架创建报表的第一页,若整个报表只有一页,则报表首页包含报表表尾;
步骤九)创建报表续页:创建报表续页,所述报表续页不包括表头,可包含表尾;
步骤十)打印报表。
进一步的改进,所述步骤二)包含如下步骤:
1)在报表模板中创建打印区集合节点,所述集合节点中包含所有将打印出来的报表区域的描述;
2)计算所有打印区的共同宽度,处理方式如下:
a.在报表设计器表格界面上找出所有被使用的列中最左的列;
b.在设计器表格界面上找出所有被使用的列中最右的列;
c.将最左的列、最右的列及最左的列和最右的列其之间的所有列的宽度相加,即得到总宽度。
3)创建表头区、表尾区、页眉区、页脚区的节点,四个区都被处理为独立的HTML表格,四个打印区的共同处理方法如下:
d.确定打印区的行区域与列区域,打印区的行由设计器界面上打印区标志确定,而所占列为最左的列至最右的列间的所有列;
e.根据打印区的行与列区域,生成对应的HTML格式的表格描述,描述信息包括表格的宽度、高度以及每个单元格的属性与文本内容;
f.创建打印区节点,并设置高度、宽度及名字等属性,其中打印区的名字标志打印区节点是何种打印区;
g.将表格描述设置为打印区节点的内容文本;
h将打印区节点作为子节点添加到打印区集合节点。
4)创建标题区、数据区节点:标题区与数据区两个打印区的处理方法如下:
i.确定打印区所在行区域及列区域;
g.根据打印区的行区域与列区域,生成对应的HTML格式的行描述;
k.创建打印区节点,并设置其高度、宽度及名字等属性,其中打印区的名字标志其是何种打印区;
l.将行描述设置为打印区节点的内容文本;
m.将打印区节点作为子节点添加到打印区集合节点、。
进一步的改进,步骤七)所述的内容结构框架页边距设置为6毫米,内容结构框架扣边距的部分为主内容区,所述主内容区宽度等于内容结构框架宽度减去12毫米,高度等于内容结构框架高度减去12毫米,设置主内容区最左上侧单元格的高度和宽度可以调节报表打印时的实际页面上边距和左边距,设置最下侧单元格的高度可调节实际页面下边距,最右空列的宽度可调节实际页面的右边距。
进一步的改进,所述步骤八)包含如下步骤:
8-4、设置报表总页数s=1;
8-5、在浏览器页面上添加一个主内容区;
8-3、页边距设置:根据报表模板文件中的页边距设置及报表页面框架的定义,调节主内容区中最左上侧单元格及最下侧单元格和最右侧单元格的尺寸使主内容区边距等于报表模板中的页边距;
8-6、设置页眉、页脚及表头:从打印区对象集合中获取页眉、页脚及报表表头的html形式表格描述文本,解析其中的函数,用函数的实际值替换其出现;
8-5、计算纸张剩余可用高度:用主内容区的高度减去实际上下页边距及报表表头区的高度,得到纸张剩余可用高度;
8-9、创建主内容区表格:在主内容区添加一个空的html表格,所述空的html表格的高度设置为纸张剩余可用高度;
8-10、添加标题区:从打印区对象集合中获取标题区的html表格行描述文本,添加到主内容区表格中,更新纸张剩余可用高度;
8-8、添加数据行:从打印区对象集合中获取数据区的html表格行描述文本DataTr及数据区的高度Hr。当报表数据数组对象中存在未使用数据记录且数据区的高度Hr≤纸张剩余可用高度时H,反复执行如下步骤:
A.取得下一条数据记录;
B.用数据记录里的实际数据值替换数据区的html表格行描述文本中的字段名或函数或表达式;
C.追加处理后的数据行到空的html表格的末尾;
D.纸张剩余可用高度H=纸张剩余可用高度H-数据区的高度Hr;
8-9、添加表尾:表尾区高度记为Hb。若报表数据的所有数据记录都已添加到空的html表格中且纸张剩余可用高度H≥表尾区高度Hb,则执行如下过程:
8-9-1.从打印区对象集合中获取报表表尾的html形式表格描述文本,若存在则解析其中的函数,用函数的实际值替换描述文本,将表尾的html形式表格描述文本填充到主内容区的“报表表尾区”单元格中;若不存在,则直接执行步骤2;
8-9-2.将页眉及页脚中出现的表示总页数的报表系统变量用1代替;
8-9-3.调用window.print()直接打印当前网页;
8-9-4.结束报表页面创建过程;
进一步的改进,所述步骤九)包含如下步骤:
9-1、设置报表总页数=报表总页数+1;
9-2、插入分页符:向当前网页的body中添加一个空的DIV元素,添加方式为:”class=’noprint’
page-break-before:always;height:1px;width:100px;",其中
“page-break-before:always”指定在此DIV前强制分页,
class="noprint"设置其不打印,在CSS中需设置如下:<stylemedia=print
type="text/css">.noprint{visibility:hidden}</style>;
9-3、在浏览器页面上添加一个主内容区;
9-4、页边距设置:根据报表模板文件中的页边距设置及报表页面框架的定义,调节主内容区中最左上侧单元格及最下侧单元格和最右侧单元格的尺寸使实际页边距等于报表模板中的页边距;
9-5、设置页眉、页脚:从打印区对象集合中获取页眉、页脚及报表表头的html形式表格描述文本,解析其中的函数,用函数的实际值替换表格描述文本,填充到主内容区的对应单元格中;
9-6、计算纸张剩余可用高度:用打印纸张的高度减去步骤9-4中的实际上下页边距及报表表头区的高度,得到纸张剩余可用高度H;
9-7、若报表数据数组对象中不存在未使用数据记录,则转到步骤9-11;
9-8、创建主内容区表格:在主内容区添加一个空的html主内容区表格;
9-9、添加标题区:从打印区对象集合中获取标题区的html表格行描述文本,添加到主内容区表格中,更新纸张剩余可用高度,H=H-标题区高度。
9-10、添加数据行。从打印区对象集合中获取数据区的html表格行描述文本及描述文本高度Hr;当报表数据数组对象中存在未使用数据记录且Hr≤H时,反复执行如下步骤:
9-10-1.取得下一条数据记录;
9-10-2.用数据记录里的实际数据值替换描述文本中的字段名或函数或表达式;
9-10-3.追加处理后的数据行到主内容区表格末尾;
9-10-4.H=H-Hr;
9-11、添加表尾:若报表数据的所有数据记录都已添加到主内容区表格中且有H≥表尾区高度Hb,则执行如下过程:
9-11-1.从打印区对象集合中获取报表表尾的html形式表格描述文本,若不存在,则直接执行步骤b),否则解析其中的函数,用函数的实际值替换表格描述文本,填充到主内容区表格的“报表表尾区”单元格中;
9-11-2.将页眉及页脚中出现的表示总页数的报表系统变量
$TOTALPAGES用报表总页数变量的值代替;
9-11-3.调用window.print()直接打印当前网页;
9-11-4.结束报表页面创建过程;
9-12、转步骤9-1继续创建下一页。
本发明具有如下优点:
1)相对于现有WEB直接打印方案,本发明能实现报表页眉页脚的复杂设置及精确分页打印。
2)相对于在服务器端创建EXCEL,pdf格式的报表后下载到浏览器端的处理方式,本方案能大大降低服务器的压力。
相对于在浏览器上下载并安装控件或Applet方式,本方案无需额外安装软件组件,效率较高。
附图说明
当结合附图考虑时,通过参照下面的详细描述,能够更完整更好地理解本发明以及容易得知其中许多伴随的优点,但此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定,其中:
图1WEB报表直接打印方案流程示意图;
图2保存报表打印区流程示意图;
图3报表页面内容框架示意图;
图4报表首页创建过程示意图;
图5报表续页创建过程。
具体实施方式
本发明结合实施例详细描述如下:
WEB报表直接打印方案步骤1所述之设计报表,指在类EXCEL的报表设计器中设置报表的查询语句、标题区、表头区、数据区、表尾区、页眉页脚及页面尺寸及页边距。
WEB报表直接打印方案步骤2之保存打印格式,指在报表模板中设计一些内容节点保存报表在WEB浏览器上用于展示及打印的格式。在类EXCEL的报表设计器中,标题区、表头区、数据区、表尾区、页眉页脚区等部分都直接出现在设计器的表格界面上,每个区称为一个打印区。保存打印格式时,检查这些打印区的设置,将其转换为HTML形式的表格后存储,每个区的HTML表格的高度由其在报表设计器中的高度决定,所有区的宽度都相同,其宽度等于所有区的共同宽度。打印区的高度和宽度单位都转换为毫米而非像素。为方便处理,所有打印区的格式都保存到一个打印区集合节点printAreas中。
步骤2的处理过程见附图2,具体描述如下:
1)在报表模板中创建打印区集合节点printAreas。此节点中包含所有将打印出来的报表区域的描述。
2)计算所有打印区的共同宽度Wm。本步骤的处理方式如下:1)在报表设计器表格界面上找出所有被使用的列中最左的列CL;2)在设计器表格界面上找出所有被使用的列中最右的列CR;3)将CL、CR及其之间的所有列的宽度相加,即得到Wm。
3)创建表头区、表尾区、页眉区、页脚区的节点。这四个区都被处理为独立的HTML表格,对这四个打印区的共同处理方法如下:1)确定打印区的行与列区域,打印区的行由设计器界面上打印区标志确定,而所占列为CL至CR间的所有列;2)根据打印区的行与列区域,生成对应的HTML风格的表格描述,记为TableStr,描述信息包括表格的宽度、高度以及每个单元格的风格与文本内容;3)创建打印区节点,并设置其高度、宽度及名字等属性,其中打印区的名字标志其是何种打印区;4)将TableStr设置为打印区节点的内容文本。5)将打印区节点作为子节点添加到打印区集合节点printAreas。
4)创建标题区、数据区节点。报表的标题区与数据区是报表内容的主体。标题区中的单元格的内容说明了对应的数据字段的含义,数据区单元格中放置的是用于获取数据的数据库字段或函数或表达式。标题区与数据区在报表设计器界面上均只占一行,它们是打印时报表数据表格的一行,因此,在保存到模板中,只将其作为HTML表格的行(TR)保存而非保存为表格。这两个打印区的处理方法如下:1)确定打印区所在行及列区域;2)根据打印区的行与列区域,生成对应的HTML风格的行(TR)描述,记为TrStr;3)创建打印区节点,并设置其高度、宽度及名字等属性,其中打印区的名字标志其是何种打印区(header或者data);4)将TrStr设置为打印区节点的内容文本。5)将打印区节点作为子节点添加到打印区集合节点printAreas。WEB报表直接打印方案步骤3之报表数据浏览,指在浏览器端发出浏览报表请求,从服务器获取报表数据记录集合,保存到浏览器脚本数组对象reportData中,并在页面上显示。
WEB报表直接打印方案步骤4之调用报表打印页面,指当用户在浏览器中查看报表数据并单击打印按钮后,在当前页面的底部内联帧中加载报表打印页面以生成打印内容,用于直接打印。具体做法是:在报表数据查看页面底部预先设置一个src属性(内联帧的URL)为空的内联帧(iframe),在报表浏览页面的打印按钮处理程序内将其src设置为报表打印页面的URL,则将从服务器获取该页面并执行打印页面的创建过程。报表打印页面的处理过程见步骤5至步骤9。
WEB报表直接打印方案步骤5之获取报表打印格式,指在内联帧的页面中从服务器获取当前报表的报表模板文件。包括如下过程:1)获取内联帧父窗口中当前报表的ID;2)用报表ID从服务器获取报表模板文件。
WEB报表直接打印方案步骤6之初始化打印区,指从报表模板文件中提取打印区定义,并创建打印区对象。包括如下过程:1)解析报表模板文件,提取其中的打印区集合printAreas;2)对其中的每个打印区,用一个对象表示,称为打印区对象,对象属性包括:打印区名,宽度,高度及内容文本。
WEB报表直接打印方案步骤7之创建报表页面框架,指创建报表打印时每一页的内容结构框架。报表的每一页都使用同样的页面结构框架。附图3中,给出了一张打印纸的页面结构框架设计。纸张四周是浏览器打印设置中定义的页面边距,由于有的浏览器打印设置中不能将页边距设置为小于6毫米的值,因此要求用户统一设置为6毫米。页面中扣除浏览器页面设置中的边距的部分用一个table元素表示,名为outerTable,即附图3中灰色底纹包围的部分,其宽度等于纸张宽度减去12毫米,高度等于纸张高度减去12毫米。设置TLcell单元格的高度和宽度可以调节报表打印时的实际页面上边距和左边距,设置下空行的高度计右空列的宽度可调节实际页面下边距及右边距。实际上边距=浏览器页面上边距+TLcell高度+页眉高度,实际下边距=浏览器页面下边距+下空行高度+页脚高度,实际左边距=浏览器页面左边距+TLcell宽度,实际右边距=浏览器页面右边距+右空列宽度。其中浏览器页面边距固定为6mm,页眉、页脚高度为固定值。主内容区用于放置报表数据的标题及其后的数据行,其位置可用其左边的“左缩进调节列”的宽度进行调整,如实现报表数据的居中。
WEB报表直接打印方案步骤8之创建报表首页,指使用附图3的报表页面内容框架创建报表的第一页。当报表数据较少时,可能整个报表只有一页,此时报表首页上将包含报表表尾。
创建报表首页过程见附图4,具体描述如下:
一、设置totalPages=1。已创建的报表页总数用变量totalPages记录。
二、在浏览器页面上添加一个outerTable实例。实施方法:先添加一个DIV元素到浏览器页面的body上,然后将outerTable的html描述设置到DIV元素的innerHtml属性。
三、页边距设置。根据报表模板文件中的页边距设置及报表页面框架的定义,调节outerTable中TLcell及下空行和右空列的尺寸使实际页边距等于报表模板中的页边距。
四、设置页眉、页脚及表头。从打印区对象集合中获取页眉、页脚及报表表头的html形式表格描述文本,解析其中的函数,用函数的实际值替换其出现,如在页脚中有日期函数$currentDate(),则用当前日期替换,填充到outerTable的对应单元格中。
五、计算纸张剩余可用高度。用打印纸张的高度减去步骤3)中的实际上下页边距及报表表头区的高度,得到纸张剩余可用高度H。
六、创建主内容区表格。在主内容区添加一个空的html table,记为contentTable,设置H=H-contentTable的上下边框高度。
七、添加标题区。从打印区对象集合中获取标题区的html表格行(TR)描述文本,添加到主内容区表格contentTable中。更新纸张剩余可用高度,H=H-标题区高度。
八、添加数据行。从打印区对象集合中获取数据区的html表格行(TR)描述文本(记为DataTr)及其高度Hr。当报表数据数组对象reportData中存在未使用数据记录且Hr≤H时,反复执行:a)取得下一条数据记录;b)用数据记录里的实际数据值替换DataTr中的字段名或函数或表达式;c)追加处理后的数据行到contentTable的末尾;d)H=H-Hr。
九、添加表尾。表尾区高度记为Hb。若报表数据的所有数据记录都已添加到contentTable中且有H≥Hb,则执行如下过程:a)从打印区对象集合中获取报表表尾的html形式表格描述文本,若不存在,则直接执行步骤b),否则解析其中的函数,用函数的实际值替换其出现,将表尾的html形式表格描述文本填充到outerTable的“报表表尾区”单元格中;b)将页眉及页脚中出现的表示总页数的报表系统变量$TOTALPAGES用1代替,如页脚中的“共$TOTALPAGES页”执行替换后变成“共1页”;c)调用window.print()直接打印当前网页;4)结束报表页面创建过程。
十、调用报表续页创建过程。
WEB报表直接打印方案步骤9之创建报表续页,指创建报表首页之后的其他页面。报表续页不包含报表表头,但可能包含表尾。报表续页创建过程如下:
1)设置totalPages=totalPages+1。页数增1。
2)插入分页符。向当前网页的body中添加一个空的DIV元素,令其风格为:”class=’noprint’
page-break-before:always;height:1px;width:100px;",其中
“page-break-before:always”指定在此DIV前强制分页,
class="noprint"设置其不打印,在CSS中需设置如下:<stylemedia=print
type="text/css">.noprint{visibility:hidden}</style>
3)在浏览器页面上添加一个outerTable实例。实施方法:先添加一个DIV元素到浏览器页面的body上,然后将outerTable的html描述作为DIV元素的innerHtml。
4)页边距设置。根据报表模板文件中的页边距设置及报表页面框架的定义,调节outerTable中TLcell及下空行和右空列的尺寸使实际页边距等于报表模板中的页边距。
5)设置页眉、页脚。从打印区对象集合中获取页眉、页脚及报表表头的html形式表格描述文本,解析其中的函数,用函数的实际值替换其出现,填充到outerTable的对应单元格中。
6)计算纸张剩余可用高度。用打印纸张的高度减去步骤4)中的实际上下页边距及报表表头区的高度,得到纸张剩余可用高度H。
7)若报表数据数组对象reportData中不存在未使用数据记录,则转到步骤11)。
8)创建主内容区表格。在主内容区添加一个空的html table,记为contentTable。
9)添加标题区。从打印区对象集合中获取标题区的html表格行(TR)描述文本,添加到主内容区表格contentTable中。更新纸张剩余可用高度,H=H-标题区高度。
10)添加数据行。从打印区对象集合中获取数据区的html表格行(TR)描述文本(记为DataTr)及其高度Hr。当报表数据数组对象reportData中存在未使用数据记录且Hr≤H时,反复执行:a)取得下一条数据记录;b)用数据记录里的实际数据值替换DataTr中的字段名或函数或表达式;c)追加处理后的数据行到contentTable的末尾;d)H=H-Hr。
11)添加表尾。表尾区高度记为Hb。若报表数据的所有数据记录都已添加到contentTable中且有H≥Hb,则执行如下过程:a)从打印区对象集合中获取报表表尾的html形式表格描述文本,若不存在,则直接执行步骤b),否则解析其中的函数,用函数的实际值替换其出现,填充到outerTable的“报表表尾区”单元格中;b)将页眉及页脚中出现的表示总页数的报表系统变量$TOTALPAGES用totalPages变量的值代替,如totalPages值为5,则页脚中的“共$TOTALPAGES页”执行替换后变成“共5页”;c)调用window.print()直接打印当前网页;4)结束报表页面创建过程。
12)转步骤1)继续创建下一页。
WEB报表直接打印方案步骤10之打印报表,已包含在创建报表首页和创建报表续页过程中的“添加表尾”子步骤中。
以上实例的说明只是用于帮助理解本发明的核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (5)

1.一种WEB报表浏览器中直接打印的方法,其特征在于,包括如下步骤:
步骤一):设计报表:在类EXCEL的报表设计器中设置报表的查询语句、标题区、表头区、数据区、表尾区、页眉页脚及页面尺寸及页边距;
步骤二)保存打印格式:在报表模板中设计内容节点保存报表在WEB浏览器上用于展示打印的格式;
步骤三)报表数据浏览:在浏览器端发出浏览报表请求,从服务器获取报表数据记录集合,保存到浏览器脚本数组对象中,并在页面上显示;
步骤四)调用报表打印页面:在浏览器中查看报表数据并单击打印按钮后,在当前页面的底部内联帧中加载报表打印页面以生成打印内容;
步骤五)获取报表打印格式:在内联帧的页面中从服务器获取当前报表的报表模板文件,包括如下过程:
1)获取内联帧父窗口中当前报表的ID;
2)用报表ID从服务器获取报表模板文件;
步骤六)初始化打印区:从报表模板文件中提取打印区定义,并创建打印区对象,包括如下过程:
Ⅰ)解析报表模板文件,提取其中的打印区集合;
Ⅱ)对打印区集合中的每个打印区,用一个对象表示,称为打印区对象,对象属性包括:打印区名,宽度,高度及内容文本;
步骤七)创建报表页面框架:创建报表打印时每一页的内容结构框架;
步骤八)创建报表首页:根据报表页面框架创建报表的第一页,若整个报表只有一页,则报表首页包含报表表尾;
步骤九)创建报表续页:创建报表续页,所述报表续页不包括表头,可包含表尾;
步骤十)打印报表。
2.如权利要求1所述的WEB报表浏览器中直接打印的方法,其特征在于,所述步骤二)包含如下步骤:
1)在报表模板中创建打印区集合节点,所述集合节点中包含所有将打印出来的报表区域的描述;
2)计算所有打印区的共同宽度,处理方式如下:
a.在报表设计器表格界面上找出所有被使用的列中最左的列;
b.在设计器表格界面上找出所有被使用的列中最右的列;
c.将最左的列、最右的列及其之间的所有列的宽度相加,即得到总宽度。
3)创建表头区、表尾区、页眉区、页脚区的节点,四个区都被处理为独立的HTML表格,四个打印区的共同处理方法如下:
d.确定打印区的行区域与列区域,打印区的行由设计器界面上打印区标志确定,而所占列为最左的列至最右的列间的所有列;
e.根据打印区的行与列区域,生成对应的HTML格式的表格描述,描述信息包括表格的宽度、高度以及每个单元格的属性与文本内容;
f.创建打印区节点,并设置高度、宽度及名字等属性,其中打印区的名字标志打印区节点是何种打印区;
g.将表格描述设置为打印区节点的内容文本;
h.将打印区节点作为子节点添加到打印区集合节点。
4)创建标题区、数据区节点:标题区与数据区两个打印区的处理方法如下:
i.确定打印区所在行区域及列区域;
g.根据打印区的行区域与列区域,生成对应的HTML格式的行描述;
k.创建打印区节点,并设置其高度、宽度及名字等属性,其中打印区的名字标志其是何种打印区;
l.将行描述设置为打印区节点的内容文本;
m.将打印区节点作为子节点添加到打印区集合节点。
3.如权利要求1所述的WEB报表浏览器中直接打印的方法,其特征在于,步骤七)所述的内容结构框架页边距设置为6毫米,内容结构框架扣边距的部分为主内容区,所述主内容区宽度等于内容结构框架宽度减去12毫米,高度等于内容结构框架高度减去12毫米,设置主内容区最左上侧单元格的高度和宽度可以调节报表打印时的实际页面上边距和左边距,设置最下侧单元格的高度可调节实际页面下边距,最右空列的宽度可调节实际页面的右边距。
4.如权利要求1所述的WEB报表浏览器中直接打印的方法,其特征在于,所述步骤八)包含如下步骤:
8-1、设置报表总页数s=1;
8-2、在浏览器页面上添加一个主内容区;
8-3、页边距设置:根据报表模板文件中的页边距设置及报表页面框架的定义,调节主内容区中最左上侧单元格及最下侧单元格和最右侧单元格的尺寸使主内容区边距等于报表模板中的页边距;
8-4、设置页眉、页脚及表头:从打印区对象集合中获取页眉、页脚及报表表头的html形式表格描述文本,解析其中的函数,用函数的实际值替换其出现;
8-5、计算纸张剩余可用高度:用主内容区的高度减去实际上下页边距及报表表头区的高度,得到纸张剩余可用高度;
8-6、创建主内容区表格:在主内容区添加一个空的html表格,所述空的html表格的高度设置为纸张剩余可用高度;
8-7、添加标题区:从打印区对象集合中获取标题区的html表格行描述文本,添加到主内容区表格中,更新纸张剩余可用高度;
8-8、添加数据行:从打印区对象集合中获取数据区的html表格行描述文本DataTr及数据区的高度Hr。当报表数据数组对象中存在未使用数据记录且数据区的高度Hr≤纸张剩余可用高度时H,反复执行如下步骤:
A.取得下一条数据记录;
B.用数据记录里的实际数据值替换数据区的html表格行描述文本
中的字段名或函数或表达式;
C.追加处理后的数据行到空的html表格的末尾;
D.纸张剩余可用高度H=纸张剩余可用高度H-数据区的高度Hr;
8-9、添加表尾:表尾区高度记为Hb。若报表数据的所有数据记录都已添加到空的html表格中且纸张剩余可用高度H≥表尾区高度Hb,则执行如下过程:
8-9-1.从打印区对象集合中获取报表表尾的html形式表格描述文本,若存在则解析其中的函数,用函数的实际值替换描述文本,将表尾的html形式表格描述文本填充到主内容区的“报表表尾区”单元格中;若不存在,则直接执行步骤2;
8-9-2.将页眉及页脚中出现的表示总页数的报表系统变量用1代替;
8-9-3.调用window.print()直接打印当前网页;
8-9-4.结束报表页面创建过程。
5.如权利要求1所述的WEB报表浏览器中直接打印的方法,其特征在于,所述步骤九)包含如下步骤:
9-1、设置报表总页数=报表总页数+1;
9-2、插入分页符:向当前网页的body中添加一个空的DIV元素,添加方式为:”class=’noprint’
page-break-before:always;height:1px;width:100px;",其中“page-break-before:always”指定在此DIV前强制分页,class="noprint"设置其不打印,在CSS中需设置如下:<style media=printtype="text/css">.noprint{visibility:hidden}</style>;
9-3、在浏览器页面上添加一个主内容区;
9-4、页边距设置:根据报表模板文件中的页边距设置及报表页面框架的定义,调节主内容区中最左上侧单元格及最下侧单元格和最右侧单元格的尺寸使实际页边距等于报表模板中的页边距;
9-5、设置页眉、页脚:从打印区对象集合中获取页眉、页脚及报表表头的html形式表格描述文本,解析其中的函数,用函数的实际值替换表格描述文本,填充到主内容区的对应单元格中;
9-6、计算纸张剩余可用高度:用打印纸张的高度减去步骤9-4中的实际上下页边距及报表表头区的高度,得到纸张剩余可用高度H;
9-7、若报表数据数组对象中不存在未使用数据记录,则转到步骤9-11;
9-8、创建主内容区表格:在主内容区添加一个空的html主内容区表格;
9-9、添加标题区:从打印区对象集合中获取标题区的html表格行描述文本,添加到主内容区表格中,更新纸张剩余可用高度,H=H-标题区高度。
9-10、添加数据行。从打印区对象集合中获取数据区的html表格行描述文本及描述文本高度Hr;当报表数据数组对象中存在未使用数据记录且Hr≤H时,反复执行如下步骤:
9-10-1.取得下一条数据记录;
9-10-2.用数据记录里的实际数据值替换描述文本中的字段名或函数或表达式;
9-10-3.追加处理后的数据行到主内容区表格末尾;
9-10-4.H=H-Hr;
9-11、添加表尾:若报表数据的所有数据记录都已添加到主内容区表格中且有H≥表尾区高度Hb,则执行如下过程:
9-11-1.从打印区对象集合中获取报表表尾的html形式表格描述文本,若不存在,则直接执行步骤b),否则解析其中的函数,用函数的实际值替换表格描述文本,填充到主内容区表格的“报表表尾区”单元格中;
9-11-2.将页眉及页脚中出现的表示总页数的报表系统变量$TOTALPAGES用报表总页数变量的值代替;
9-11-3.调用window.print()直接打印当前网页;
9-11-4.结束报表页面创建过程;
9-12、转步骤9-1继续创建下一页。
CN201510107601.7A 2015-03-12 2015-03-12 一种web报表浏览器中直接打印的方法 Expired - Fee Related CN104714766B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510107601.7A CN104714766B (zh) 2015-03-12 2015-03-12 一种web报表浏览器中直接打印的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510107601.7A CN104714766B (zh) 2015-03-12 2015-03-12 一种web报表浏览器中直接打印的方法

Publications (2)

Publication Number Publication Date
CN104714766A true CN104714766A (zh) 2015-06-17
CN104714766B CN104714766B (zh) 2017-11-03

Family

ID=53414149

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510107601.7A Expired - Fee Related CN104714766B (zh) 2015-03-12 2015-03-12 一种web报表浏览器中直接打印的方法

Country Status (1)

Country Link
CN (1) CN104714766B (zh)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105760122A (zh) * 2016-02-18 2016-07-13 浪潮通用软件有限公司 一种浏览器图表的服务器端打印方法
CN107402729A (zh) * 2016-05-20 2017-11-28 航天信息软件技术有限公司 打印模板构建方法及模板打印方法
CN107943426A (zh) * 2017-10-13 2018-04-20 用友网络科技股份有限公司 单据分页打印方法、单据分页打印系统及计算机装置
CN109324770A (zh) * 2018-10-16 2019-02-12 中山市晋华软件科技有限公司 页面报表打印系统及方法
CN109343848A (zh) * 2018-09-18 2019-02-15 西安葡萄城信息技术有限公司 一种网页设计方法及系统
CN109343804A (zh) * 2018-09-28 2019-02-15 江苏中服焦点信息科技有限公司 一种打印模板的方法
CN109634537A (zh) * 2018-11-14 2019-04-16 百富计算机技术(深圳)有限公司 一种分割打印方法和交易终端
CN109829147A (zh) * 2019-01-31 2019-05-31 恒生电子股份有限公司 报表导出方法及装置
CN110347349A (zh) * 2019-05-21 2019-10-18 平安银行股份有限公司 浏览器中打印指定内容的方法、装置和计算机设备
WO2020029383A1 (zh) * 2018-08-07 2020-02-13 平安科技(深圳)有限公司 分页处理方法、系统、计算机设备和存储介质
CN110865775A (zh) * 2019-09-26 2020-03-06 福建亿能达信息技术股份有限公司 一种基于web进行在线设计与预览的打印方法
CN111045615A (zh) * 2019-12-19 2020-04-21 厦门商集网络科技有限责任公司 一种在浏览器端自定义js模板的打印方法及系统
CN111309671A (zh) * 2019-12-04 2020-06-19 珠海派诺科技股份有限公司 一种web报表导出PDF的方法、装置及存储介质
CN112199056A (zh) * 2020-10-20 2021-01-08 金蝶软件(中国)有限公司 数据打印方法、装置及计算机存储介质
CN113238720A (zh) * 2021-03-30 2021-08-10 紫光云技术有限公司 一种无需插件在页面直接打印pdf文件的实现方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030058469A1 (en) * 2001-09-26 2003-03-27 International Business Machines Corporation Method and apparatus for printing XML directly using a formatting template
CN1504879A (zh) * 2002-12-02 2004-06-16 深圳市中兴通讯股份有限公司 实现跨平台和复杂统计计算报表的方法和系统
CN101334730A (zh) * 2008-07-18 2008-12-31 中兴通讯股份有限公司 一种报表打印方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030058469A1 (en) * 2001-09-26 2003-03-27 International Business Machines Corporation Method and apparatus for printing XML directly using a formatting template
CN1504879A (zh) * 2002-12-02 2004-06-16 深圳市中兴通讯股份有限公司 实现跨平台和复杂统计计算报表的方法和系统
CN101334730A (zh) * 2008-07-18 2008-12-31 中兴通讯股份有限公司 一种报表打印方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王建平: "《基于WEB的多页打印报表动态生成》", 《微型电脑应用》 *

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105760122A (zh) * 2016-02-18 2016-07-13 浪潮通用软件有限公司 一种浏览器图表的服务器端打印方法
CN107402729A (zh) * 2016-05-20 2017-11-28 航天信息软件技术有限公司 打印模板构建方法及模板打印方法
CN107402729B (zh) * 2016-05-20 2020-02-14 航天信息软件技术有限公司 打印模板构建方法及模板打印方法
CN107943426A (zh) * 2017-10-13 2018-04-20 用友网络科技股份有限公司 单据分页打印方法、单据分页打印系统及计算机装置
WO2020029383A1 (zh) * 2018-08-07 2020-02-13 平安科技(深圳)有限公司 分页处理方法、系统、计算机设备和存储介质
CN109343848A (zh) * 2018-09-18 2019-02-15 西安葡萄城信息技术有限公司 一种网页设计方法及系统
CN109343804A (zh) * 2018-09-28 2019-02-15 江苏中服焦点信息科技有限公司 一种打印模板的方法
CN109324770A (zh) * 2018-10-16 2019-02-12 中山市晋华软件科技有限公司 页面报表打印系统及方法
CN109634537B (zh) * 2018-11-14 2022-04-12 百富计算机技术(深圳)有限公司 一种分割打印方法和交易终端
CN109634537A (zh) * 2018-11-14 2019-04-16 百富计算机技术(深圳)有限公司 一种分割打印方法和交易终端
CN109829147A (zh) * 2019-01-31 2019-05-31 恒生电子股份有限公司 报表导出方法及装置
CN109829147B (zh) * 2019-01-31 2023-06-30 恒生电子股份有限公司 报表导出方法及装置
CN110347349A (zh) * 2019-05-21 2019-10-18 平安银行股份有限公司 浏览器中打印指定内容的方法、装置和计算机设备
CN110865775B (zh) * 2019-09-26 2022-05-17 福建亿能达信息技术股份有限公司 一种基于web进行在线设计与预览的打印方法
CN110865775A (zh) * 2019-09-26 2020-03-06 福建亿能达信息技术股份有限公司 一种基于web进行在线设计与预览的打印方法
CN111309671A (zh) * 2019-12-04 2020-06-19 珠海派诺科技股份有限公司 一种web报表导出PDF的方法、装置及存储介质
CN111045615A (zh) * 2019-12-19 2020-04-21 厦门商集网络科技有限责任公司 一种在浏览器端自定义js模板的打印方法及系统
CN112199056A (zh) * 2020-10-20 2021-01-08 金蝶软件(中国)有限公司 数据打印方法、装置及计算机存储介质
CN113238720A (zh) * 2021-03-30 2021-08-10 紫光云技术有限公司 一种无需插件在页面直接打印pdf文件的实现方法

Also Published As

Publication number Publication date
CN104714766B (zh) 2017-11-03

Similar Documents

Publication Publication Date Title
CN104714766A (zh) 一种web报表浏览器中直接打印的方法
US7721195B2 (en) RTF template and XSL/FO conversion: a new way to create computer reports
CN100580660C (zh) 管理电子文档样式的方法和系统
CN101771681B (zh) 一种页面显示控制方法、服务器及系统
CN102289376A (zh) 基于嵌入式的多语言web页面实现方法及系统
EP1537490A2 (en) System and method for browser document editing
CN108776824A (zh) 条码标签生成方法、装置及电子设备
US8381099B2 (en) Flows for variable-data printing
CN103559184A (zh) 表单页面的显示方法和装置
CN107885792A (zh) 网页文章显示方法、装置及系统
Bader et al. Responsive web design techniques
Dominici An overview of Pandoc
CN103793464A (zh) 一种基于中立格式的报表导出方法
CN105740239A (zh) 一种网页上文字的翻译方法及系统
CN115309476A (zh) 一种基于浏览器的ofd文件显示和编辑方法
GB2458692A (en) A process for generating database-backed, web-based documents
CN104715030A (zh) 一种单据报表套打方法
CN104615601A (zh) 基于网页的记录系统及其方法
US20040205469A1 (en) Method for processing a rule using computer-independent program instructions and computer for use therewith
Lim et al. A heuristic approach for converting HTML documents to XML documents
CN102298637B (zh) 用于内容发布的方法和系统
US8904280B2 (en) Recursive flows in variable-data printing document templates
KR20070035335A (ko) 웹문서 프린트 방법
CN112149034B (zh) 简化网页制作的通用方法及系统
CN111241788B (zh) 基于线性模型的文档转换方法、装置、设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20171103

Termination date: 20200312