报表首页和续页打印方法

文档序号:6524442阅读:465来源:国知局
报表首页和续页打印方法
【专利摘要】本发明公开了一种报表首页、续页打印方法,可以对ERP系统中的报表实现所见即所得的打印,不因报表的首页、续页的标题内容不同而调整打印模板;可以纸张动态适配拆页,方便调整纸张的大小/方向以适配拆页;还能排除空白页,避免浪费纸张。首续页打印是有别于固定标题打印的,在本发明中,将两者紧密地结合在一起。
【专利说明】报表首页和续页打印方法
【技术领域】
[0001]本发明涉及打印【技术领域】,尤其涉及一种报表首页和续页打印方法。
[0002]
【背景技术】
[0003]在现有的ERP中,报表上展示的数据内容越来越多,数据展示的行和列是无限扩展的,用户在一张报表上可展示多个查询的内容,包括明细查询,交叉统计及图表等。
[0004]在打印上述报表时,多采用模板打印方式,模板打印方式最初是针对固定的纸张类型设计的,按给定的纸张类型打印时,没有任何问题,如果更改了纸张类型或打印方向,打印可能就会出现问题,如出现打印内容不全等问题。比如一般只考虑纸张高度方向的拆页,不考虑纸张的横向宽度,如果纸张小于模板的宽度,就抛弃超出纸张宽度的部分,这样会造成报表打印数据丢失。
[0005]此外,通常情况下,报表的标题区是固定的,这样在打印首页和续页时不能打印出不同的标题内容。
[0006]鉴于以上客观技术原因,非常有必要提出一种新的报表首页和续页打印方法,以方便用户打印ERP系统中的报表。
[0007]

【发明内容】

