.net 将打印单位转换为毫米

.net 将打印单位转换为毫米,.net,vb.net,vb.net-2010,units-of-measurement,system.printing,.net,Vb.net,Vb.net 2010,Units Of Measurement,System.printing,我已将打印机设置为MM。 我正在尝试使用以下代码解决打印时如何将文本居中的问题: Dim CentrePage As Single CentrePage = Convert.ToString((e.PageBounds.Width / 2) - (e.Graphics.MeasureString("SENpic Report - " & Format(Now, "dddd, dd MMMM, yyyy") & " - Page " & prnPage, f).Width

我已将打印机设置为MM。 我正在尝试使用以下代码解决打印时如何将文本居中的问题:

Dim CentrePage As Single
CentrePage = Convert.ToString((e.PageBounds.Width / 2) - (e.Graphics.MeasureString("SENpic Report - " & Format(Now, "dddd, dd MMMM, yyyy") & " - Page " & prnPage, f).Width / 2))
e.Graphics.DrawString("SENpic Report - " & Format(Now, "dddd, dd MMMM, yyyy") & " - Page " & prnPage, f, br, CentrePage, 17)
现在我知道这是一个单位的问题,我想一个单位是MM,但我不确定另一个单位是什么,所以我无法计算出它的换算系数


有什么想法吗?

在PrintPage事件处理程序中获得的默认Graphics.PageUnit是GraphicsUnit.Display。它将100像素映射到一英寸。这是一个方便的设置,它使您在纸上绘制的对象与您在屏幕上绘制对象时的大小相同。视频适配器通常以每英寸96点的分辨率运行。帮助您编写适用于打印机和屏幕的图形代码

您可以简单地重新分配它。你当然在找GraphicsUnit.mm


请记住,这对文本居中没有任何影响。当然,当以毫米为单位测量时,与以0.01英寸为单位测量时一样有效。

在PrintPage事件处理程序中获得的默认Graphics.PageUnit是GraphicsUnit.Display。它将100像素映射到一英寸。这是一个方便的设置,它使您在纸上绘制的对象与您在屏幕上绘制对象时的大小相同。视频适配器通常以每英寸96点的分辨率运行。帮助您编写适用于打印机和屏幕的图形代码

您可以简单地重新分配它。你当然在找GraphicsUnit.mm


请记住,这对文本居中没有任何影响。当然,当你以毫米为单位测量时,它的效果和以0.01英寸为单位测量时一样好。

经过大量的摆弄,我已经做到了:

基本上我将图形单位设置为毫米。即使设置了该值,页面边界仍以像素为单位返回,但度量值字符串返回毫米

经过多次尝试和错误,我发现要将页面边界转换为毫米,必须将其乘以0.26458333,这是以毫米为单位的像素大小

代码如下:

e.Graphics.PageUnit = GraphicsUnit.Millimeter
Dim f As Font = New Font("Vanada", 12)
Dim br As SolidBrush = New SolidBrush(Color.Black)
Dim CentrePage As Single
Dim CentreText As String = "My Report - " & Format(Now, "dddd, dd MMMM, yyyy") & " - Page " & prnPage
CentrePage = Convert.ToString(((e.PageBounds.Width * 0.264583333) / 2) - (e.Graphics.MeasureString(CentreText, f).Width / 2))
e.Graphics.DrawString(CentreText, f, br, Int(CentrePage), 17)

我希望这对其他人有帮助。

在做了大量的修改之后,我做到了:

基本上我将图形单位设置为毫米。即使设置了该值,页面边界仍以像素为单位返回,但度量值字符串返回毫米

经过多次尝试和错误,我发现要将页面边界转换为毫米,必须将其乘以0.26458333,这是以毫米为单位的像素大小

代码如下:

e.Graphics.PageUnit = GraphicsUnit.Millimeter
Dim f As Font = New Font("Vanada", 12)
Dim br As SolidBrush = New SolidBrush(Color.Black)
Dim CentrePage As Single
Dim CentreText As String = "My Report - " & Format(Now, "dddd, dd MMMM, yyyy") & " - Page " & prnPage
CentrePage = Convert.ToString(((e.PageBounds.Width * 0.264583333) / 2) - (e.Graphics.MeasureString(CentreText, f).Width / 2))
e.Graphics.DrawString(CentreText, f, br, Int(CentrePage), 17)

我希望这对其他人有帮助。

e.Graphics.PageUnit=GraphicsUnit.mm
e、 Graphics.DrawString(TextBox1.Text,新字体(“ARIAL”,12,FontStyle.Bold或FontStyle.Italic),画笔.红色,105,30,YAZI_ORTA)

e.Graphics.PageUnit=GraphicsUnit.mm
e、 图形。抽绳(TextBox1.Text,新字体(“ARIAL”,12,FontStyle.Bold或FontStyle.Italic),画笔。红色,105,30,YAZI_ORTA)

答案很棒。但对于最佳实践,请提供解释。你只发布代码,让OP和未来的商业广告复制并粘贴你的答案,而不理解答案背后的逻辑。请提供一个带有解释的答案。非常感谢。答案很好。但对于最佳实践,请提供解释。你只发布代码,让OP和未来的商业广告复制并粘贴你的答案,而不理解答案背后的逻辑。请提供一个带有解释的答案。非常感谢。