Поля и значения Printdocument неверны на печатной бумаге..
Привет. Я пытаюсь печатать адресные этикетки.
e.графика.Страница-ИНФОРМЕР = GraphicsUnit.Миллиметр
Поля меток в PrintDocument являются :
Верхнее поле = 12,9 мм
Левое поле = 4,65 мм
Зазор между этикетками = 2,5 мм
Высота этикетки = 33,9 мм
Ширина этикетки = 99,1 мм
Но когда я печатаю на бумаге результат :
Левое поле = 4,5 мм (на Принтдокументе 4,65 мм)
Верхнее поле : 12.00 мм (на Принтдокументе 12.9 мм)
Высота этикетки = 33.00 мм (на Принтдокументе 33.9 мм)
Ширина этикетки = 99,00 мм
Зазор лагеля = 2,0 мм (на Принтдокументе 2,5 мм)
все поля десятичные... и я не округляю значение маржи. Использовал Математику.Усечение(число), чтобы отключить раунд.
Почему все значения полей становятся ниже округленными, почему я не могу получить реальные десятичные значения после печати на бумаге ?
Что я уже пробовал:
Private Sub PrintDocument6_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument6.PrintPage e.Graphics.PageUnit = GraphicsUnit.Millimeter PrintDocument6.DefaultPageSettings.PaperSize = New System.Drawing.Printing.PaperSize("Paper Size Name", 210, 297) PrintDocument6.DefaultPageSettings.Margins = New Margins(0, 0, 0, 0) Dim style As FontStyle = FontStyle.Regular Dim fonts As Font = New Font(New FontFamily("Monotype Corsiva"), 12, style) Dim pen As New System.Drawing.Pen(System.Drawing.Color.Black, 0.01F) Dim grpX As Graphics = e.Graphics Dim wdth As Decimal Dim hght As Decimal Dim horzGap As Decimal Dim HorLabel As Decimal Dim VerLabel As Decimal hght = Math.Truncate(((33.9) * 100) / 100) VerLabel = 8 wdth = Math.Truncate(((99.1) * 100) / 100) HorLabel = 2 horzGap = Math.Truncate(((2.5) * 100) / 100) For B = 12.9 To (hght * VerLabel) Step (hght) For A = 4.65 To (wdth * HorLabel) Step (wdth + horzGap) Dim rectX As Rectangle = New Rectangle((A), (B), (wdth), (hght)) grpX.DrawRectangle(pen, rectX) Next Next End Sub
Peter_in_2780
Взгляните на это https://docs.microsoft.com/en-us/dotnet/api/system.drawing.graphicsunit?view=netframework-4.8 и связанные страницы. Вероятно, вам нужно работать в RectangleF, а не в прямоугольниках, округляя или Усекая их в последний момент.
Nicomendox
Dim rectX As Rectangle = новый прямоугольник(математика.Усечение(А), Матем.Усечение(B), Математика.Усечение(wdth), математика.Усечение(hght))
Дим rectf как RectangleF = RectangleF.op_implicit такая перегрузка возможна(rectX)
Dim rect2 As Rectangle = Прямоугольник.Усечение(rectf)
'grpX.DrawRectangles(pen, New RectangleF() {rectf}) '(pen, rectf)
e.графика.DrawRectangle(pen2, rect2)
grpX.DrawRectangles(pen, New RectangleF() {rectf})
К сожалению, тот же результат. ценности всегда вокруг рассвета.