2012-12-18 82 views
1

我有一个窗体,其主面板是一个FlowLayoutPanel,正是我想要打印的(它被设计成看起来像一个很好格式化的文档...没有按钮等......你右键单击命令)。如何为打印尺寸大于屏幕尺寸的窗体或FlowLayoutPanel设置尺寸?

因此,我利用DrawToBitmap来实现几乎免费的打印...我只是调整窗体大小,使主面板是用户想要打印的纸张大小(减页边距)会导致它自动按照该尺寸流动其内容。然后,我使用DrawToBitmap将该FlowLayoutPanel及其所有内容呈现给打印页面。我甚至可以通过增大比页面大小(相同宽高比)更大的窗口进行缩放,然后缩放从DrawToBitmap获得的位图。伟大的作品...

但它只适用于如果你的屏幕大于页面大小!因为任何尝试调整窗体或控件的大小超过屏幕大小+ 12像素的方向都会受到挫败。

唉!如果你要通过拒绝调整大于屏幕的大小来杀死它的适用性,为什么取笑我的DrawToBitmap的简单性和实用性? (修辞)

我的问题:

有没有办法来规避这一限制,并获取表单或FlowLayoutPanel的调整大小大于屏幕?

如果没有,有没有办法到达FlowLayoutPanel的滚动表面(不只是滚动到视图中的部分),以便我可以调整它的大小以匹配打印的页面,并且可以在其上调用DrawToBitmap?

如果没有,是否有其他方法可以利用我现有的布局功能进行打印?或者我坚持重写所有的WinForms代码,只是为了生成相同的位图,如果我的屏幕比我的打印页面大,它已经生成了?

+0

您是否真的看过打印输出?您一定注意到了屏幕上的每个像素如何变成纸上的6x6斑点。特别是在反锯齿文本上非常难看。在您提交糟糕的解决方案之前,请比较PrintDocument的输出。 –

+0

是的,我们已经看过打印输出......没有6x6的斑点。文字很流畅。如果我们正在做一个屏幕刮(CopyFromScreen),那么我们会看到你在说什么......但我们不是。我们正在做Draw​​ToBitmap,它调用OnPrint而不是OnPaint,传入由打印机生成的位图/设备上下文...以及其高DPI ...因此,当它将文本绘制到该位置时,它使用打印机的更高分辨率(尽管像素尺寸保持不变)。它实际上效果惊人。 –

+0

这就是说,它不是Postscript的高质量文本......但是我们的应用程序并不是试图生成杂志质量的文档......它是一个工程应用程序......它的很多精细分辨率让工程师们很高兴阅读它(并绘制它等)。但是,如果您要创建用于发布或销售的文档,这肯定不是最好的方法。 –

回答

0

我不确定,但是有可能这样做都是虚拟的。 IE:

Dim FLP as FlowLayoutPanel = Form1.FlowLayoutPanel1 
For Each flp_subobject as Object in FlowLayoutPanel.Children 
    FLP.Children.Add(flp_subobject) 
Next 
FLP.Height = MASSIVEHEIGHT 
FLP.Width = MASSIVEWIDTH 
DrawToBitmapFunction(FLP) 

这是我会怎么做,不是说我有很多方面的经验,超出屏幕范围的等让我知道如何去这个,因为它非常简单,只是这么直截了当地说出我的头对现货:D

+0

我仍在试验,但似乎所有的控制的宽度和高度设置是最大的屏幕尺寸。我可以重新实现FlowLayoutPanel的逻辑,使我从每个孩子身上取一个位图,然后将它们以流布局方式组装到打印平面上,但我讨厌仅仅因为一个“最大”变量而重新创建轮子。 –