首页 文章

如何直接在ActiveReports子报表上绘图?

提问于
浏览
1

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

我认为最好直接绘制ActiveReports Document画布,但我无法弄清楚如何使其工作 . 所有的例子都指向同一个基本的例子:

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

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

需要明确的是,这不是一个数据驱动的报告 . 我通过参数获得了我需要的所有数据 . 无需DB访问 .

谢谢 .

2 回答

  • 1

    在您引用的文档中的示例中,DrawLine正在绘制父文档/报表(而不是子报表) . 但是,您可以在处理部分时在页面上绘图 . 为此,您将渲染代码放在部分的处理事件中,例如BeforePrint eventAfterPrint 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仅适用于父报表,可能很难将绘图坐标相对于子报表的位置定向 .

  • 0

    看起来你必须在主页面上绘制,甚至从子报表中绘制,这就是CurrentPage为null的原因 . 所以以下子报表的工作原理:

    this.ParentReport.CurrentPage

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

相关问题