У меня большой отчет, состоящий из более десятка вложенных отчетов.Все это зависит от данных и пользователей 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) для хранения значений.Мне нужно будет преобразовать обратно в дюймы, чтобы данные сохранялись.Я надеюсь, что кто-то может иметь некоторые знания в этой области, прежде чем я взломаю свой путь в нее.
Спасибо