Nicomendox Ответов: 1

Почему поля printdocument отличаются от полей печатной бумаги ?


Я пытаюсь нарисовать прямоугольник вокруг бумаги. Я установил левое, верхнее поля, ширину и высоту...

когда я печатаю эту страницу и когда я измеряю левое и верхнее поля, они примерно на 3 мм отличаются от установленных полей.

например, когда я устанавливаю левое и верхнее поля равными нулю
На Диалогового Окна Printpreviewdialog. Поля отображаются слева, а Верхние Поля равны нулю

Но...
После того, как я напечатал страницу, левое поле составляет 3,2 мм, а верхнее-3 мм.


Когда я использую этот код ;

e.графика.Страница-ИНФОРМЕР = GraphicsUnit.Миллиметр
e.графика.ResetTransform()
e.графика.Translatetransform С((Е.MarginBounds.Х - е.Свойство pagesettings.HardMarginX) / 100.0 F, (e.MarginBounds.Х - е.Свойство pagesettings.HardMarginY) / 100.0 F)
PrintDocument1.OriginAtMargins = True

на этот раз левое и верхнее поля на 4 мм отличаются от полей печатной бумаги.

Что я уже пробовал:

Private Sub PrintDocument1_PrintPage_1(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim grpX As Graphics = e.Graphics
        e.Graphics.PageUnit = GraphicsUnit.Millimeter
        e.Graphics.ResetTransform()
        e.Graphics.TranslateTransform((e.MarginBounds.X - e.PageSettings.HardMarginX) / 100.0F, (e.MarginBounds.X - e.PageSettings.HardMarginY) / 100.0F)
        PrintDocument1.OriginAtMargins = True

        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)
        pen.DashStyle = Drawing.Drawing2D.DashStyle.Solid
        Dim pen2 As New System.Drawing.Pen(System.Drawing.Color.Blue, 0.01F)
        Dim pen3 As New System.Drawing.Pen(System.Drawing.Color.Purple, 0.01F)
        e.Graphics.Clear(Color.White)

        Dim wdth As Decimal
        Dim hght As Decimal
        Dim topSide As Decimal
        Dim leftSide As Decimal
        Dim horzGap As Decimal
        Dim VertGap As Decimal
        Dim HorLabel As Decimal
        Dim VerLabel As Decimal

        topSide = 12.9
        hght = (33.9)
        VerLabel = 8
        VertGap = 0

        leftSide = 4.65
        wdth = (99.1)
        HorLabel = 2
        horzGap = (2.5)

        grpX.DrawRectangle(pen2, CDec(0.1), CDec(0.1), CDec(209.8), CDec(296.7))
        grpX.DrawRectangle(pen, CDec(leftSide), CDec(topSide), CDec(200.7), CDec(271.2))
         
    End Sub

MadMyche

Если вы просто распечатаете прямоугольник, будут ли размеры правильными?
Если вы печатаете на другом принтере, каковы результаты?
Или на другом компьютере / принтере?

1 Ответов

Рейтинг:
2

OriginalGriff

Проверьте лоток принтера: если бумага подается не совсем правильно, то верхнее поле может "соскользнуть", потому что бумага это делает. Если бумага не "жестко сдвинута вправо" с направляющим слайдом в нужном месте, то бумага не будет подаваться в нужном месте, и левые / правые поля будут выключены.

Проверьте бумагу: если она старая и тонкая, это может привести к ее "скольжению" во время печати. Если он слишком толстый, то он может плохо занять место, и это также перемещает отпечаток.

Проверьте настройки бумаги: если вы используете американскую мерную и метрическую бумагу, она будет выключена.

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

Попробуйте использовать другой принтер: пример, на котором вы печатаете, может иметь проблемы.

Попробуйте выполнить печать в другом драйвере: XPS или PDF и посмотрите, как выглядят поля на нем.

Попробуйте напечатать квадрат, который граничит с полями: он печатает правильный размер?

Я довольно часто печатаю на этикетке запас с C#, используя Samsung C430: и он никогда, никогда не попадает в неправильное место - так что начните с проверки вышеизложенного в этом порядке и посмотрите, что у вас есть. Вы говорите о мм здесь, и это легко получить бумагу неправильно и вызвать много несоосности.


Nicomendox

Привет. спасибо за ваше предложение. Но я использую навигатор A4 Paper. 210x297mm. проблема только в полях. нет внутри бумаги других измерений. Только левое и верхнее поля. Мой принтер Epson L382 в домашних условиях и в офисе лазерный принтер. оба они приводят к одному и тому же результату. Когда я устанавливаю ноль на левое поле в принтере PrintDocument, печатайте примерно 3,35 мм влево. если я установлю 4,65 мм, то на этот раз на бумаге останется 8 мм. когда я установил margin cdec(4.65-3.35) на этот раз печать правильная, но на странице предварительного просмотра левое поле 1.30 мм не показывает правильное поле.

MadMyche

(+5)
Я посмотрел спецификации для L382, и это на самом деле струйный принтер,
а при выполнении "нормальной" печати минимальный запас составляет 3,0 мм.
У него действительно есть опция печати без границ, но только для некоторых размеров.

Возможно, вы также захотите заглянуть в PageBordeless и посмотреть, как им пользоваться:
https://docs.microsoft.com/en-us/dotnet/api/system.printing.pageborderless?view=netframework-4.8