艾灵仙
[摘 要] 在管理信息化中,虽然说是“无纸信息化”时代,但是实际上在很多场合离不开纸质的打印或精确打印。本文主要论述用Visual Studio 2008在.NET网页中如何添加Microsoft SQL Server数据库和报表源,如何创建报表文件,如何通过添加按钮控件及相关代码实现B/S架构下水晶报表的打印与精确打印。
[关键词] 管理信息化;水晶报表;打印;精确打印
[中图分类号]F232[文献标识码]A[文章编号]1673-0194(2009)04-0012-02
随着计算机技术的发展与普及,越来越多的单位或部门已基本实现无纸管理信息化,但是在一些场合现在还不能完全无纸化,还要将计算机处理结果以报表形式通过打印机输出到纸上,如公司产品销售的发票打印、企业资格证等。在B/S架构中,常规的打印方法是使用浏览器文件菜单中的“打印”。使用这种方法打印虽然简单,但打印出来的页面会出现你所不希望出现的页眉、页脚、页码及背景等,还会出现版面不美、布局不好的现象,而且无法实现精确打印。本文以ASP.NET技术为基础论述如何使用VS 2008实现B/S架构下的网页内容的打印与精确打印。
一、用VS 2008创建Microsoft SQL Server数据库
1. 打开VS 2008,新建一个Web窗体项目。
2. 在“视图”菜单中选择“服务器资源管理器”或者使用热键Ctrl+Alt+S将“服务器资源管理器”打开,见图1。
3. 在窗口的左边栏,用鼠标右键单击“数据连接”,在弹出的浮动菜单中选择“创建新的SQL Server数据库”,则有新窗口弹出,在该窗口中选择“服务器名”,如“47012CAAD3A04CESQLEXPRESS”(如果“服务”中的SQL Server Browser没有开启,则找不到服务器名),再填上“新数据库名称”,如“library”。最后用鼠标左键单击“确定”。
4. 在图1中用鼠标的右键单击“表”,在弹出的浮动菜单中选择“添加新表”,那么在图1的右边可以在数据库中添加表的“列名”和“数据类型”等。
5. 用鼠标左键单击图1的右上角的“×”符号,有窗口出现,在窗口中单击“是”,然后又出现一个较小的窗口,在这个窗口中输入数据库的表名,如“book”,然后再单击“确定”,那么这个表就建成了,可以用手动方法或编程方法给空表添加数据。
二、页面普通打印功能的实现
1. 在“解决方案”中选择当前的项目,然后在当前项目中添加“数据集”,并在“数据集”中添加DataTable,如book。
2. 新建一个网页文件,将VS 2008中工具箱的Crystal Report Source控件拖放到网页上,然后配置报表源。这时可按报表生成向导进行报表设计。在报表生成向导中的“可用数据源”中选择前面已经创建的数据集中的那个book表。
3. 将Crystal Report Viewer控件拖放到网页上,点击Crystal Report Viewer控件设置该控件的报表源。
4. 在网页的合适位置放一个Button控件,并将Button的text属性改为“打印报表”。双击该“打印报表”按钮,打开代码页,在代码页的命名空间处引入如下命名空间:
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;
并且在Button事件中加入如下代码:
ReportDocument oRpt = new ReportDocument();
oRpt.Load(Server.MapPath("CrystalReport1.rpt"));
// CrystalReport1.rpt为前面所建的水晶报表文件的默认名。
oRpt.PrintOptions.PaperSize = PaperSize.DefaultPaperSize;
//设置纸张尺寸为默认尺寸。
PageMargins margins;
margins = oRpt.PrintOptions.PageMargins;
margins.bottomMargin = 0;
margins.leftMargin = 0;
margins.rightMargin = 0;
margins.topMargin = 0;
//以上4行为页边距的设置。
oRpt.PrintOptions.ApplyPageMargins(margins);
oRpt.PrintOptions.PrinterName = "";
//这里设置打印机名,当为空表示打印机为操作系统默认打印机。
oRpt.PrintToPrinter(1, false, 1, 1);
//代码中oRpt.PrintToPrinter(1, false, 1, 1)中的第一个参数为打印的份数
//第二个参数为是否设有逐份打印,false表是不逐份打印
//第三个参数为打印的起始页码,第四个参数为结束页码。
三、网页中精确打印功能的实现
精确打印指的是将页面内容打印到一定格式的表格、发票、证件上,实现步骤如下:
1. 将要精确打印的表格、发票、证件等进行扫描,生成图片文件,或者使用图像工具进行绘制。不管是扫描的还是绘制的,一定要与原件有同样的大小和比例。
2. 打开报表文件,在Crystal Reports 菜单上选择“插入”,再选择“ole对象”,在弹出的窗口中选择“由文件创建”,通过“浏览”在电脑上选择那个扫描或绘制的图片文件。
3. 如果精确打印的内容是由数据库管理的,那么将报表的“字段资源管理器”中的相关的数据库字段拖放在报表的表格、证件、发票的要打印的位置,根据要求设计字体、字形、大小等。如果精确打印的内容不是由数据库管理的,那么就拖入其他相关字段。如图2所示。
4. 选择刚才插入的ole对象,用鼠标右键单击该对象,选择“设置对象格式”,在弹出的窗口中勾选“抑制显示”。这样做的目的是使打印时不再打印水晶报表中的表格、证件、发票等(换句话说,这里的表格、证件、发票起的作用仅是为了能准确地将打印的内容打到指定位置),而只打印要打的相关字段。
5. 相关代码与前所提及的类似,但是如果打印的纸超过A4大小,需要修改下面的语句:
oRpt.PrintOptions.PaperSize = PaperSize.DefaultPaperSize;
如将DefaultPaperSize改成PaperA3,这里表示纸的大小为A3。
主要参考文献
[1] 邵鹏鸣. ASP.NET Web应用程序设计及开发(C#版)[M]. 北京:清华大学出版社,2007.
[2] 刘化果. Visual Basic.NET开发实例完全剖析[M]. 北京:中国电力出版社,2006.
[3] 卢智勇,等. Visual Basic.NET数据库程序设计与实例[M]. 北京:冶金工业出版社,2005.
[4] 唐远涛. 基于Web报表开发的研究与应用[D]. 成都:成都理工大学,2006.
[5] 贾洪艳,林庆. 基于.NET的高校教师绩效考评系统的设计[J]. 科技广场,2007(3).
[6] 李涛,屈展. 基于.NET的Web动态报表研究与实现[J]. 科技广场,2008(3).