2009-12-01 87 views
1

我有一個表單,我有一些文本框。我希望將這些文本框中的文本打印在表單上的位置。它正在使用下面的代碼打印。但是,文本在不同的打印機上打印的方式不同(在某些打印機上打印正確,某些打印機太高等)。它被印在預先印有文字空格的表格上,因此它需要相當準確。我錯過了什麼讓它在每臺打印機上打印相同?C#打印不一致

public void printDocument_PrintPage(object sender, PrintPageEventArgs e) 
    {  
     Panel curPanel = this.FormPanel; 
     Graphics g = (Graphics)e.Graphics; 
     Pen aPen = new Pen(Brushes.Black, 1); 

     // Cycle through each control. Determine if it's a checkbox or a textbox and draw the information inside 
     // in the correct position on the form 
     int xLocation, yLocation; 
     for (int j = 0; j < curPanel.Controls.Count; j++) 
     { 
      // Check if its a TextBox type by comparing to the type of one of the textboxes 
      if (curPanel.Controls[j] is TextBox) 
      { 
       // Unbox the Textbox 
       TextBox theText = (TextBox)curPanel.Controls[j]; 

       // Draw the textbox string at the position of the textbox on the form, scaled to the print page 
       xLocation = theText.Bounds.Left; 
       yLocation = theText.Bounds.Top; 
       g.DrawString(theText.Text, theText.Font, Brushes.Black, xLocation, yLocation); 
      } 
     } 
    } 

回答

1

我想知道如果也許問題是不同的打印機如何拉紙張的差異。文本在打印機之間最多不超過半英寸。我希望情況並非如此,因爲如果是這樣,我只需要將我的應用程序定製到客戶端的特定打印機(不理想)。有沒有其他人遇到這種情況?

+0

所以我把這個標記爲正確的答案,因爲這是我實際做的。我不得不爲不同的打印機量身定製,因爲我似乎無法找到解釋差異的屬性。如果任何人有另一個建議,最終工作,我會很樂意改變正確的答案。 – KrisTrip 2010-04-22 14:23:18

1

問題是你忽略了文本如何在控件內部對齊。默認對齊方式大致等於StringFormat.Alignment = StringAlignment.Center,可以使用TextAlign屬性更改按鈕和複選框。您需要使用帶有Rectangle和StringFormat的DrawString()重載。請注意,TextBox很棘手,您可能仍然會偏離幾個像素。

查看Control.DrawToBitmap()以獲取完全不同的方法。

+0

我也不確定這是問題所在,因爲相同的文本將在不同的打印機上以不同的方式打印。 – KrisTrip 2009-12-01 01:41:19

1

這是最有可能的兩個東西的組合:

  1. 你需要明確設置頁邊距/邊界。各種打印機將具有默認頁邊距和頁面大小設置。使用PageSetupDialog來幫助你。如果你想要一致的打印,你可以使邊距保持不變,但頁面大小應該是用戶的責任(然後檢查以確保頁面實際適合頁面!)。
  2. 需要將文本放置在與頁面邊界相關的頁面上。我知道你的評論說它會是,但它看起來不像它實際上在你的代碼中實現。將OriginAtMargins(在您的PrintDocument控件上)設置爲true可以極大地幫助您。
+0

1.我實際上甚至不想將頁面大小留給用戶,因爲他們正在使用此應用程序和預先打印的表單。在代碼的另一個位置,我實際上是在打印機上強制Letter尺寸的紙張。 2.謝謝,我今晚會試試看看是否有幫助。 – KrisTrip 2009-12-02 14:29:36

+0

設置OriginAtMargins沒有解決我的問題。我仍然在不同的打印機之間區別很小。它非常奇怪,一些文字會左右上下偏移。它在文檔中甚至看起來都不一致(底部的文本框會比頂部的文本框更多)。任何其他想法? – KrisTrip 2009-12-03 00:06:51