在 x 轴上打印:起始位置不准确 - x 轴是否有 value/function?
Printing on the x-axis: start position not exact - is there a value/function for the x-axis?
我遇到了
的问题
e.Graphics.DrawString(TextToPrint, Font, Brush, New RectangleF(StartPositionX, StartPositionY, Width, Height))
假设我想在距左边缘 x 轴 25mm 的 Arial-20pt 中打印 "Hello World"。另外我用的是Arial-50pt的版本
为此我设置了
e.Graphics.PageUnit = GraphicsUnit.Millimeter
和
PrintDocument.OriginAtMargins = False
我通过 "PDFCreator" 打印 PDF 并使用 Acrobat Reader 的测量工具。
y轴上的位置是你想要的。检查!
"H" 开始于大约 26.6mm (Arial-20pt) / 29.3mm (Arial-50pt)。
所以我也在
的相同起点打印了一个矩形
e.Graphics.FillRectangle
并将其填充为绿色。
这个矩形从 25mm 开始!!
所以我假设文本周围有一些边距。在 y 轴上,可以借助 "CellAscent".
找到 "H" 的最低点
x轴有value/function吗?
这是我的代码:
e.Graphics.PageUnit = GraphicsUnit.Millimeter
PrintDocument.OriginAtMargins = False
TextToPrint = "Hello World"
Font = New Font("Arial", 20)
Brush = Brushes.Black
StartPositionX = 25
StartPositionY = 30
Width = 50
Height = 60
我想使用 "H" 的第一个左下像素的确切位置作为我的起点。对于 y 轴,这有效:
CellAscent = Font.Size * CSng(Font.FontFamily.GetCellAscent(Font.Style)/ Font.FontFamily.GetEmHeight(Font.Style))
StartPositionY = StartPositionY - CellAscent
调整后我使用
e.Graphics.DrawString(TextToPrint, Font, Brush, New RectangleF(StartPositionX, StartPositionY, .Width, .Height))
已解决
C# Font character rendering (GDI Bug)
“要避免这些问题,请执行以下操作:
始终向 MeasureString 和 DrawString 传递一个基于印刷 StringFormat (GenericTypographic) 的 StringFormat 对象。
-和-
将 TextRenderingHint 图形设置为 TextRenderingHintAntiAlias 。
这些措施禁用了在运行端添加的额外1/6 em,通过使用抗锯齿避免了网格拟合的问题
和子像素字形定位,并产生完美可缩放的文本”
(来自:http://support.microsoft.com/kb/307208)
DrawString(myText, myFont, myBrush, myPoint, StringFormat.GenericTypographic)
我遇到了
的问题e.Graphics.DrawString(TextToPrint, Font, Brush, New RectangleF(StartPositionX, StartPositionY, Width, Height))
假设我想在距左边缘 x 轴 25mm 的 Arial-20pt 中打印 "Hello World"。另外我用的是Arial-50pt的版本
为此我设置了
e.Graphics.PageUnit = GraphicsUnit.Millimeter
和
PrintDocument.OriginAtMargins = False
我通过 "PDFCreator" 打印 PDF 并使用 Acrobat Reader 的测量工具。
y轴上的位置是你想要的。检查!
"H" 开始于大约 26.6mm (Arial-20pt) / 29.3mm (Arial-50pt)。
所以我也在
的相同起点打印了一个矩形e.Graphics.FillRectangle
并将其填充为绿色。
这个矩形从 25mm 开始!!
所以我假设文本周围有一些边距。在 y 轴上,可以借助 "CellAscent".
找到 "H" 的最低点x轴有value/function吗?
这是我的代码:
e.Graphics.PageUnit = GraphicsUnit.Millimeter
PrintDocument.OriginAtMargins = False
TextToPrint = "Hello World"
Font = New Font("Arial", 20)
Brush = Brushes.Black
StartPositionX = 25
StartPositionY = 30
Width = 50
Height = 60
我想使用 "H" 的第一个左下像素的确切位置作为我的起点。对于 y 轴,这有效:
CellAscent = Font.Size * CSng(Font.FontFamily.GetCellAscent(Font.Style)/ Font.FontFamily.GetEmHeight(Font.Style))
StartPositionY = StartPositionY - CellAscent
调整后我使用
e.Graphics.DrawString(TextToPrint, Font, Brush, New RectangleF(StartPositionX, StartPositionY, .Width, .Height))
已解决
C# Font character rendering (GDI Bug)
“要避免这些问题,请执行以下操作:
始终向 MeasureString 和 DrawString 传递一个基于印刷 StringFormat (GenericTypographic) 的 StringFormat 对象。 -和- 将 TextRenderingHint 图形设置为 TextRenderingHintAntiAlias 。
这些措施禁用了在运行端添加的额外1/6 em,通过使用抗锯齿避免了网格拟合的问题 和子像素字形定位,并产生完美可缩放的文本” (来自:http://support.microsoft.com/kb/307208)
DrawString(myText, myFont, myBrush, myPoint, StringFormat.GenericTypographic)