1

我的打印机设置为 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,但我不确定另一个单位是什么,所以我无法计算出它的转换因子。

有任何想法吗?

4

3 回答 3

3

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

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

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

于 2014-03-17T14:40:24.137 回答
1

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

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

经过大量试验和错误后,我发现要将页面边界转换为毫米,您必须将其乘以 0.264583333,这是 MM 中像素的大小。

这是代码:

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)

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

于 2014-03-19T20:56:34.257 回答
0

e.Graphics.PageUnit = GraphicsUnit.Millimeter e.Graphics.DrawString(TextBox1.Text, New Font("ARIAL", 12, FontStyle.Bold or FontStyle.Italic), Brushes.Red, 105, 30, YAZI_ORTA)

于 2021-05-11T11:30:24.773 回答