MultiRow发现之旅(七)- 套打和打印

前文回顾

MultiRow发现之旅(一)- 高效模板设计器

MultiRow发现之旅(二)- 详解属性管理器

MultiRow发现之旅(三)- 模板管理器和Table

MultiRow发现之旅(四)- 使用MultiRow开发WinForm应用(附源码)

MultiRow发现之旅(五)- MultiRow版俄罗斯方块(exe + 源码)

MultiRow发现之旅(六)- 使用MultiRow开发票据应用(附源码)

 

 

前面的一些文章介绍了如何使用MultiRow设计模板,以及完成一个简单的数据库应用,本文将介绍,在应用设计完成后,你如何使用MulitRow提供的打印功能,按照你的期望,打印到纸张或者其他图形化界面上。首先我们简单来介绍一下MultiRow提供的打印接口,然后着重介绍一些对打印效果的设置。

打印接口:在GcMulitRow控件上有面有若个Print方法的重载,还有两个PrintPreview的重载。其中,Print方法支持将GcMulitRow打印到一个Graphics(Print方法的第一个参数为Graphics对象)上面,或者直接输出到打印机,你可以根据不同的需求调用不同的方法重载。

这里需要提一下的是,GcMultiRow的打印是基于每个Section的,也就是说,打印的时候,你可以定制,如何打印ColumnHeader,ColumnFooter,以及所有的Row。你会发现Print方法的参数当中,有一些让你指定打印的范围和样式,不过这些打印方法大部分是在需要打印到Graphics对象时需要指定的,而对于直接输出到打印机,GcMultiRow提供了一个属性叫做PrintSettings,通过设置这个属性下面的一些子属性,你可以定制在输出到打印机时的打印设置。

打印设置:在GcMulitRow控件上面有一个属性是PrintSettings,他有一些属性用来控制打印时候的效果。下面我们来对一些重要的属性做个介绍。

1. PagingMode

这个属性指出了在打印的过程中如何分页。我们上面说过,MultiRow的打印是基于Section的,这个属性也就是指定,如何将MulitRow当中的Section分布在每个页面上面。

SingleRow模式

这个设置说明在将MulitRow当中的每一个Row打印到一页纸上面。我们使用之前的一篇文章的示例作为演示,下面的一页纸当中,只打印了一个Row:

Flow模式

这个设置说明MulitRow将从第一页纸开始安排所有的Row,一个挨着一个从上到下排列,直到当前页面不能显示下一个Row,将重新生成一页,继续排列。下图所示,按Flow模式打印,这个页面只能显示两个Row:

MultiColumns模式

这种模式一般适用于当MulitRow的Row的宽度比较窄,一页纸可以打印好几列Row,为了节省纸张,可以选择这种模式,打印多个列到一页纸上面。请看下图的效果,做了一个宽度较小的模板:

另外,上面的MultiColumns模式下,你还可以选择所有Row的安排方式是依次从上到下,还是从左到右排列的。这个属性是MultiColumnsPrintOrder,默认为DownThenOver,也就是从上到下排列,一列打印满之后再从下一列继续打印。如果改成OverThenDown,上图的效果就成这样子了:

 

2. 打印Row的范围(PrintRange,FromRow,ToRow)

通过设置PrintRange你可以选择打印的时候,只打印你想要的Row,比如PrintRange为AllRows,所有的Row将会被打印到页面;为SelectedRows时,只打印你当前在GcMulitRow控件上面选中的Row;为CurrentRow,只打印CurrentCell所在的Row;为SomeRows的时候,你可以设置另外两个属性,FromRow和ToRow,指出Row的索引,指定从那行开始打印,结束于哪行。比如基于上面的例子,FromRow为10,ToRow为20,那么页面上只打印10到20之间这十个Row:

上面的三个属性的设置,对不同的PagingMode都是起作用的。

 

3. AutoFitWidth和ZoomFactor

当你的模板比较宽,超出了一页纸可以容纳的宽度,这样就需要两页纸来打印完整的Row,如果这时候你希望一页纸也可以容纳这么宽的模板,你可以设置AutoFitWidth,来将打印时候的模板宽度进行缩小,让纸张可以容纳,这时候为了保证打印出来的效果,高度也会被自动缩小。使用之前的一个模板,看下面没有设置AutoFitWidth之前的一个效果,模板太宽,Row被拦腰折断,需要两页显示一个Row:

