2010-09-16 141 views
0

我繼承了一些代碼來打印表單的內容,但是在紙上生成的圖像似乎具有某種陰影/模糊感,好像它試圖做防止反射但沒有做得那麼好,字母在邊緣像素化。打印Windows窗體

有沒有人知道改善最終質量的方法?

System.Drawing.Printing.PrintDocument Doc = new System.Drawing.Printing.PrintDocument(); 
      Doc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.Doc_PrintPage123); 
      Doc.DefaultPageSettings.Landscape = true; 
      Doc.DefaultPageSettings.PrinterSettings.DefaultPageSettings.Landscape = true; 
      Doc.DefaultPageSettings.PrinterSettings.Copies = 2; 
      Doc.PrinterSettings.Copies = 2; 
      Doc.Print(); 

private void Doc_PrintPage123(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
     { 
      Bitmap bitmap = new Bitmap(AForm.Width, AForm.Height); 
      AForm.DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height)); 
      e.Graphics.DrawImage(bitmap, 0, 0); 
     } 
+2

「陰影/模糊」?這就像它可以得到的一樣模糊,並且不會告訴我們你的問題。 – Joey 2010-09-16 12:15:11

+0

@joey:我的更新是否對你有所幫助 – Jon 2010-09-16 12:17:19

+0

我對此毫無頭緒。上次我試圖打印表單的時候是在VB 6中用'PrintForm'函數。但我強烈懷疑「陰影/模糊」並不是那種能夠幫助那些對此更加了解的人的細節。 – Joey 2010-09-16 12:19:40

回答

3

這很正常。打印機的分辨率比顯示器輕鬆6倍。使用默認映射(1像素= 0.01英寸),您將在打印機上獲得與屏幕大小相同的位圖。屏幕上1像素成爲打印機上6 x 6像素的斑點。是的,看起來不太好。

如果您將其繪製得小6倍,您會得到清晰的圖像。比郵票大一點。不要打印表格。利用e.Graphics來利用打印機的分辨率。當然很多工作,像Crystal Reports這樣的報告生成器很受歡迎。

+0

我同意但我不能在這種情況下使用Crystal Reports。 – Jon 2010-09-16 12:28:12

+0

好吧,用e.Graphics繪製。它看起來很棒,你可以用更適合紙張的格式展示信息。肖像模式和沒有難看的顏色斑點。 – 2010-09-16 12:36:49

0

嘗試這種情況: e.Graphics.SmoothingMode = SmoothingMode.HighQuality;

+0

沒有區別不幸的是 – Jon 2010-09-16 12:17:58

+1

請注意,對於打印抗鋸齒是一個壞主意,通常是因爲由於抖動而導致效果變差。 – Joey 2010-09-16 12:18:20

1

表單在顯示的分辨率下呈現爲位圖。模糊和像素化是由於圖像分辨率低,打印時調整大小。

有沒有好方法來提高質量。您可以嘗試調整圖像大小並應用Mamta Dalal建議的某種平滑模式,但這隻會對像素化有所幫助。

如果您確實需要更高質量,則必須使用其他機制來打印數據。使用某種報告設計器可能是最簡單的方法。

+0

我的屏幕分辨率是1920x1080,所以分辨率應該沒問題?不會使用Bitmap類更好嗎? – Jon 2010-09-16 12:36:11

+0

Hans如上所述,您的屏幕分辨率遠遠低於您的打印機分辨率,這是低質量的原因。 – 2010-09-16 13:23:32

+0

不使用位圖,你的意思是使用一個圖像?它將以相同的結果結束。如果您想提高質量,則無法使用當前使用的表格打印方法。 – 2010-09-16 13:24:24