商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

使用iTextSharp来开发报表

作者:dahuzizyd  2007-06-13

【IT168 技术文档】

     在报表应用中,pdf是使用非常普遍的文件格式,几乎在所有的报表开发工具中都提供了对pdf的支持。.NET世界里,报表开发工具几乎清一色都是商业的:水晶报表,ActiveReport,Reporting Service等,开源工具实在是凤毛麟角。

    之所以会想到用iTextSharp来开发报表是基于对ActiveReport的分析。用过ActiveReport的人肯定都知道,ActiveReport的报表文件分为两个,一个是.rpx文件,是定义报表的页面布局的,实际上就是一个xml,还有一个是同名的代码文件,用来编写操作报表的代码,包括数据绑定,页面设置等等。同时,ActiveReport提供将报表导出成pdf格式的方法。我反编译ActiveReport中和pdf相关的程序集,都已经被混淆过了,没办法,好在有iTextSharp。

    iTextSharp由java下的iText移植而来,用来开发pdf应用,我们可以用它来对数据集生成表格,保存成pdf文件,然后将它打开来进行预览,下面是一个小例子。

    例子用的表名为“Users”,有三个字段:UserID,UserName,Address,随便象其中初始化几条数据。下面是C#的代码,加载数据部分的就略去了,生成的报表显示有一个表头“UserList”,接下来有一个日期,再下来是一个有三列的表格,分别显示UserID,UserName,Address。生成pdf后再打开进行浏览。

Document document = new Document(PageSize.A4, 20, 20, 20, 20); PdfWriter.GetInstance(document, new FileStream("sample.pdf", FileMode.Create)); document.Open(); Table datatable = new Table(3); datatable.Padding = 4; datatable.Spacing = 0; float[] headerwidths = { 10, 24,24}; datatable.Widths = headerwidths; datatable.WidthPercentage = 100; Paragraph g =new Paragraph("User List"); g.Alignment = iTextSharp.text.Rectangle.ALIGN_CENTER; document.Add(g); string s = System.DateTime.Now.ToShortDateString(); Paragraph g1 = new Paragraph(s); g1.Alignment = iTextSharp.text.Rectangle.ALIGN_RIGHT; g1.Font.Size = 8; document.Add(g1); datatable.DefaultCellBorderWidth = 1; datatable.DefaultHorizontalAlignment = 1 ; datatable.DefaultRowspan = 1; iTextSharp.text.Font f = FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD); iTextSharp.text.Font f1 = FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL); datatable.AddCell(new Phrase("ID", f)); datatable.AddCell(new Phrase("Name", f)); datatable.AddCell(new Phrase("Address", f)); foreach (DataRow dr in this.database1DataSet1.Tables[0].Rows) { datatable.DefaultHorizontalAlignment = Element.ALIGN_LEFT; datatable.AddCell(new Phrase(dr[0].ToString(), f1)); datatable.AddCell(new Phrase(dr[1].ToString(), f1)); datatable.AddCell(new Phrase(dr[2].ToString(), f1)); } document.Add(datatable); document.Close(); System.Diagnostics.Process.Start("sample.pdf");

    最后的运行效果,可能不太清楚:

    从上面的代码也可以看出,对pdf的操作,生成表格都是一句句代码写的,简单的报表还可以应付,如果是复杂的报表,这样干就有些吃力了。

    显然,使用iTextSharp,最大的优势就是对代码的完全控制。同时最大的问题就是报表设计器的缺失,有了报表设计器,将其保存为xml,然后用iTextSharp将xml文件载入,来确定报表布局,再配合自己写的代码生成报表。这样既能照顾到开发效率,又能照顾到灵活性,毕竟iTextSharp是开源的,出了问题自己也好跟踪定位。

    说到底,目前问题只解决了一半,如果想节约点成本,同时应用也比较简单,这条路也还是可以不错的。

1
【内容导航】
第1页: 第1页
©版权所有。未经许可,不得转载。
[责任编辑:振宇]