!Viper! писал(а):И какой код дает изображение не высокого качества?
Private m_memoryImage As Bitmap
.........
Private Sub CaptureScreen()
Dim mygraphics As Graphics = Me.CreateGraphics()
Dim s As Size = Me.Size
m_memoryImage = New Bitmap(s.Width, s.Height, mygraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(m_memoryImage)
memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s)
End Sub
.........
Private Sub PrintDocumentfrmMain_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _
PrintDocumentfrmMain.PrintPage
e.Graphics.DrawImage(m_memoryImage, 0, 0)
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim G As Graphics = e.Graphics
G.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
G.PageUnit = GraphicsUnit.Millimeter
'печать строки из текстового поля со смещением:
' слева - 100 мм
' сверху - 150 мм
G.DrawString(TextBox1.Text, Me.Font, Brushes.Black, 100, 150)
e.HasMorePages = False
End Sub
Шрифт barcode.ttf использую в текстовой ячейке.Nord777 писал(а):откуда ты берешь это штрих-коды? Готовые картинки? Сам рисуешь (как рисуешь)? и.т.д
Вытягивать из тебя по одному слову совсем неохота.
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
MsgBox(e.Graphics.DpiX)
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
MsgBox(e.Graphics.DpiX)
End Sub
Так PrinterResolution у меня это ReadOnly Property. Настроить рад бы, но как?GSerg писал(а):asharky, вот я не печатал из vb.net. и тем не менее я могу нажать F2 и очень быстро увидеть, что у объекта PrintDocument есть свойство PrinterSettings, а в них - PrinterResolution. Которую, очевидно, надо настроить перед печатью.
Почему так не делаешь ты?
e.Graphics.DrawImage(m_memoryImage, 0, 0)
Dim ШтрихКод As String = TextBox1.Text
Dim Fnt As New Font("barcode font", 50)
'печать злого штрих-кода
e.Graphics.DrawString(ШтрихКод, Fnt, Brushes.Black, 100, 150)
Я уже проверил: принтер действительно печатает с dpi = 300 или 600 - это уж как я выставлю его настройки. А форма рендерится с dpi = 96.Nord777 писал(а):если ты по прежнему используешь эту строку:
- Код: Выделить всё
e.Graphics.DrawImage(m_memoryImage, 0, 0)
то это неправильно. Твой битмэп имеет разрешение 96dpi.
Не надо сохранять снимок формы в битмэпе, печатай свой штрих-код в обработчике PrintPage обычным путем:
- Код: Выделить всё
Dim ШтрихКод As String = TextBox1.Text
Dim Fnt As New Font("barcode font", 50)
'печать злого штрих-кода
e.Graphics.DrawString(ШтрихКод, Fnt, Brushes.Black, 100, 150)
Ну во-первых: это не красиво. А во-вторых: на форме имеются не только текстовые контролы (TextBox), но и прочие. А "прочие" как будут рендериться с разрешением 300...6000 dpi? Сомневаюсь.... e.Graphics.DrawString применим только к шрифтовым контролам, не так-ли?GSerg писал(а):Перебрать контролы в цикле можно? Можно...
Посмотреть координаты каждого можно? Можно...
Посмотреть текст каждого можно? Можно...
Напечатать этот текст по этим координатам на принтере можно? Можно...
Что не получается тогда?..
Viewer не позволит в свои таблицы что-то там добавлять - только смотреть. А в XML формировать - ну тоже "не красиво" - сложное решение. В общем: проще свой контрол написать и в качестве dll подключатьGSerg писал(а):Excel Viewer 2003 бесплатный и позволяет печатать.
Пакет совместимости, позволяющий этим вьюером открывать файлы 2007 офиса, тоже бесплатный.
Формат файлов офиса 2007 - открытый, основанный на XML. Файлы можно генерить самому (установив FW 3.0, там средства работы с такими пакетными файлами).
Можешь пойти этим путём...
Спасибо большое. Почитаю доки, попробую что-то выжать из подобного подхода.GSerg писал(а):Ты один раз создаёшь XSL-шаблон своего отчёта.
После этого ты каждый раз генерируешь маленький файл, содержащий только данные, и тебе автоматически всё будет подставлено.
Вот так А Гениальный Билли опять всех нагнул: "Разные задачи - разные инструменты", однако... Преклоняюсь перед нимGSerg писал(а):Нет, растровая графика не тянется.
А во-вторых: на форме имеются не только текстовые контролы (TextBox), но и прочие. А "прочие" как будут рендериться с разрешением 300...6000 dpi? Сомневаюсь.... e.Graphics.DrawString применим только к шрифтовым контролам, не так-ли?
Напечатать - понятно. отрендерить с хорошим качеством - как?Nord777 писал(а):Напечатать можно практически все контролы.
По твоей просьбе код не привожу.
Сейчас этот форум просматривают: Google-бот и гости: 103