У меня проблема с
e.Graphics.DrawString(TextToPrint, Font, Brush, New RectangleF(StartPositionX, StartPositionY, Width, Height))
Допустим, я хочу напечатать "Hello World" в Arial-20pt при 25 мм по оси X от левого края.Кроме того, я использую версию с Arial-50pt.
Для этого я устанавливаю
e.Graphics.PageUnit = GraphicsUnit.Millimeter
и
PrintDocument.OriginAtMargins = False
Я печатаю PDF через "PDFCreator" ииспользуйте измерительный инструмент Acrobat Reader.
Положение на оси Y является желаемым.Проверьте!
"H" начинается примерно с 26,6 мм (Arial-20pt) / 29,3 мм (Arial-50pt).
Поэтому я также печатаю прямоугольник в тех же начальных точках с помощью
e.Graphics.FillRectangle
и залейте его зеленым.
Этот прямоугольник начинается с 25 мм !!
Так что я предполагаю, что вокруг текста есть своего рода поле.На оси Y можно найти самую низкую точку «H» с помощью «CellAscent».
Есть ли значение / функция для оси X?
Вот мой код:
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))