将AutoFitWidth设置为True,宽度方向将被缩小来适应纸张的宽度,请看下图,每页纸都可以容纳一个Row,这样节省了纸张:

另外一个属性ZoomFactor,跟AutoFitWidth有相似的功能,但更灵活,你可以指定ZoomFactor的值从0.1到4之间,任意缩放打印时的Row的大小,根据你的需求排放Row。比如下面的示例展示在Flow的分页模式下,当ZoomFactor为0.5时,一个页面将会布置更多的Row:

 

4. SectionMargin和ColumnMargin

上面提过,MultiRow的打印是基于每个Section的,因此通过这两个属性可以设置相邻Section之间的空隙。用上面的示例,设置SectionMargin为15,每个Row之间将会有空隙,效果如下:

对于ColumnMargin,要求为MultiColumns分页模式下,相邻两列之间的空隙,请看之前展示MultiColumns分页模式下的示例在设置ColumnMargin为25之后的效果:

 

5. PrintHeader和PrintFooter

如果你已经熟悉了MultiRow的结构,你肯定知道MultiRow有三种Section,ColumnHeader,Row以及ColumnFooter,前面演示的示例只使用了Row,没有ColumnHeader和ColumnFooter,下面创建的一个模板,是一个移动通信的发票,有ColumnHeader和ColumnFooter,这个示例将会在后续的博文中详细讲述如何使用MulitRow来制作。运行起来的效果如下所示:

创建这样的模板分为三个部分,ColumnHeader作为发票头显示公司名称以及其他发票信息,Row部分是主要内容显示一些明细,ColumnFooter是一些额外信息显示营业厅收款员信息,请看下图的三个黑框部分,从上到下分别代表ColumnHeader,Row,ColumnFooter:

在打印的时候,你可以通过设置PrintHeader和PrintFooter属性指定上面的ColumnHeader和ColumnFooter如何被打印在页面上面。下面展示在SingleRow模式下,将PrintHeader和PrintFooter都设置为AllRows,这样每页纸上面都有公司名称,营业厅,收款员信息了,如下图所示

有时候,你希望只在第一页显示公司名称,后面的页面只显示内容信息,你可以将PrintHeader属性设置为FirstPage,这样只有第一页显示公司名称信息了。其他的值你可以自己尝试设置,在这里就不一一介绍了。

 

6. PrintStyle

这是一个非常实用的属性,他控制打印的样式,默认为Rich,代表所有的控件上面的样式和内容都要打印。另外还有Compact和Content模式。在这里值得一提的是Content的打印模式,如果将PrintStyle设置为Content模式,此时,所有的样式将不被打印,只有每个格子当中的值被打印出来,这样你可以实现“套打”的功能。也就是说,纸张的样式,以及格子之类的固定格式已经存在纸张上面,只需要打印变化的内容就行了,这样可以加快打印速度,节约打印耗材,目前很多票据都是采用这种打印模式。

直接使用上面的示例来说明,如果将PrintStyle设置为Content,打印效果如下:

可以看出,只有蓝色的内容被打印了,这种模式下,你往打印机里面放入一张有固定格式的票据,比如下面的样子:

然后启动打印功能,一张成型的发票就被打印出来了。

 

7. 页面和打印机配置

调用GcMultiRow的PageSetup()方法,你可以打开页面配置窗口,更改页面的一些设置,MulitRow就会根据你的设置评估打印时需要如何布局:

还可以在调用Print()方法时,指出要不要弹出打印机设置对话框,更改打印机的设置:

 

总结:MultiRow提供了丰富的打印功能,除了上面罗列的一些之外,你还可以进行自定义打印,在这里就不过多的阐述,请参考相关文档,或者在GCDN官方论坛,我们一起探讨。

时间: 2024-08-01 15:40:57

MultiRow发现之旅(七)- 套打和打印的相关文章

MultiRow发现之旅(三)- 模板管理器和Table

