Конвертировать единицы печати в ММ

У меня установлен принтер на ММ. Я пытаюсь понять, как центрировать текст при печати, используя следующий код:

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)

Теперь я знаю, что речь идет о единицах, и я думаю, что одна в ММ, но я не уверен, что такое другая единица, поэтому я не могу определить коэффициент пересчета для него.

Есть идеи?

5 ответов

Graphics.PageUnit по умолчанию, который вы получаете в обработчике события PrintPage, это GraphicsUnit.Display. Который отображает 100 пикселей на дюйм. Это удобная настройка, она позволяет рисовать объекты на бумаге примерно того же размера, что и вы, когда рисуете их на экране. Видеоадаптеры обычно работают с разрешением 96 точек на дюйм. Помогает вам написать графический код, который работает как для принтера, так и для экрана.

Вы можете просто переназначить его. Вы, конечно, ищете GraphicsUnit.Millimeter.

Имейте в виду, что это никак не влияет на центрирование текста. Что, конечно, работает так же хорошо, когда вы измеряете в миллиметрах, как в 0,01 дюйма.

После долгих потрясений я сделал это:

В основном я установил графический блок на миллиметры. Несмотря на то, что это было установлено, границы страницы по-прежнему возвращаются в пикселях, НО строка мера возвращает миллиметры.

После многих проб и ошибок я обнаружил, что для преобразования границ страницы в миллиметры необходимо умножить его на 0,264583333, это размер пикселя в миллиметрах.

Вот код:

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)

Я надеюсь, что это помогает другим.

          Public Class Form1

 Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
  e.Graphics.PageUnit = GraphicsUnit.Millimeter

  Dim TEXT_RIGHT As New StringFormat
  TEXT_RIGHT.LineAlignment = StringAlignment.Center
  TEXT_RIGHT.Alignment = StringAlignment.Far

  Dim TEXT_LEFT As New StringFormat
  TEXT_LEFT.LineAlignment = StringAlignment.Center
  TEXT_LEFT.Alignment = StringAlignment.Near

  Dim TEXT_CENTER As New StringFormat
  TEXT_CENTER.LineAlignment = StringAlignment.Center
  TEXT_CENTER.Alignment = StringAlignment.Center


  Dim FONT1 As Font = New Font("ARIAL", 16, FontStyle.Bold Or FontStyle.Italic)

  Dim P1 As Point = New Point(100, 20)
  e.Graphics.DrawLine(Pens.Blue, P1, New Point(P1.X, P1.Y + 150))

  e.Graphics.DrawString("THIS IS CENTERED TEXT", FONT1, Brushes.Red, _
                        P1, TEXT_CENTER)

  P1 = New Point(P1.X, P1.Y + 10)
  e.Graphics.DrawString("THIS IS RIGHT TEXT", FONT1, Brushes.Red, _
                        P1, TEXT_RIGHT)

  P1 = New Point(P1.X, P1.Y + 10)
  e.Graphics.DrawString("THIS IS RIGHT LEFT", FONT1, Brushes.Red, _
                          P1, TEXT_LEFT)

 End Sub

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  PrintPreviewControl1.Width = Me.Width - PrintPreviewControl1.Left - 50
  PrintPreviewControl1.Height = Me.Height - PrintPreviewControl1.Top - 50
  PrintPreviewControl1.Document = PrintDocument1
 End Sub
End Class
        Dim YAZI_ORTA As New StringFormat
  YAZI_ORTA.LineAlignment = StringAlignment.Center
  YAZI_ORTA.Alignment = StringAlignment.Center

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

Другие вопросы по тегам