首页 文章

ActiveReports作为转换为pdf机器

提问于
浏览
0

我所在的公司可能会获得ActiveReports 7许可证 . 有一个新的项目要求,需要将几个webgrids(实际上不是webgrids,但更像是使用zurb渲染的html)转换为pdf . 在代码背后的某一点上,它们是有效的数据集,或者可以创建为这样的数据集 . 有没有办法将数据从数据集传送到活动报告,然后将其作为PDF呈现出来 . 我希望尽可能保持报告的通用性,因此对所有数据表都有一个活动报告,因此使用活动报告通常会做到这一点是不可能的 .

我目前唯一能想到的是组头中的单个文本框,我可以将所有 Headers 连接起来,并在详细信息中单个文本框,我可以为每行输出所有数据 . 这里的问题是我遇到了很多格式问题,因为没有什么能正确排列 - 因为制表符分隔在这里什么也解决不了 . 我可以有多个具有不同间距的文本框,但随后它最终会转换为每个数据集的不同报告 . 是否可以应用某种标记,以便在我提供数据时保持列的间距 . 执行活动报告richtextboxes是否支持html标记?或者还有其他解决方案吗?

我会使用Itextsharp,但它不适用于商业产品 .

谢谢,山姆

1 回答

  • 2

    您可以动态构建一个报表,该报表将基于指定的DataSet输出一个简单的表,实际上是System.Data.DataTable . 基本上,对于DataTable中的每一列,在 Headers 中添加一个文本框以保存列的名称,并将另一个文本框添加到“详细信息”部分以保存该值 .

    对于详细信息部分中的文本框,将其DataField属性设置为列的名称 . 通过绑定,您可以将报表的DataSource属性设置为DataTable,然后运行报表并将其导出为PDF .

    以下代码是一个基本示例:

    var left = 0f;
    var width = 1f;
    var height = .25f;
    var space = .25f;
    
    var rpt = new SectionReport();
    rpt.Sections.Add(SectionType.ReportHeader, "rh").Height = height;
    rpt.Sections.Add(SectionType.Detail, "detail").Height = height;
    rpt.Sections.Add(SectionType.ReportFooter, "rf").Height = height;
    
    foreach (System.Data.DataColumn col in dataTable.Columns)
    {
        var txt = new TextBox { Location = new PointF(left, 0), Size = new SizeF(width, height) };
        txt.Text = col.ColumnName;
        rpt.Sections["rh"].Controls.Add(txt);
    
        txt = new TextBox { Location = new PointF(left, 0), Size = new SizeF(width, height) };
        txt.DataField = col.ColumnName;
        rpt.Sections["detail"].Controls.Add(txt);
        left += width + space;
    }
    
    rpt.DataSource = dataTable;
    rpt.Run();
    var pdf = new PdfExport();
    pdf.Export(rpt.Document, @"c:\Users\scott\downloads\test.pdf");
    

相关问题