Рисование и печать таблицы - Visual Basic .NET
Формулировка задачи:
Доброго времени суток.
Появилась необходимость вывода на печать таблицы. В принципе ничего сложного. Но есть один неприятный момент - распечатанная таблица получается мутная, границы линий размыты. Сначала реализовал печать так:
Открывается форма, на которой расположен PictureBox.
В PictureBox загружен графический файл - рисунок таблицы с подписями.
На PictureBox, рядом с подписями, располагаю Label'ы, в которые программно вписываю необходимые данные.
Далее распечатываю методом PrintForm - получается мутно.
Если пользоваться PrintDocument, то PictureBox с фоновой таблицей распечатывается, а Label'ы нет.
Тогда сделал так:
Отказался от Label'ов и дорисовываю текст в PictureBox (с помощью Graphics.DrawString). Дорисованный текст при распечатке получается чёткий, сама же таблица с подписями остаётся мутная.
В итоге остановился на таком извращении:
Полностью рисую таблицу, рисую текст и вывожу на печать PrintDocument'ом. Всё чётко и красиво. Но код получается больно навороченный и не гибкий для изменения таблицы (по мере надобности):
Как быть? Последний метод единственный верный или можно как-то просто, чётко и красиво распечатать мою таблицу?
Спасибо.
-----
Работаю в VB.NET 2008
Листинг программы
- 'Рисуем таблицу. Размеры в миллиметрах, т.к. при распечатке они должны соответствовать заявленным
- 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())
Решение задачи: «Рисование и печать таблицы»
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д