前文回顾 MultiRow发现之旅(一)- 高效模板设计器 MultiRow发现之旅(二)- 详解属性管理器   模板管理器 当模板中Cell比较多的时候,你往往会眼花缭乱,这时"模板管理器"就特别有用.请点击该工具栏中的第一个按钮,就能打开"模板管理器"工具窗口了(通过点击VisualStudio菜单的"视图"-->"其它窗口"-->"模板管理器 6.0"也能打开,"属性管理器&qu

MultiRow发现之旅(六)- 使用MultiRow开发票据应用(附源码)

前文回顾 MultiRow发现之旅(一)- 高效模板设计器 MultiRow发现之旅(二)- 详解属性管理器 MultiRow发现之旅(三)- 模板管理器和Table MultiRow发现之旅(四)- 使用MultiRow开发WinForm应用(附源码) MultiRow发现之旅(五)- MultiRow版俄罗斯方块(exe + 源码)   本文将使用MultiRow实现票据开发功能,模拟大家都很熟悉的"中国移动通讯公司"的展示发票.效果图如下: 打印为xps格式并用XPS Viewe

MultiRow发现之旅(五)- MultiRow版俄罗斯方块(exe + 源码)

前文回顾 MultiRow发现之旅(一)- 高效模板设计器 MultiRow发现之旅(二)- 详解属性管理器 MultiRow发现之旅(三)- 模板管理器和Table MultiRow发现之旅(四)- 使用MultiRow开发WinForm应用(附源码)     之前的文章讨论了不少MultiRow技术细节,相信大家都有点累了,今天轻松轻松,玩玩游戏,看你能玩到多少分.   俄罗斯方块(MultiRow版)1.0游戏界面如下:   玩法: 左右键控制方向. 上键顺时针旋转. Shift键逆时针旋

MultiRow发现之旅(一)- 高效模板设计器

在这篇博客中我将向大家介绍一个集成在VisualStudio中的很酷很给力的设计器--MultiRow模板设计器.它与VisualStudio无缝集成,提供与VisualStudio一脉相承的设计体验,可以使用VisualStudio提供的各种窗口.菜单命令等,你可以像使用WinForm设计器一样使用它.所以本系列博客将重点介绍一些很酷的功能. 尽管该设计器是专门为MultiRow产品开发的,想学习.试用MultiRow产品的朋友们固然不容错过,但是相信对其他朋友们也有很大的借鉴作用. 创建模板

C#发现之旅第七讲 C#图形开发高级篇

为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅 "的技术讲座.考虑到各位大多是进行WEB数据库开发的,而所谓发现就是发现我们所 不熟悉的领域,因此本系列讲座内容将是C#在WEB数据库开发以外的应用.目前规划的主要内 容是图形开发和XML开发,并计划编排了多个课程.在未来的C#发现之旅中,我们按照由浅入 深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进 行软件开发,拓宽我们的视野,增强我们的软件开发综合能力. 本系列课程配套

C#发现之旅第九讲 ASP.NET验证码技术

为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅 "的技术讲座.考虑到各位大多是进行WEB数据库开发的,而所谓发现就是发现我们所 不熟悉的领域,因此本系列讲座内容将是C#在WEB数据库开发以外的应用.目前规划的主要内 容是图形开发和XML开发,并计划编排了多个课程.在未来的C#发现之旅中,我们按照由浅入 深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进 行软件开发,拓宽我们的视野,增强我们的软件开发综合能力. 本系列课程配套

C#发现之旅第一讲 C#-XML开发

为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅 "的技术讲座.考虑到各位大多是进行WEB数据库开发的,而所谓发现就是发现我们所 不熟悉的领域,因此本系列讲座内容将是C#在WEB数据库开发以外的应用.目前规划的主要内 容是图形开发和XML开发,并计划编排了多个课程.在未来的C#发现之旅中,我们按照由浅入 深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进 行软件开发,拓宽我们的视野,增强我们的软件开发综合能力. 本系列课程配套

RSS阅读器:从订阅到发现之旅?

zhengyun 20070805 曹增辉在<RSS阅读器:工具化还是媒介化>提出了对抓虾新动作的定义:"对于抓虾这次调整的思路,不少人将之归结为"社区化",其实,我觉得说是"媒介化"更准确一点". 那么媒介化是不是可以理解为"从订阅走向发现之旅"呢? 如果是这样,那么这个概念和"从搜索到发现之旅"是一样,都是着眼于从用户主动行为(搜索关键词.订阅RSS)到系统帮助用户找到潜在资源.  林嘉澍在

C#发现之旅第十讲 文档对象模型

为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅 "的技术讲座.考虑到各位大多是进行WEB数据库开发的,而所谓发现就是发现我们所 不熟悉的领域,因此本系列讲座内容将是C#在WEB数据库开发以外的应用.目前规划的主要内 容是图形开发和XML开发,并计划编排了多个课程.在未来的C#发现之旅中,我们按照由浅入 深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进 行软件开发,拓宽我们的视野,增强我们的软件开发综合能力. 课程说明 本