C#打印不一致

时间:2009-12-01 01:07:29

标签: c# winforms printing

我有一个表格,我有很多文本框。我希望在这些文本框中的文本框中打印文本。现在使用下面的代码进行打印。但是,文本在不同的打印机上打印的方式不同(有些打印得恰到好处,有些打印得太高等)。它以预先打印的形式打印,并带有文本空间,因此需要相当精确。我错过了什么使它在每台打印机上打印相同?

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);
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

问题在于您忽略了文本在控件内的对齐方式。默认对齐大致等于StringFormat.Alignment = StringAlignment.Center,可以使用TextAlign属性更改按钮和复选框。您需要使用带有Rectangle和StringFormat的DrawString()重载。请注意,TextBox很棘手,您可能仍会偏离几个像素。

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

答案 1 :(得分:1)

我想知道问题是否可能与不同的打印机拉纸方式有所不同。打印机之间的文本最多相差半英寸。我希望情况并非如此,因为如果是这样的话,我只需要将我的应用程序定制到客户端的特定打印机(不理想)。还有其他人遇到过这种情况吗?

答案 2 :(得分:1)

这很可能是两件事的组合:

  1. 您需要明确设置页边距/边界。各种打印机将具有默认边距和页面大小设置。使用PageSetupDialog来帮助您。如果您想要一致的打印,您可以使边距保持不变,但页面大小应由用户负责(然后检查以确保您的边距实际适合页面!)。
  2. 需要将文本放在与页面边界相关的页面上。我知道你的评论会说它会,但看起来它实际上并没有在你的代码中实现。将OriginAtMargins(在PrintDocument控件上)设置为true会对此产生很大帮助。