[0008]本发明需要解决的问题就在于克服现有技术的缺陷,提供一种报表首页和续页打印方法,对ERP系统中的报表实现所见即所得的打印,并且可以分别设定报表的首页标题区和续页标题区,从而使报表的首页和续页能够打印出不同的标题内容。
[0009]为解决上述问题,本发明的报表首页和续页打印方法包括:
步骤100,准备需要打印的数据表格,即报表,该报表包含数据、样式等内容;
步骤110,获取打印设置信息,包括用户预先设定好的打印区域设置信息、打印纸张设置信息、打印顺序信息、打印标题区设置信息;
步骤120,计算报表的有效打印区域范围,即计算需要打印的有效打印行数和有效打印列数,优先选择用户在打印设置信息里定义的打印区域范围,若打印设置信息里没有指定打印范围,则需要确定有效的打印区域范围;
步骤130,计算行拆页位置表,即通过计算纸张高度方向的拆页点,进而计算出拆页对应的行位置;
步骤140,计算列拆页位置表,即通过计算纸张宽度方向的拆页点,进而计算出拆页对应的列位置;
步骤150,根据行、列拆页位置表计算出打印所对应的打印区域范围及位置,从而生成打印数据页;
步骤160,排除空白页; 步骤170,打印结束。
[0010]优选地,上述技术方案步骤120中计算有效打印行数和有效打印列数进一步包括:
(O计算有效的打印行数:首先计算当前报表的行数,之后从最大行数开始,以递减I的方式判断有效打印行数;先判断该行是否隐藏,如果该行隐藏,则行数减1,继续循环,直至排除最后的隐藏行;对于非隐藏行,从首列开始,判断单元格是否需要打印,如果在首列和最大列之间存在需要打印的单元,则当前行数即为有效打印行数,否则行数减1,继续循环,直至找到有效的打印行数;
(2)计算有效的打印列数:首先计算当前报表的列数,之后从最大列数开始,以递减I的方式判断有效打印列数;先判断该列是否隐藏,如果该列隐藏,则列数减1,继续循环,直至排除最后的隐藏列;对于非隐藏列,从首行开始,判断单元格是否需要打印,如果在首行和最大行之间存在需要打印的单元,则当前列数即为有效打印列数,否则列数减1,继续循环,直至找到有效的打印列数。
[0011]优选地,上述技术方案步骤130进一步包括:
(1)确定首页的打印高度是当前纸张的可打印高度;
(2)其他续页的打印高度计算如下:
(2.1)将续页标题区的定义及固定行标题的定义进行合并,计算续页固定打印的高度, (2.2)纸张的可打印高度减去固定打印的高度,从而得到续页的打印高度;
(3)根据首页、续页处理依据,对首次打印拆页进行动态行高度设定,其中首页、续页处理依据是:
(3.1)首页标题区定义的内容除与续页标题定义的交叉部分及固定行定义的交叉部分夕卜,不在续页中出现;
(3.2)续页标题区定义的内容除与首页标题区定义的交叉部分外,不在首页中显示; (3.3)续页标题区与固定行定义区进行合并后确定续页每页需要打印的内容;
(4)计算当前页可打印的最大行,设定第一页的起始行为0,并记录到行拆页位置表中,根据当前页的打印高度及起始行,计算当前页可打印的最大行;
判断当前页的起始行及最大行之间是否存在用户拆页点信息,若存在,则将该用户拆页点信息替代计算出的最大行;
判断当前页最大行是否小于有效打印行数,若小于有效打印行数,则将此数据记录在行拆页位置表中,同时设定下页的起始行为当前页最大行,进入下一次循环;若大于有效打印行数,则将打印有效行数记录在行拆页位置表中,结束循环。
[0012]优选地,上述技术方案步骤140进一步包括:
(1)计算续页打印宽度,判断是否存在固定列定义,若存在,则第一页打印的宽度即当前纸张的可打印宽度,其他页的打印宽度为纸张的可打印宽度减去固定列的宽度;若不存在,则设定续页打印的宽度为纸张打印区域的宽度;
(2)计算当前页可打印的最大列,设定第一页的起始列为0,并记录到列拆页位置表中,根据当前页的打印宽度及起始列,计算当前页可打印的最大列;
判断当前页的起始列及最大列之间是否存在用户拆页点信息,若存在,则将该用户拆页点信息替代计算出的最大列; 判断当前页最大列是否小于有效打印列数,若小于有效打印列数,则将此数据记录在列拆页位置表中,同时设定下页的起始列为当前页最大列,进入下一次循环;若大于有效打印列数,则将打印有效列数记录在列拆页位置表中,结束循环。
[0013]优选地,上述技术方案步骤160进一步包括:
对于不与边界相邻的数据页,仅判断正常打印区域部分是否有有效的打印数据;
对于与边界相邻的打印数据页,判断所有区域内是否包含有效的打印数据。
[0014]通过上述技术方案,可以实现以下技术效果:
(1)对ERP系统中的报表实现所见即所得的打印,不因报表的内容及格式调整而调整打印模板;
(2)可以纸张动态适配拆页,方便调整纸张的大小/方向以适配拆页;
(3)可以使报表的首页和续页打印出不同的标题;
(4)排除空白页,避免浪费纸张。
【专利附图】

【附图说明】
[0015]图1是本发明报表首页和续页打印方法的流程图;
图2是本发明报表首页和续页打印方法中获取报表的有效打印区域范围的流程图;
图3是本发明报表首页和续页打印方法中计算行拆页位置表的流程图;
图4是本发明报表首页和续页打印方法中计算列拆页位置表的流程图。
[0016]
【具体实施方式】
[0017]下面通过具体的实施例并结合附图对本发明作进一步详细的描述。
[0018]请参考图1,为本发明的报表首页和续页打印方法的流程图。该打印方法包括: 步骤100,准备需要打印的数据表格,即报表,该报表包含数据、样式等内容;
步骤110,获取打印设置信息,包括用户预先设定好的打印区域设置信息、打印纸张设置信息、打印顺序信息、打印标题区设置信息;
步骤120,计算报表的有效打印区域范围,即计算需要打印的有效打印行数和有效打印列数,优先选择用户在打印设置信息里定义的打印区域范围,若打印设置信息里没有指定打印范围,则需要计算有效的打印区域范围;
步骤130,计算行拆页位置表,即通过计算纸张高度方向的拆页点,进而计算出拆页对应的行位置;
步骤140,计算列拆页位置表,即通过计算纸张宽度方向的拆页点,进而计算出拆页对应的列位置;
步骤150,根据行、列拆页位置表计算出打印所对应的打印区域范围及位置,从而生成打印数据页;
步骤160,排除空白页;
步骤170,打印结束。
[0019]由于报表的行和列是可以无限扩展的,其显示范围是不固定的,随查询条件的变化,引起的查询结果数据的变化。因此,报表的显示范围往往比打印的有效范围要大,即显示范围的最后行和列是没有数据的行和列。因而,根据显示范围计算有效的打印范围是十分必要的。
[0020]请参考图2,对于步骤120,计算报表的有效打印区域范围,优先选择打印设置信息中的设置内容,如果在打印设置信息里没有指定打印范围,则需要根据显示范围计算有效的打印区域范围,进一步包括:
(I)获取有效的打印行数:其处理逻辑同前述获取有效打印列数,首先计算当前报表的行数,之后从最大行数开始,以递减I的方式先判断该行是否隐藏,如果该行隐藏,则行数减1,继续循环,直至排除最后的隐藏行;对于非隐藏行,从首列开始,判断单元格是否需要打印,如果在首列和最大列之间存在需要打印的单元,则当前行数即为有效打印行数,否则行数减1,继续循环,直至找到有效的打印行数。
[0021](2)获取有效的打印列数:首先计算当前报表的列数,之后从最大列数开始,以递减I的方式先判断该列是否隐藏,如果该列隐藏,则列数减1,继续循环,直至排除最后的隐藏列;对于非隐藏列,从首行开始,判断单元格是否需要打印,如果在首行和最大行之间存在需要打印的单元,则当前列数即为有效打印列数,否则列数减1,继续循环,直至找到有效的打印列数。
[0022]其中,判断打印单元是否可用的依据是:单元格没有设置不允许打印,或者单元格数据为空并且没有表格显示样式的设置而且不属于某个区域模型,如图表区域等。
[0023]请参考图3,对于步骤130,计算行拆页位置表,即计算行拆页点(行号)。由于首页、续页的标题不同,采用动态调整行高(即动态行隐藏)的方式。在计算行拆页点中,要考虑固定行及用户特定拆页点。行拆页位置表中,第一个为起始行。通过比较行拆页位置表中相邻的两个数,就可以计算出每页的具体行范围。进一步包括:
(I)确定首页的打印高度是当前纸张的可打印高度。
[0024](2)其他续页的打印高度计算如下:
(2.1)将续页标题区的定义及固定行标题的定义进行合并,计算续页固定打印的高
度;
(2.2)纸张的可打印高度减去固定打印的高度,从而得到续页的打印高度。
[0025](3)根据首页、续页处理依据,对首次打印拆页进行动态行高度设定,其中首页、续页处理依据是:
(3.1)首页标题区定义的内容除与续页标题定义的交叉部分及固定行定义的交叉部分夕卜,不在续页中出现;
(3.2)续页标题区定义的内容除与首页标题区定义的交叉部分外,不在首页中显示; (3.3)续页标题区与固定行定义区进行合并后确定续页每页需要打印的内容。
[0026](4)计算当前页可打印的最大行,设定第一页的起始行为0,并记录到行拆页位置表中,根据当前页的打印高度及起始行,计算当前页可打印的最大行。判断当前页的起始行及最大行之间是否存在用户拆页点信息(即用户分页信息),若存在,则将该用户拆页点信息替代计算出的最大行。判断当前页最大行是否小于有效打印行数,若小于有效打印行数,则将此数据记录在行拆页位置表中,同时设定下页的起始行为当前页最大行,进入下一次循环;若大于有效打印行数,则将最大打印有效行记录在行拆页位置表中,结束循环。
[0027]请参考图4,对于步骤140,计算列拆页位置表,即计算列拆页点(列号)。进一步包括:
(I)计算续页打印宽度,判断是否存在固定列定义,若存在,则第一页打印的宽度即当前纸张的可打印宽度,其他页的打印宽度为纸张的可打印宽度减去固定列的宽度;若不存在,则设定续页打印的宽度为纸张打印区域的宽度。
[0028](2)计算当前页可打印的最大列,设定第一页的起始列为0,并记录到列拆页位置表中,根据当前页的打印宽度及起始列,计算当前页可打印的最大列。判断当前页的起始列及最大列之间是否存在用户拆页点信息(即用户分页信息),若存在,则将该用户拆页点信息替代计算出的最大列。判断当前页最大列是否小于有效打印列数,若小于有效打印列数,则将此数据记录在列拆页位置表中,同时设定下页的起始列为当前页最大列,进入下一次循环;若大于有效打印列数,则将最大打印有效列记录在列拆页位置表中,结束循环。
[0029]对于步骤150,生成打印数据页。根据计算出的行拆页位置表、列拆页位置表,就能计算出每页打印的数据范围。生成的打印数据页根据位置分为四类:
(I)与左边界及上边界都相邻的数据页只有一个打印区域,此类数据页也只有一个。
[0030](2)仅与左边界相邻的,包括固定行打印区域及正常打印区域,固定行区域是行区间固定,列区间为正常打印区域的起止列。
[0031](3)仅与上边界相邻的,包括固定列打印区域及正常打印区域,固定列部分是列区间固定,行区间是正常打印区域的起止行。
[0032](4)与左边界及上边界都不相邻的,打印区域可以分为四部分,固定行/固定列交叉的部分,此部分是固定的,即起止行,起止列是不变的;固定行部分,固定列部分,及正常打印区域部分,固定行区域是行区间固定,列区间为正常打印区域的起止列,固定列部分是列区间固定,行区间是正常打印区域的起止行。
[0033]在计算打印数据页时,根据打印设置信息里的打印顺序信息对打印数据页进行排序。包括:先列后行,或先行后列。
[0034]对于步骤160,生成打印数据页后,还要排除没有打印内容的数据页,即排除空白页,防止浪费纸张。判断规则包括:对于不与边界相邻的数据页,仅判断正常打印区域部分是否有有效的打印数据;对于与边界相邻的打印数据页,判断所有区域内是否包含有效的打印数据。
[0035]通过以上结合附图对本发明实施例的描述,可以清楚地理解,根据本发明的报表打印方法,可以对ERP系统中的报表实现所见即所得的打印。
[0036]最后应说明的是:显然,上述实施例仅仅是为清楚地说明本发明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明的保护范围之中。
【权利要求】
1.一种报表首页和续页的打印方法,其特征在于,包括以下步骤: 步骤100,准备需要打印的数据表格,即报表,该报表包含数据、样式等内容; 步骤110,获取打印设置信息,包括用户预先设定好的打印区域设置信息、打印纸张设置信息、打印顺序信息、打印标题区设置信息; 步骤120,计算报表的有效打印区域范围,即计算需要打印的有效打印行数和有效打印列数,优先选择用户在打印设置信息里定义的打印区域范围,若打印设置信息里没有指定打印范围,则需要计算有效的打印区域范围; 步骤130,计算行拆页位置表,即通过计算纸张高度方向的拆页点,进而计算出拆页对应的行位置; 步骤140,计算列拆页位置表,即通过计算纸张宽度方向的拆页点,进而计算出拆页对应的列位置; 步骤150,根据行、列拆页位置表计算出打印所对应的打印区域范围及位置,从而生成打印数据页; 步骤160,排除空白页; 步骤170,打印结束。
2.如权利要求1所述的方法,其特征在于,步骤120中计算有效打印行数和有效打印列数进一步包括: (O计算有效的打印行数:首先计算当前报表的行数,之后从最大行数开始,以递减I的方式判断有效打印行数;先判断该行是否隐藏,如果该行隐藏,则行数减1,继续循环,直至排除最后的隐藏行;对于非隐藏行,从首列开始,判断单元格是否需要打印,如果在首列和最大列之间存在需要打印的单元,则当前行数即为有效打印行数,否则行数减1,继续循环,直至找到有效的打印行数; (2)计算有效的打印列数:首先计算当前报表的列数,之后从最大列数开始,以递减I的方式判断有效打印列数;先判断该列是否隐藏,如果该列隐藏,则列数减1,继续循环,直至排除最后的隐藏列;对于非隐藏列,从首行开始,判断单元格是否需要打印,如果在首行和最大行之间存在需要打印的单元,则当前列数即为有效打印列数,否则列数减1,继续循环,直至找到有效的打印列数。
3.如权利要求1所述的方法,其特征在于,步骤130进一步包括: (1)确定首页的打印高度是当前纸张的可打印高度; (2)其他续页的打印高度计算如下: (2.1)将续页标题区的定义及固定行标题的定义进行合并,计算续页固定打印的高度, (2.2)纸张的可打印高度减去固定打印的高度,从而得到续页的打印高度; (3)根据首页、续页处理依据,对首次打印拆页进行动态行高度设定,其中首页、续页处理依据是: (3.1)首页标题区定义的内容除与续页标题定义的交叉部分及固定行定义的交叉部分外,不在续页中出现; (3.2)续页标题区定义的内容除与首页标题区定义的交叉部分外,不在首页中显示; (3.3)续页标题区与固定行定义区进行合并后确定续页每页需要打印的内容; (4)计算当前页可打印的最大行,设定第一页的起始行为0,并记录到行拆页位置表中,根据当前页的打印高度及起始行,计算当前页可打印的最大行; 判断当前页的起始行及最大行之间是否存在用户拆页点信息,若存在,则将该用户拆页点信息替代计算出的最大行; 判断当前页最大行是否小于有效打印行数,若小于有效打印行数,则将此数据记录在行拆页位置表中,同时设定下页的起始行为当前页最大行,进入下一次循环;若大于有效打印行数,则将打印有效行数记录在行拆页位置表中,结束循环。
4.如权利要求1所述的方法,其特征在于,步骤140进一步包括: (1)计算续页打印宽度,判断是否存在固定列定义,若存在,则第一页打印的宽度即当前纸张的可打印宽度,其他页的打印宽度为纸张的可打印宽度减去固定列的宽度;若不存在,则设定续页打印的宽度为纸张打印区域的宽度; (2)计算当前页可打印的最大列,设定第一页的起始列为0,并记录到列拆页位置表中,根据当前页的打印宽度及起始列,计算当前页可打印的最大列; 判断当前页的起始列及最大列之间是否存在用户拆页点信息,若存在,则将该用户拆页点信息替代计算出的最大列; 判断当前页最大列是否小于有效打印列数,若小于有效打印列数,则将此数据记录在列拆页位置表中,同时设定下页的起始列为当前页最大列,进入下一次循环;若大于有效打印列数,则将打印有效列数记录在列拆页位置表中,结束循环。
5.如权利要求1所述的方法,其特征在于,步骤150生成的打印数据页包括: (1)与左边界及上边界都 相邻的数据页只有一个打印区域,此类数据页也只有一个; (2)仅与左边界相邻的,包括固定行打印区域及正常打印区域,固定行区域是行区间固定,列区间为正常打印区域的起止列; (3)仅与上边界相邻的,包括固定列打印区域及正常打印区域,固定列部分是列区间固定,行区间是正常打印区域的起止行; (4)与左边界及上边界都不相邻的,打印区域可以分为四部分,固定行/固定列交叉的部分,此部分是固定的,即起止行,起止列是不变的;固定行部分,固定列部分,及正常打印区域部分,固定行区域是行区间固定,列区间为正常打印区域的起止列,固定列部分是列区间固定,行区间是正常打印区域的起止行。
6.如权利要求5所述的方法,其特征在于,打印数据页的打印顺序包括:先列后行,或先行后列。
7.如权利要求1所述的方法,其特征在于,步骤160进一步包括: 对于不与边界相邻的数据页,仅判断正常打印区域部分是否有有效的打印数据; 对于与边界相邻的打印数据页,判断所有区域内是否包含有效的打印数据。
【文档编号】G06F3/12GK103617014SQ201310701296
【公开日】2014年3月5日 申请日期:2013年12月18日 优先权日:2013年12月18日
【发明者】马文华 申请人:用友软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1