2009-12-01 88 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