2

我正在使用带有 VS2010 的 c# 制作桌面应用程序,该应用程序的目的是填写表格(表格是其中有空格的物理纸)所以我的程序必须在确切的位置打印我想要的文本我需要打印它。

我的代码是这样的:

private void urinePrintDocument_PrintPage(object sender,System.Drawing.Printing.PrintPageEventArgs e)
    {
        //## event handler for urine printing

        string FieldValue = ""; // to hold the current text to be printed
        SolidBrush BlackBrush = new SolidBrush(Color.Black);
        Font MyFont = new Font("Arial", 12, GraphicsUnit.Point); //the font to be used
        int myFontHeight = (int)(MyFont.GetHeight(e.Graphics));
        int CurrentX, CurrentY;

        //millimeter XXXX
        //inch  XXXXX
        //display - error
        //Document - very small

        // 100 Pixel = 1 inch
        //100 Point - 1 inch
        // 100 world - 1 inch

        CurrentX = 0;
        CurrentY = 0;
        FieldValue = ptName;
        e.Graphics.DrawString(FieldValue, MyFont, BlackBrush, CurrentX, CurrentY);

        CurrentX = 100;
        CurrentY = 100;
        FieldValue = ptFileNumber;
        e.Graphics.DrawString(FieldValue, MyFont, BlackBrush, CurrentX, CurrentY);


    }

我的问题是关于这条线

Font MyFont = new Font("Arial", 12, GraphicsUnit.Point); //the font to be used

特别是 GraphicsUnit.Point 枚举器。我们有 GraphicsUnit.Point ,mmimeter ,inch,display ,Document,Pixel ,Point 和 world 。我已经尝试了所有这些,发现最后 3 个按预期打印文本,并且似乎每 100 个单位将文本“置换”一英寸。我需要我的代码在所有类型的打印机上产生相同的结果 3 之间有什么区别吗?我应该用哪一个在打印机上打印?

4

1 回答 1

3

您在纸上绘制的所有内容都会自动缩放以适应打印机分辨率,它根本不受字体大小的影响。默认缩放比例是 GraphUnit.Display,这是一种将 100 像素映射到一英寸的缩放比例,您已经发现了它。这是一种方便的缩放模式,因为监视器通常设置为每英寸 96 点,因此您打印的所有内容(几乎)都与屏幕上显示的大小相同。

您创建的字体大小仅与您在纸上绘制文本的确切位置相关。换句话说,就是传递给 Graphics.DrawString() 的 PointF.Y 值。您需要知道字体的行距(以像素为单位,而不是点),请使用 MyFont.Height。

于 2013-11-12T09:58:57.067 回答