GraphicsUnit.Point或Pixel或打印机的世界?

时间:2013-11-12 06:52:01

标签: c# printing

我正在使用带有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,毫米,英寸,显示器,文档,像素,点和世界。我已经尝试了所有这些并且发现最后3个按预期打印文本并且似乎将每100个单位的文本“移位”一英寸。我需要我的代码在所有类型的打印机上产生相同的结果3之间有什么区别吗?我应该用哪一个在打印机上打印?

1 个答案:

答案 0 :(得分:3)

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

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