2009-04-09 23 views
0

我试图使用PrintDocument输出DataGridView。在我的PrintPage事件处理程序中,我使用e.Graphics对象绘制一些网格线,然后在创建的“单元格”中打印一些文本 - 另一方面,这确实应该由微软完成,但我离题了。当我使用转换时,我的打印输出看起来不像打印预览

无论如何,这工作得很好。 PrintDocument绑定到PrintPreviewDialog,当我打开它时,DGV被正确渲染。用户可以单击预览对话框的打印按钮并打印输出。我的问题是,有时DGV对于页面来说太宽,所以我希望能够缩放(仅水平)来适应。我打电话

e.Graphics.ScaleTransform(printableWidth/gridWidth) 

在我真正开始绘制任何东西之前。这使预览看起来完全按照我想要的方式进行,但出于某种原因,实际的打印输出看起来与我在添加缩放代码之前所做的完全相同 - 如果报告太宽,它会偏离这一页!

PrintPage事件的预览方式与发送给打印机的方式有什么区别吗?我的普通PostScript办公激光打印机不能处理ScaleTransform功能吗?我认为它应该只是盲目打印发送给它的内容,但也许涉及的处理比我想象的要多。

回答

0

好吧,我发现我的问题 - 我以为我为每个页面调用ScaleTransform,但事实证明它只是在第一次调用PrintPage处理程序时才实际执行。随后的呼叫由于包含条件而跳过了线路。所以对智者来说 - 确保如果您想转换打印输出,您可以为每个页面单独执行。