Страница: 1 |
Страница: 1 |
Вопрос: PrintPreviwControl
Добавлено: 16.05.12 16:19
Автор вопроса: Cramper
Изображение текста и графики в PrintPreviwControl часто не соответствует тому, что выводится на принтер. Имеется в виду смещение в позициях символов. Изображение текста часто "пляшет" при зуммировании в самом окне контрола. Кто-нибудь может что-нибудь подсказать по этой проблеме?
VB 2010. Спасибо.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Дмитрий Юпатов
Вопросов: 4
Ответов: 457
Web-сайт:
Профиль | | #1
Добавлено: 16.05.12 17:10
К сожалению, это не все приколы... когда текста много (ну страниц 10 и больше), этот гад может запросто страницы начиная эдак с 5 рисовать пустыми. А при попытке отправить их на печать (если пользуем не просто контрол, а ПревьюДиалог (у него встроенная менюха есть под печать), то и пустыми их на печать отправить...
ИМХО, проще самому отрисовать задание для печати на серии картинок и потом посмотреть их в Пикчербоксе. Благо, методы рисования на странице объекта PrintDocument те же, что и на Graphics. Если правильно помню статью МСДН, то он от Graphics и унаследован.
Хотя врать не стану, пока дальше идеи у меня не пошло. Все руки не доходят до реализации своего ПревьюКонтрола.
Номер ответа: 2
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #2
Добавлено: 17.05.12 08:08
Спасибо, Дмитрий. Мне как раз и предстоит печать на многих страницах. Придется как-то выкручиваться, видимо как вы и предлагаете.
Номер ответа: 3
Автор ответа:
BG(Алексей)
Вопросов: 26
Ответов: 295
Профиль | | #3
Добавлено: 18.05.12 06:46
Ни разу не встречался с подобными проблемами.
Если правильно реализовать, все будет работать.
Номер ответа: 4
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #4
Добавлено: 18.05.12 08:16
Знать бы в чем мы поступаем неправильно?
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 19.05.12 09:15
Если есть пример в котором СТАБИЛЬНО воспроизводится ошибка, можно посмотреть. Если стабильно не воспроизводится - вперед писать на connect.microsoft.com
Номер ответа: 6
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #6
Добавлено: 21.05.12 16:15
Вот такой код. При зуммировании искажается изображение текста. Но на принтер выводится все правильно.
Dim i, pozb As Integer
Dim isa = New Integer() {20, 205, 239, 282, 348, 444, 479, 515, 590, 701, 701, 751, 790}
Dim zom As Decimal
Private WithEvents docToPrint As New Printing.PrintDocument
Private Property PrintPreviewControl1 As PrintPreviewControl
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Height = 665
Me.Width = 875
InitializePrintPreviewControl()
zom = 0.5
End Sub
Private Sub InitializePrintPreviewControl()
' Construct the PrintPreviewControl.
Me.PrintPreviewControl1 = New PrintPreviewControl
' Set location, name, and dock style for PrintPreviewControl1.
Me.PrintPreviewControl1.Location = New Point(30, 60)
Me.PrintPreviewControl1.Width = 500
Me.PrintPreviewControl1.Height = 520
Me.PrintPreviewControl1.Document = docToPrint
Me.PrintPreviewControl1.Zoom = 0.5
Me.Controls.Add(Me.PrintPreviewControl1)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
zom = zom + 0.1
Me.PrintPreviewControl1.Zoom = zom
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
zom = zom - 0.1
If zom < 0 Then
zom = 0.1
End If
Me.PrintPreviewControl1.Zoom = zom
End Sub
Private Sub docToPrint_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) _
Handles docToPrint.PrintPage
Dim i As Integer
Dim text As String = " "
Dim printFont As New Font("Arial", 8, System.Drawing.FontStyle.Italic)
pozb = 0
e.Graphics.DrawLine(Pens.Black, 20, pozb + 75, 790, pozb + 75)
text = " Наименование товара Еди- Коли- Цена Стоимость В Нало- Сумма Стоимость Страна Номер"
e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, 20, pozb + 78)
text = " (описание выполненных ница чест- тариф товаров том говая налога товаров проис- грузо-"
e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, 20, pozb + 90)
text = " работ, оказанных услуг) изме- во за единицу  работ, числе став- (работ, хожде- вой "
e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, 20, pozb + 102)
text = " изме- услуг, акциз ка услуг),всего ния тамо-"
e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, 20, pozb + 114)
text = " рения всего без с учетом жен- "
e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, 20, pozb + 126)
text = " налога налога ной- "
e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, 20, pozb + 138)
text = " (рубли) декла-"
e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, 20, pozb + 150)
text = " рации"
e.Graphics.DrawString(text, printFont, System.Drawing.Brushes.Black, 20, pozb + 162)
For i = 0 To 12
e.Graphics.DrawLine(Pens.Black, isa(i), pozb + 75, isa(i), pozb + 195)
Next
e.Graphics.DrawLine(Pens.Black, 20, pozb + 179, 790, pozb + 179)
e.Graphics.DrawLine(Pens.Black, 20, pozb + 195, 790, pozb + 195)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'ВЫВОД НА ПЕЧАТЬ hp LASER 1600
docToPrint.Print()
End Sub
End Class