Рисование и печать таблицы - Visual Basic .NET

Формулировка задачи:

Доброго времени суток. Появилась необходимость вывода на печать таблицы. В принципе ничего сложного. Но есть один неприятный момент - распечатанная таблица получается мутная, границы линий размыты. Сначала реализовал печать так: Открывается форма, на которой расположен PictureBox. В PictureBox загружен графический файл - рисунок таблицы с подписями. На PictureBox, рядом с подписями, располагаю Label'ы, в которые программно вписываю необходимые данные. Далее распечатываю методом PrintForm - получается мутно. Если пользоваться PrintDocument, то PictureBox с фоновой таблицей распечатывается, а Label'ы нет. Тогда сделал так: Отказался от Label'ов и дорисовываю текст в PictureBox (с помощью Graphics.DrawString). Дорисованный текст при распечатке получается чёткий, сама же таблица с подписями остаётся мутная. В итоге остановился на таком извращении: Полностью рисую таблицу, рисую текст и вывожу на печать PrintDocument'ом. Всё чётко и красиво. Но код получается больно навороченный и не гибкий для изменения таблицы (по мере надобности):
        'Рисуем таблицу. Размеры в миллиметрах, т.к. при распечатке они должны соответствовать заявленным
        e.Graphics.PageUnit = GraphicsUnit.Millimeter
        Dim Pen1 As New Pen(Color.Black, 0.2)
        e.Graphics.DrawRectangle(Pen1, tX, tY, tW, tH)
        e.Graphics.DrawLine(Pen1, tX, tY + 8, tX + tW, tY + 8)
        e.Graphics.DrawLine(Pen1, tX, tY + 22, tX + tW, tY + 22)
        e.Graphics.DrawLine(Pen1, tX, tY + 32, tX + tW, tY + 32)
        e.Graphics.DrawLine(Pen1, tX, tY + 38, tX + tW, tY + 38)
        e.Graphics.DrawLine(Pen1, tX, tY + 46, tX + tW, tY + 46)
 
        e.Graphics.DrawLine(Pen1, tX + 43, tY + 38, tX + 43, tY + 54)
        e.Graphics.DrawLine(Pen1, tX + 21, tY + 38, tX + 21, tY + 54)
 
        ' Отрисовываем текст
        Dim printFontZag = New Font("Verdana", 11, FontStyle.Regular)
        Dim printFontInfR = New Font("Verdana", 10, FontStyle.Regular)
        Dim printFontInfB = New Font("Verdana", 10, FontStyle.Bold)
 
        e.Graphics.DrawString("Строка Тест1", printFontZag, Brushes.Black, tX + 22, tY + 1, New StringFormat())
        e.Graphics.DrawString("Строка Тест2 ", printFontInfR, Brushes.Black, tX + 10, tY + 9, New StringFormat())
        '...
        e.Graphics.DrawString("Строка Тест3", printFontInfR, Brushes.Black, tX + 3, tY + 17, New StringFormat())
Как быть? Последний метод единственный верный или можно как-то просто, чётко и красиво распечатать мою таблицу? Спасибо. ----- Работаю в VB.NET 2008

Код к задаче: «Рисование и печать таблицы - Visual Basic .NET»

textual
Private Sub Label1_DoubleClick(sender As System.Object, e As System.EventArgs) Handles Label1.DoubleClick
    PrintForm1.Form = Me
    PrintForm1.PrintAction = Printing.PrintAction.PrintToPrinter
    PrintForm1.Print()
End Sub

14   голосов, оценка 3.643 из 5


СОХРАНИТЬ ССЫЛКУ