2013-03-09 24 views
0

我與之合作的公司可能獲得ActiveReports 7許可證。有一個新的項目要求,幾個webgrids(實際上不是webgrids,但更像是用zurb呈現的html)需要轉換爲pdf。在代碼背後的一點,它們是有效的數據集,或者可以創建成這樣的數據集。是否有辦法將數據集中的數據轉換爲活動報告,然後將其呈現爲PDF格式。我希望儘可能使報告儘可能通用,並因此對所有數據表有一個主動報告,因此按照通常的做法使用主動報告是不可能的。ActiveReports作爲轉換爲pdf的機器

我現在唯一能想到的就是組頭中的單個文本框,我可以將所有頭文件連接起來,並且可以將細節中的單個文本框引入到每行中的所有數據中。這裏的問題是我遇到了很多格式問題,因爲沒有任何東西可以正確排列 - 因爲製表符分隔在這裏不會解決任何問題。我可以有不同間距的多個文本框,但最終它會轉換爲每個數據集的不同報告。是否有可能應用某種標記,以便在饋入數據時保持列的間距。執行活動報告richtextboxes尊重html標記?或者還有另一種解決方案嗎?

我會使用Itextsharp,但它不是免費的商業產品。

感謝, 山姆

回答

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"); 
+0

BTW:ActiveReports中7確實有支持RTF及HTML的輸出RichTextBox控件,但我覺得上面的方法是根據您的需求更好的方法。 – 2013-03-09 18:35:25

+0

嗯 - 感謝發佈 - 我可以使用這種方法!我喜歡它的程序化。 – user1778606 2013-03-10 02:32:39