简介
几个星期前,我有一个看似简单的的问题。我的应用程序有一个复杂的用户控制,代表了一份报告,和我的客户决定,他希望能够打印到一个页面。我想,"会是多么艰难quot?;背景
妄图图这一点我自己的后一个小时,老同事查询,然后通过这个论坛和其他一些无觅处,我发现只有少数的提示和代码片断。我可以打印控制 - 但它是真正微小,而坐在角落页面。很显然,我需要找出如何适当规模的东西。所以,我卷起我的袖子和鸽子... ...我们在这里。
之前,你会发现这篇文章有用的一个基本要求是有一个用户控件(或形式),打印一整页有意义。一些小的控制扩大到一整页时,看起来荒谬一些滚动屏幕的路数将有可能难以辨认时缩小到适合在一张纸上。但是,基本的技术,我现在应该给你,你可能会如何处理这些案件的线索。使用代码
打印缩放的对象竟然是相当简单... ...一旦你已经知道如何做到这一点。
所有自定义打印的基本概念是使用一个PrintDocument,可能是由您的表单拥有PrintPage事件。在您的事件处理程序,可以调用自定义控件的类的方法,在这里你可以封装任何特殊需求,控制有可能。
在我的形式,我有一个属性,CurrentReportControl当前查看的报告,这点,等我的PrintPage事件处理程序看起来像这样:/// <summary>
/// Print document wants to print a page.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
CurrentReportControl.PrintToGraphics(e.Graphics, e.MarginBounds);
}
PrintPageEventArgs的对象提供了一个图形对象上画出任何你想要的,它定义页边距。我通过这些PrintToGraphics()我自定义的控制方法。
这种方法绘制的控制位图,然后绘制位图的Graphics对象与适当的缩放。护理是采取以最大限度地提高打印页的使用,不改变在屏幕上看到的控制的宽高比:{C}兴趣点
自己分心,我发现一个有趣的话题是Graphics.PageUnit财产,定义为各种不同的图形对象换算比例,如显示器,打印机,等等。历史1.0 - 首次发行。