返回首页

简介
几个星期前,我有一个看似简单的的问题。我的应用程序有一个复杂的用户控制,代表了一份报告,和我的客户决定,他希望能够打印到一个页面。我想,"会是多么艰难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 - 首次发行。

回答

评论会员:busbby 时间:2012/01/25
喜tystent,你的文章是易读且易于遵循一步一步。不过,我这里有一个问题,如果用户控件(例如有一个滚动条竖线)?任何程度的线索,通过消除滚动条支持网页?

在此先感谢
评论会员:tystent 时间:2012/01/25
你是问你如何打印表格延伸超过一个屏幕,因此需要一个滚动条,一次显示的部分,因此,你将如何分成多个印刷如果表单的页面上,每个正在印刷很多屏幕
评论会员:?busbby 时间:2012/01/25
Tystent,感谢您答复。

可以。这是我的问题。如果用户控制内容区只有一个单页的大小,它的绝对确定您的解决方案。如果是大于一个页面,用户控制使用滚动条。我需要打印成多个页面的内容区
评论会员:tystent 时间:2012/01/25
由于本项目的范围之外的,我就推测这里。不知怎的,你将不得不让的形式,认为这是能够利用本身没有在屏幕上滚动。首先伸出窗体的大小以适合所有的内容(实际屏幕的边界之外),然后(可能),你将有规模的整个形式固定下来,以适应屏幕。无论哪种方式,你会摆脱需要滚动。然后,如果你缩放下来,你会创建类似规模的打印机的页面,这样你会包裹到这些缩放打印机网页的整体形式的部分。你可能会失去一些决议,如果你不得不缩减,虽然

我想这就是为什么一般的打印机驱动程序和印刷是如此复杂 - 就像这样的问题:
|