我正在使用带有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之间有什么区别吗?我应该用哪一个在打印机上打印?
答案 0 :(得分:3)
您绘制到纸张上的所有内容都会自动缩放以适合打印机分辨率,完全不受字体大小的影响。默认缩放是GraphUnit.Display,一个将100像素映射到一英寸的缩放,您已经发现了它。这是一个方便的缩放模式,因为显示器通常设置为每英寸96点,因此您打印的所有内容(几乎)都与屏幕上显示的大小相同。
您创建的字体大小仅与您在纸上绘制文本的确切位置相关。换句话说,您传递给Graphics.DrawString()的PointF.Y值。你需要知道字体的行间距(以像素为单位,而不是点数),使用MyFont.Height。