zoukankan      html  css  js  c++  java
  • 报表开发最后一计使用iTextSharp来开发报表

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

     

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

     

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

     

    例子用的表名为“Users”,有三个字段:UserIDUserNameAddress,随便象其中初始化几条数据。下面是C#的代码,加载数据部分的就略去了,生成的报表显示有一个表头“UserList”,接下来有一个日期,再下来是一个有三列的表格,分别显示UserIDUserNameAddress。生成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,然后用iTextSharpxml文件载入,来确定报表布局,再配合自己写的代码生成报表。这样既能照顾到开发效率,又能照顾到灵活性,毕竟iTextSharp是开源的,出了问题自己也好跟踪定位。

     

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

    另外添加一个iTextSharp的很好的资源:HardRock的blog
  • 相关阅读:
    hdoj 1305字典树水题之二
    nyoj 547 水池加水 priority_queue优先级队列初体验
    nyoj167 找奶牛病毒 “按位或”运算 递归
    HDOJ4525 吃鸡腿 腾讯马拉松(五)
    hdoj 4523 切蛋糕 腾讯马拉松 大数加法比较
    如何学好3D游戏引擎编程《转自3D游戏引擎网》
    priority_queue 优先级队列的基本应用和重载问题
    poj1611 传染病 并查集
    srand((unsigned)time(NULL))和rand()
    最近被一个windows mobile照相的问题给难住了
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/Report_iTextSharp.html
Copyright © 2011-2022 走看看