0

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

目前我唯一能想到的是组标题中的单个文本框,我可以将所有标题连接到其中,以及详细信息中的单个文本框,我可以将每行的所有数据放入其中。这里的问题是我会遇到许多格式问题,因为没有任何东西可以正确排列 - 因为制表符分隔在这里什么也解决不了。我可以有多个不同间距的文本框,但它最终会演变为每个数据集的不同报告。是否可以应用某种标记,以便在输入数据时保持列间距。活动报告 Richtextbox 是否尊重 html 标记?还是完全有另一种解决方案?

我会使用 Itextsharp,但它对商业产品不是免费的。

谢谢,山姆

4

1 回答 1

2

您可以动态构建一个报表,该报表将基于指定的 DataSet 输出一个简单的表,实际上是一个 System.Data.DataTable。基本上对于 DataTable 中的每一列,在标题中添加一个文本框来保存列的名称,并在 Detail 部分添加另一个文本框来保存值。

对于详细信息部分中的文本框,将其 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");
于 2013-03-09T18:32:57.617 回答