2009-04-09 54 views
0

我試圖使用PrintDocument輸出DataGridView。在我的PrintPage事件處理程序中,我使用e.Graphics對象繪製一些網格線,然後在創建的「單元格」中打印一些文本 - 另一方面,這確實應該由微軟完成,但我離題了。當我使用轉換時,我的打印輸出看起來不像打印預覽

無論如何,這工作得很好。 PrintDocument綁定到PrintPreviewDialog,當我打開它時,DGV被正確渲染。用戶可以單擊預覽對話框的打印按鈕並打印輸出。我的問題是,有時DGV對於頁面來說太寬,所以我希望能夠縮放(僅水平)來適應。我打電話

e.Graphics.ScaleTransform(printableWidth/gridWidth) 

在我真正開始繪製任何東西之前。這使預覽看起來完全按照我想要的方式進行,但出於某種原因,實際的打印輸出看起來與我在添加縮放代碼之前所做的完全相同 - 如果報告太寬,它會偏離這一頁!

PrintPage事件的預覽方式與發送給打印機的方式有什麼區別嗎?我的普通PostScript辦公激光打印機不能處理ScaleTransform功能嗎?我認爲它應該只是盲目打印發送給它的內容,但也許涉及的處理比我想象的要多。

回答

0

好吧,我發現我的問題 - 我以爲我爲每個頁面調用ScaleTransform,但事實證明它只是在第一次調用PrintPage處理程序時才實際執行。隨後的呼叫由於包含條件而跳過了線路。所以對智者來說 - 確保如果您想轉換打印輸出,您可以爲每個頁面單獨執行。