Как использовать предварительный просмотр печати на форме - PullRequest
0 голосов
/ 30 ноября 2018

У меня большой отчет, состоящий из более десятка вложенных отчетов.Все это зависит от данных и пользователей PrintDocument и PrintPreview.Все это прекрасно работает.

Теперь я хотел бы предоставить пользователю возможность редактирования.Это позволит им изменить отчет так, как они считают нужным.Лучший способ, который я могу придумать, - использовать один и тот же код для печати в форме.Отчет измеряется в дюймах.Я попытался использовать 96-кратное измерение (96 пикселей на дюйм), но оно кажется слишком маленьким.Это было единственное преобразование, которое я смог найти.

Мне было интересно, знал ли кто-нибудь о хорошем коэффициенте преобразования до того, как я его взломал.

Это отчет: Отчет об инвентаризации

Это то, что у меня есть: Редактор отчетов инвентаризации

Я переключаюсь между печатью на бумаге и формой с этим кодом (если mfrmForm - ничто (null) затем распечатайте на бумаге, в противном случае распечатайте в форме):

If mfrmForm IsNot Nothing Then
    e = New PrintPageEventArgs(mfrmForm.CreateGraphics, New Rectangle(New Point(25, 25), New Size(New Point(825, 1075))), e.PageBounds, e.PageSettings)
End If

Select Case eAlign
    Case HardCopy.Alignment.Center
        If mfrmForm Is Nothing Then
            e.Graphics.DrawString(strText, PrintFont, New SolidBrush(PI.Color), (PC.Left + (PC.Width - sngTextWidth) / 2), sngYPosition)
        Else
            lbl = New System.Windows.Forms.Label
            With lbl
                If PI.Background IsNot Nothing Then
                .BackColor = Color.FromArgb(PI.Background.GetValueOrDefault) ' Color.FromArgb(CInt(C.Color))
                End If
                .ForeColor = PI.Color
                .Font = PrintFont
                .Location = New Point(CInt(((PC.Left + (PC.Width - sngTextWidth) / 2) * 96).ToString), CInt((sngYPosition * 96).ToString))
                .Text = PI.Text
                .Visible = True
            End With
            mfrmForm.Controls.Add(lbl)
        End If

End Select

PI и PC - это просто объекты (PrintItem и PrintColumn) для хранения значений.Мне нужно будет преобразовать обратно в дюймы, чтобы данные сохранялись.Я надеюсь, что кто-то может иметь некоторые знания в этой области, прежде чем я взломаю свой путь в нее.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...