【问题标题】:C# Printing InconsistentC# 打印不一致
【发布时间】:2009-12-01 01:07:29
【问题描述】:

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

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

【问题讨论】:

    标签: c# winforms printing


    【解决方案1】:

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

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

    【讨论】:

    • 我也不确定这是否是问题所在,因为相同的文本在不同的打印机上会以不同的方式打印。
    【解决方案2】:

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

    【讨论】:

    • 所以我将此标记为正确答案,因为这是我实际所做的。我不得不针对不同的打印机进行定制,因为我似乎找不到可以解释这些差异的属性。如果有人有其他最终可行的建议,我很乐意更改正确答案。
    【解决方案3】:

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

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

    【讨论】:

    • 1.实际上,我什至不希望将页面大小留给用户,因为他们正在将此应用程序与预打印表单一起使用。在代码中的另一个位置,我实际上是在打印机上强制使用 Letter 尺寸的纸张。 2. 谢谢,今晚我试试看是否有帮助。
    • 设置 OriginAtMargins 并没有解决我的问题。我仍然得到不同打印机之间的细微差别。它很奇怪,一些文本会稍微左/右上/下移动。它甚至在文档中似乎也不一致(底部文本框将比顶部文本框更多)。还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多