我想基于一些参数化数据创建自己的自定义图形,并在子报表中生成它。我在报告上放置了一个ActiveReports.Picture元素。然后,我使用System.Drawing.Graphics对象在内存中绘制图像,然后将其设置为Picture控件的Image属性。这可以正常工作,但即使将pdfExport1.ImageQuality设置为最高,生成的PDF上的图像也会模糊。
我认为直接绘制ActiveReports Document画布会更好,但我无法弄清楚如何使其工作。所有的例子都指向了相同的基本例子:
http://www.datadynamics.com/Help/ActiveReports6/topic2107.html
问题是该示例脱离了上下文。我没看到这个代码应该在哪里运行?在子报告里面?在通话报告中?完全超出报告范围?当我在报告中尝试它时,Pages属性没有页面(索引越界错误),所以我可能在错误的事件中这样做。
要明确的是,这不是数据驱动的报告。我通过参数获得了我需要的所有数据。无需DB访问。
感谢。
答案 0 :(得分:1)
在您引用的文档中的示例中,DrawLine正在绘制父文档/报表(而不是子报表)。但是,您可以在处理部分时在页面上绘图。为此,您将渲染代码放在部分的处理事件中,例如BeforePrint event或AfterPrint event(我会避免使用Format,因为使用Format时有很多警告)。
要在部分的事件中在页面上绘图,您可以从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仅适用于父报表,可能很难将绘图坐标相对于子报表的位置定向。
答案 1 :(得分:0)
看起来你必须在主页面上绘图,即使是从子报表,这就是CurrentPage为null的原因。所以子报表中的以下内容有效:
this.ParentReport.CurrentPage