Dobrý den. Zkouším přidávat tisk do mého programu a jsem v tom začátečník. Používám komponentu printDocument
Private Sub TiskToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TiskToolStripMenuItem.Click
Dim docPrint As PrintDocument = New PrintDocument
AddHandler docPrint.PrintPage, AddressOf docPrint_PrintPage
docPrint.Print()
End Sub
Private Sub docPrint_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles docPrint.PrintPage
minX = e.PageSettings.PrintableArea.Left - e.PageSettings.HardMarginX
minY = e.PageSettings.PrintableArea.Top - e.PageSettings.HardMarginY
maxX = e.PageSettings.PrintableArea.Width
maxY = e.PageSettings.PrintableArea.Height
Dim strDisplay As String
Dim x As Single
Dim y As Single
End Sub
' Nadpis
x = poziceX(CSng(205))
y = poziceY(CSng(148.5))
strDisplay = "Kombinace manuálního a strojního času"
DrawText(ev.Graphics, strDisplay, x, y, Brushes.Black, 90, "Arial", 16, FontStyle.Bold)
' Nadpis
x = poziceX(CSng(100))
y = poziceY(CSng(148.5))
strDisplay = "Kombinace:"
DrawText_RR_ZR(ev.Graphics, strDisplay, x, y, Brushes.Black, "Arial", 16, FontStyle.Bold)
' Nadpis
x = poziceX(CSng(120))
y = poziceY(CSng(148.5))
strDisplay = "Kombinace manuálního:"
DrawText_RR_ZR(ev.Graphics, strDisplay, x, y, Brushes.Black, "Arial", 16, FontStyle.Bold)
' Nadpis
x = poziceX(CSng(140))
y = poziceY(CSng(148.5))
strDisplay = "Kombinace manuálního a strojního času:"
DrawText_RR_ZR(ev.Graphics, strDisplay, x, y, Brushes.Black, "Arial", 16, FontStyle.Bold)
Funkce PoziceX a PoziceY použiji k převedení mm na celou tisknutelnou plochu, takže při vytváření budu pozici nápisů a pod. zadávat v mm
Friend Function poziceX(ByVal x As Single) As Single
Return (((maxX - minX) / 210) * x) + minX
End Function
Friend Function poziceY(ByVal y As Single) As Single
Return (((maxY - minY) / 297) * y) + minY
End Function
To jen tak pro úvod. 1. Nyní se snažím vyřešit pokud budu chtít tisknout dokument naležato, tak jak zarovnat otočený text vpravo. Vycházel jsem ze zde uvedeného seriálu při vytváření popisků ke grafům, ale trochu víc se ztrácím v transformacích. Navíc mi výsledný text nevyleze úplně přesně zarovnán vpravo. Každý následující řádek je posunut o dvojtečku vpravo. např.: Kombinace manuálního a strojního času: Kombinace manuálního: Kombinace: Následuje funkce k otočení textu:
Sub DrawText_RR_ZR(ByVal g As Graphics, ByVal txt As String, ByVal x As Single, ByVal y As Single, ByVal brsh As Drawing.Brush, Optional ByVal fontJmeno As String = "Arial", Optional ByVal fontVelikost As Single = 8.0, Optional ByVal fontStyl As System.Drawing.FontStyle = FontStyle.Regular)
g.TranslateTransform(x, y)
g.RotateTransform(90)
Dim fnt = New Font(fontJmeno, fontVelikost, fontStyl, GraphicsUnit.Point, CType(0, Byte))
Dim velikost As SizeF = g.MeasureString(txt, fnt)
Dim s As Single = velikost.Width
g.DrawString(txt, fnt, brsh, 0 - s, 0)
g.ResetTransform()
End Sub
2. Při odkrokovávání se mi u tohoto kroku program zdrží tak 15 vteřin, než pokračuje dál docPrint.Print() a každý tento řádek vykonává tak 8 vteřin minX = e.PageSettings.PrintableArea.Left - e.PageSettings.HardMarginX minY = e.PageSettings.PrintableArea.Top - e.PageSettings.HardMarginY maxX = e.PageSettings.PrintableArea.Width maxY = e.PageSettings.PrintableArea.Height Je možné, že je to tím, že tisknu na sdílenou tiskárnu, přes IP port a jde to (zřejmě přes server fe Francii) protože můžu tisknout na libovolnou tiskárnu v jakékoliv fabrice na světě - samozřejmě patřící k naší skupině :) ) netuším proč. Případně jak jinak efektivně udělat to, aby na jakokoliv tiskárně budu vždy tisknout na tisknutelnou plochu a nestane se mi, že by se část textu nevytiskla. Pokud budu zadávat tisk absolutně pozicovat. Předem děkuji, za komentáře.
|