0

私が所属している会社は、ActiveReports 7 のライセンスを取得する可能性が高いです。複数の Web グリッド (実際には Web グリッドではなく、zurb でレンダリングされた html に似ています) を pdf に変換する必要があるという新しいプロジェクト要件があります。コードビハインドのある時点で、それらは事実上データセットであるか、そのようなデータセットに作成できます。データセットからアクティブなレポートにデータを移動し、PDF としてレンダリングする方法はありますか? レポートをできるだけ一般的なものにしておき、すべてのデータテーブルに対して 1 つのアクティブなレポートを作成したいので、通常のようにアクティブなレポートを使用することは問題外です。

現時点で考えられる唯一のことは、すべてのヘッダーを連結できるグループ ヘッダー内の 1 つのテキスト ボックスと、各行のすべてのデータを投入できる詳細内の 1 つのテキスト ボックスです。ここでの問題は、何も適切に並べられないため、多くの書式設定の問題に遭遇することです-タブ区切りでは何も解決されないためです。さまざまな間隔で複数のテキスト ボックスを作成することもできますが、最終的にはデータセットごとに異なるレポートに発展してしまいます。データをフィードするときに列の間隔を維持できるように、ある種のマークアップを適用することは可能ですか? アクティブなレポートのリッチテキスト ボックスは HTML マークアップを尊重しますか? または、まったく別の解決策がありますか?

私は Itextsharp を使用しますが、商用製品には無料ではありません。

ありがとう、サム

4

1 に答える 1

2

指定されたDataSet、実際にはSystem.Data.DataTableに基づいて単純なテーブルを出力するレポートを動的に作成できます。基本的に、DataTableの各列について、列の名前を保持するためにヘッダーにテキストボックスを追加し、値を保持するために詳細セクションに別のテキストボックスを追加します。

詳細セクションのテキストボックスでは、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 に答える