1

我想根据一些参数化数据创建自己的自定义图形,并在子报表中生成它。我在报表上放置了一个 ActiveReports.Picture 元素。然后我使用 System.Drawing.Graphics 对象在内存中绘制我的图像,然后将其设置为 Picture 控件的 Image 属性。这工作正常,但生成的 PDF 上的图像是模糊的,即使将 pdfExport1.ImageQuality 设置为最高。

我认为直接在 ActiveReports Document 画布上绘图会更好,但我不知道如何使它工作。那里的所有示例都指向相同的基本示例:

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

问题是这个例子脱离了上下文。我看不到这段代码应该在哪里运行?在子报告里面?在通话报告中?完全超大报告?当我在报告中尝试它时,Pages 属性没有页面(索引超出范围错误),所以我可能在错误的事件中这样做。

需要明确的是,这不是一份数据驱动的报告。我通过参数获得了我需要的所有数据。不需要数据库访问。

谢谢。

4

2 回答 2

1

在您引用的文档的示例中,DrawLine 是在父文档/报告(而不是子报告)上绘制的。但是,您可以在处理部分时在页面上绘图。为此,您将渲染代码放在该部分的处理事件中,例如BeforePrint 事件AfterPrint 事件(我会避免使用 Format,因为使用 Format 时有很多警告)。

要从一个部分的事件中在页面上绘图,您可以从Section 类的 CurrentLocation 属性中找到该部分的位置。例如,要在 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 事件。PageEnd 事件的文档中有一个很好的例子。但是,PageEvents 仅适用于父报表,可能难以相对于子报表的位置定位绘图坐标。

于 2012-07-16T19:09:06.073 回答
0

似乎您必须在主页上绘制,甚至从子报表中绘制,这就是 CurrentPage 为空的原因。因此,子报告中的以下内容有效:

this.ParentReport.CurrentPage

http://www.datadynamics.com/forums/118838/ShowPost.aspx

于 2012-07-17T02:54:08.590 回答