C#打印不一致

C#打印不一致,c#,winforms,printing,C#,Winforms,Printing,我有一个表格,上面有许多文本框。我希望将这些文本框中的文本打印在表单上的位置。它正在使用下面的代码打印。但是,文本在不同的打印机上打印的方式不同(在某些打印机上打印得恰到好处,在某些打印机上打印得过高,等等)。它是在预先打印的表格上打印的,带有空格,因此需要相当精确。我缺少什么使它在每台打印机上都打印相同的内容 public void printDocument_PrintPage(object sender, PrintPageEventArgs e) { Pa

我有一个表格,上面有许多文本框。我希望将这些文本框中的文本打印在表单上的位置。它正在使用下面的代码打印。但是,文本在不同的打印机上打印的方式不同(在某些打印机上打印得恰到好处,在某些打印机上打印得过高,等等)。它是在预先打印的表格上打印的,带有空格,因此需要相当精确。我缺少什么使它在每台打印机上都打印相同的内容

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);
            }
        }
    }
public void printDocument\u PrintPage(对象发送方,PrintPageEventArgs e)
{    
Panel curPanel=this.FormPanel;
图形g=(图形)如图形;
钢笔aPen=新钢笔(刷子。黑色,1);
//循环浏览每个控件。确定它是复选框还是文本框,并在其中绘制信息
//在表格上的正确位置
int-xLocation,yLocation;
对于(int j=0;j
问题在于您忽略了控件内文本的对齐方式。默认对齐方式大致等于StringFormat.alignment=StringAlignment.Center,可以使用按钮和复选框的TextAlign属性对其进行更改。您需要使用DrawString()重载,该重载采用矩形和StringFormat。请注意,文本框很棘手,您可能仍会关闭几个像素


查看Control.DrawToBitmap()以了解一种完全不同的方法。

我想知道问题是否在于不同的打印机在打印纸张时存在差异。两台打印机之间的文本最大间隔为半英寸。我希望情况并非如此,因为如果是这样,我将不得不根据客户的特定打印机定制我的应用程序(不理想)。还有其他人遇到过这种情况吗?

这很可能是两种情况的结合:

  • 您需要明确设置页边距/边界。各种打印机将具有默认的页边距和页面大小设置。使用
    PageSetupDialog
    帮助您解决问题。如果您想要一致的打印,您可以使页边距保持不变,但页面大小应由用户负责(然后检查以确保页边距实际适合页面!)
  • 文本需要相对于页面边界放置在页面上。我知道您的评论说它将是,但它看起来不像是在您的代码中实际实现的。将
    PrintDocument
    控件上的
    originalmargins
    )设置为
    true
    非常有帮助

  • 我也不确定这是否是问题所在,因为相同的文本在不同的打印机上打印的方式不同。1。事实上,我甚至不希望页面大小留给用户,因为他们正在使用这个应用程序和预打印的表单。在代码中的另一个位置,我实际上在打印机上强制使用字母大小的纸张。2.谢谢,今晚我将尝试一下,看看是否有帮助。设置边界并不能解决我的问题。不同的打印机之间的差别仍然很小。很奇怪,有些文字会稍微向左/向右上/下移动。它甚至在文档中看起来也不一致(底部的文本框将比顶部的文本框更差)。还有其他想法吗?所以我把这个标记为正确答案,因为这就是我实际做的。我不得不根据不同的打印机进行定制,因为我似乎找不到一个属性来解释这些差异。如果有人有其他的建议,我会很高兴地改变正确的答案。