• 报表开发最后一计使用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
  • 相关阅读:
    彻底理解 volatile 关键字及应用场景,面试必问,小白都能看懂!
    Spring Security 最佳实践,看了必懂!
    面试官:MyBatis 插件有什么用途?说说底层原理?我竟然不会。。
    SQL Server shape转点
    requestbody参数不为空检校
    SpringBoot多数据源配置
    arcgis 栅格拼接2
    java List排序
    hibernate和mybatis的区别&hibernate和mybatis可以同时使用吗?
    spring data jpa和hibernate的区别
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/Report_iTextSharp.html
Copyright © 2020-2023  润新知