我有一个表格,我有很多文本框。我希望在这些文本框中的文本框中打印文本。现在使用下面的代码进行打印。但是,文本在不同的打印机上打印的方式不同(有些打印得恰到好处,有些打印得太高等)。它以预先打印的形式打印,并带有文本空间,因此需要相当精确。我错过了什么使它在每台打印机上打印相同?
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);
}
}
}
答案 0 :(得分:1)
问题在于您忽略了文本在控件内的对齐方式。默认对齐大致等于StringFormat.Alignment = StringAlignment.Center,可以使用TextAlign属性更改按钮和复选框。您需要使用带有Rectangle和StringFormat的DrawString()重载。请注意,TextBox很棘手,您可能仍会偏离几个像素。
查看Control.DrawToBitmap()以获得完全不同的方法。
答案 1 :(得分:1)
我想知道问题是否可能与不同的打印机拉纸方式有所不同。打印机之间的文本最多相差半英寸。我希望情况并非如此,因为如果是这样的话,我只需要将我的应用程序定制到客户端的特定打印机(不理想)。还有其他人遇到过这种情况吗?
答案 2 :(得分:1)
这很可能是两件事的组合:
PageSetupDialog
来帮助您。如果您想要一致的打印,您可以使边距保持不变,但页面大小应由用户负责(然后检查以确保您的边距实际适合页面!)。OriginAtMargins
(在PrintDocument
控件上)设置为true
会对此产生很大帮助。