Nicomendox Ответов: 1

Поля и значения 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})

К сожалению, тот же результат. ценности всегда вокруг рассвета.

1 Ответов

Рейтинг:
1

Richard Deeming

То Truncate метод[^] выбрасывает все, что после десятичной точки. Ваш код эквивалентен:

hght = 33.0
wdth = 99.0
horzGap = 2.0
Начните с удаления Truncate вызовы и присвоение значений, которые вы действительно хотите использовать.

NB: В вашем вопросе говорится, что проблема заключается в полях страницы, но код, который вы показали, устанавливает все поля на 0.