使用PrintDocument组件c#使用控件打印WinForm

时间:2013-05-13 07:38:38

标签: winforms visual-studio-2010 c#-4.0 printdocument

我真的不想让别人为我做我的工作,我真的很欣赏正确方向的一点。

我有几张需要打印的表格。所有这些都包含多个datagridviews和其他控件。工作卡,制造单,库存切割清单,报价单等。

我在互联网上尝试了很多可能的解决方案。由于分辨率较差,PrintForm组件几乎没用。我试过Crystal Report,取得了一些成功,我用它来生成和打印我的报价和发票。

'捕获'表单(位图)...(女巫我想在我的情况下是一个稍微好一点的替代printForm)不会把它切成以太。

MSDN Printing the Form (Visual C#)

我非常失去动力,因为这是我测试前应用程序的最后一部分。 我真的很想了解和学习关于PrintDocument组件的一切,所以我最终可以解决这个问题并获得一些VS打印体验。

我即将深入了解iText-Sharp作为我的最后手段。所以请告诉我它是否会证明是徒劳的(至少在我的情况下);非常感谢。

感谢先生或女士,感谢您的时间和可能的知识

最诚挚的问候

Herman Vercuiel New Order Form 在Crystal Reports中也生成类似的Quote Form enter image description here

我需要打印的表格......表格的数量因订购产品的类型和数量而异。

enter image description here

编辑:

我现在正在解决这个问题..

如何确保将其合并到一个页面中? 目前,表格右侧的一部分缺失。

private void CaptureScreen()
        {
            Graphics mygraphics = this.CreateGraphics();
            Size s = this.Size;
            memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
            Graphics memoryGraphics = Graphics.FromImage(memoryImage);
            IntPtr dc1 = mygraphics.GetHdc();
            IntPtr dc2 = memoryGraphics.GetHdc();
            BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
            mygraphics.ReleaseHdc(dc1);
            memoryGraphics.ReleaseHdc(dc2);
        }

1 个答案:

答案 0 :(得分:0)

表单上的控件经过优化,可在低分辨率光栅设备(屏幕)上呈现 打印优化为在高分辨率光栅设备(打印机)上渲染。

因此,如果您将表单渲染到打印机,您可能会获得非常小的打印件,或者具有低分辨率的大打印件(如屏幕)。

我不是打印专家...但是我能想到在没有低分辨率大丑像素的情况下在纸上打印表单的唯一方法是重新渲染所有表单对象:枚举所有控件在表单上,​​自己绘制控件的方式,这样你就可以确定如何在高分辨率下渲染它们。所以你可以决定按钮边框的外观,组合框,等等...

实现这样的事情看起来非常重要......

<强>更新
另一个更简单的选项可能是使用位图来进行光栅转换 您可以将屏幕作为位图抓取,在光栅到矢量转换器中传递位图,获取位图的vecotrialized版本,然后您可以直接打印这个基于矢量的图像。

但是,自动栅格到矢量转换可能有效......或者可能不起作用 你的旅费可能会改变。

也许你可以尝试“通过手”来抓取屏幕,并使用一些免费工具,如Inkscape(开始Inkskape做一个位图矢量化,导入位图,然后进入菜单路径\跟踪位图,并尝试各种选项(颜色,BW,平滑...)) 然后,如果您有良好的结果,可能you can find a raster-to bitmap tool要集成到您的应用程序中。