2012-07-15 61 views
1

我想根據一些參數化數據創建我自己的自定義圖形,並讓它在子報表中生成。我在報告上放置了一個ActiveReports.Picture元素。然後使用System.Drawing.Graphics對象將內存中的圖像繪製在內存中,然後將其設置爲Picture控件的Image屬性。這可以正常工作,但即使將pdfExport1.ImageQuality設置爲最高,生成的PDF上的圖像也很模糊。如何直接在ActiveReports子報表上繪圖?

我認爲直接繪製到ActiveReports文檔畫布會更好,但我無法弄清楚如何使其工作。所有的例子在那裏指向你相同的基本例如:

http://www.datadynamics.com/Help/ActiveReports6/topic2107.html

的問題是,該例子是斷章取義。我看不到這個代碼應該運行在哪裏?在分報告裏面?在通話報告中?把報告完全放大?當我在報告中嘗試它時,Pages屬性沒有頁面(索引超出界限錯誤),所以我可能會在錯誤的事件中執行此操作。

要清楚,這不是數據驅動的報告。我通過參數獲取所需的所有數據。不需要數據庫訪問權限。

謝謝。

回答

1

在您引用的文檔中的示例中,DrawLine使用父文檔/報告(而不是子報表)。但是,您可以在處理部分時繪製頁面。要做到這一點,你把你的渲染代碼放在該部分的處理事件中,如BeforePrint eventAfterPrint event(我會避免使用格式,因爲在使用格式時有許多注意事項)。

要從部分活動中繪製頁面,您可以從Section class' CurrentLocation property中找到該部分的位置。例如,繪製整個部分的對角線距離,你可以使用下面的代碼BeforePrint事件:

public void Detail_BeforePrint(object sender, System.EventArgs eArgs) 
{ 
    this.CurrentPage.BackColor = System.Drawing.Color.Purple; 
    this.CurrentPage.ForeColor = System.Drawing.Color.YellowGreen; 
    this.CurrentPage.PenStyle = DataDynamics.ActiveReports.Document.PenStyles.Dot; 
    this.CurrentPage.PenWidth = 4; 
    this.CurrentPage.DrawLine(Detail.CurrentLocation.X, Detail.CurrentLocation.Y, this.PrintWidth, Detail.Height); 
} 

此代碼應工作報表或母公司報表中的罰款。顯然,如果您想在子報表中繪製頁面,您需要將this.CurrentPage更改爲ParentReport.CurrentPage。如果你想畫相對於頁面,你可以使用類似的代碼,但使用PageEnd事件。在the PageEnd Event's documentation中有一個很好的例子。但是,PageEvents僅適用於父級報表,因此可能難以確定相對於子報表位置的圖形座標。

+0

謝謝,這是越來越近了,但仍然堅持。我似乎在預覽模式下工作正常,但我得到「未設置爲對象實例的對象引用」。在生成報告的第一個this.CurrentPage上。我在主報告的detail_format處理程序中創建了子報告,如下所示:this.subGraph.Report = new MyGraph(); – user894269 2012-07-17 01:39:56

+0

您正在訪問this.CurrentPage中哪個事件(它爲空)?還要在ReportStart事件中放置'this.subGraph.Report = new MyGraph();'。如果需要,您仍然可以從包含子報表的部分的Format事件中訪問'this.subGraph.Report',但是如果您只在ReportStart中執行'new'而不是每個'detail_format'事件。 – 2012-07-18 04:10:26