Guten Abend liebe VB-Gemeinde,
ich blieb mit der Suche im Forum leider erfolglos von daher eröffne ich ein neues Thema.
Es geht um folgendes:
Ich erstell einen Screenshot von meiner Form und drucke diesen aus, bei der Vorschau alles perfekt und auch als ich zum Test nen PDF-Creator als drucker ausgewiesen habe stimmen die Seitenränder. Aber beim tatsächlichen Audruck fehlen ca. 1-2cm am rechten Rand.
Mit der hilfe von einem Mitglied hier im Form habe ich auch einen Version die alles Mittig positioniert und alles in richtiger Propotion zueinander steht, mein persönlicher Favorite, leider ist der Ausdruck dann aber zu eng und schlecht leserlich für ältere Mitbürger ist mir gesagt worden. aus diesem Grund habe ich einen neuen Code mir erarbeitet der den Screenshot auf die komplette Fläche des Blattes streckt, der Übersichtsheit halber. Aber genau da liegt der Hund begraben, wie schon erwähnt fehlt beim tatsächlichen Audruck Teile des rechten Rand.
Ist es möglich die Ränder einzugrenzen, also sagen wir er soll ca. 1cm von jedem Rand weglassen und den Srennshot auf diese Fläche stecken?
das sind die beiden Codes die ich bis jetzt habe:
Ich hoffe mir kann jemand helfen von euch, danke.
Edit:
hahahaha, aus Zufall beim ausprobieren jetzt ne Lösung gefunden die passen sollte, hier der Code dazu:
Bezieht sich auf den ersten Code den ich gepostet habe.
Ich lasse das Thema noch geöffnet bis morgen Abend, vielleich hat ja noch jemand ne elegantere Lösung. Diese Funktioniert zumindest mal in der Vorschau und im PDF-Creator. Tatsächlischen Ausdruck werde ich morgen machen.
ich blieb mit der Suche im Forum leider erfolglos von daher eröffne ich ein neues Thema.
Es geht um folgendes:
Ich erstell einen Screenshot von meiner Form und drucke diesen aus, bei der Vorschau alles perfekt und auch als ich zum Test nen PDF-Creator als drucker ausgewiesen habe stimmen die Seitenränder. Aber beim tatsächlichen Audruck fehlen ca. 1-2cm am rechten Rand.
Mit der hilfe von einem Mitglied hier im Form habe ich auch einen Version die alles Mittig positioniert und alles in richtiger Propotion zueinander steht, mein persönlicher Favorite, leider ist der Ausdruck dann aber zu eng und schlecht leserlich für ältere Mitbürger ist mir gesagt worden. aus diesem Grund habe ich einen neuen Code mir erarbeitet der den Screenshot auf die komplette Fläche des Blattes streckt, der Übersichtsheit halber. Aber genau da liegt der Hund begraben, wie schon erwähnt fehlt beim tatsächlichen Audruck Teile des rechten Rand.
Ist es möglich die Ränder einzugrenzen, also sagen wir er soll ca. 1cm von jedem Rand weglassen und den Srennshot auf diese Fläche stecken?
das sind die beiden Codes die ich bis jetzt habe:
VB.NET-Quellcode
- 'Drucker neu
- Dim oBitmap As Bitmap
- Dim WithEvents PrintDocument As New Printing.PrintDocument
- Dim PrintPreview As New PrintPreviewDialog
- Private Sub btndrucken_Click(sender As Object, e As EventArgs) Handles btndrucken.Click
- SendKeys.Send("%({PRTSC})")
- SendKeys.Flush()
- System.Threading.Thread.Sleep(100)
- oBitmap = CType(Clipboard.GetImage(), Bitmap)
- Me.PrintDocument.DefaultPageSettings.Landscape = True
- With PrintPreview
- .Document = PrintDocument
- .ShowDialog()
- End With
- End Sub
- Private Sub PrintDocument_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
- Dim ps = CType(sender, Printing.PrintDocument).DefaultPageSettings
- Dim pa = ps.PrintableArea
- Me.PrintDocument.PrinterSettings.PrinterName = "PDF-Creator"
- If ps.Landscape Then pa = New RectangleF(pa.X, pa.Y, pa.Height, pa.Width)
- e.Graphics.DrawImage(oBitmap, pa)
- End Sub
VB.NET-Quellcode
- 'Mit Hilfe vom Forum Mittig positionierter Scrennshot
- Dim oBitmap As Bitmap
- Private Sub btndrucken_Click(sender As Object, e As EventArgs) Handles btndrucken.Click
- Try
- If oBitmap IsNot Nothing Then
- oBitmap.Dispose()
- End If
- SendKeys.Send("%({PRTSC})")
- SendKeys.Flush()
- System.Threading.Thread.Sleep(100) ' war bei mir erforderlich
- oBitmap = CType(Clipboard.GetImage(), Bitmap)
- Me.PrintDocument1.DefaultPageSettings.Landscape = Me.Height < Me.Width ' Dies hier
- Using dlg = New PrintPreviewDialog
- dlg.Document = Me.PrintDocument1
- If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
- Return
- End If
- End Using
- Catch ex As Exception
- MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler")
- End Try
- End Sub
- Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
- Me.PrintDocument1.PrinterSettings.PrinterName = "PDF-Creator"
- Dim gr As Graphics = e.Graphics
- Dim rc1 = e.MarginBounds
- Dim rc2 = New Rectangle(0, 0, oBitmap.Width, oBitmap.Height)
- Dim rc As RectangleF
- Dim d1 As Double = rc1.Width / rc2.Width
- Dim d2 As Double = rc1.Height / rc2.Height
- If d1 > d2 Then
- rc = New RectangleF(0.0F, 0.0F, CSng(rc2.Width * d2), CSng(rc2.Height * d2))
- rc.Offset(rc1.Left + (rc1.Width - rc.Width) / 2, rc1.Top)
- Else
- rc = New RectangleF(0.0F, 0.0F, CSng(rc2.Width * d1), CSng(rc2.Height * d1))
- rc.Offset(rc1.Left, rc1.Top + (rc1.Height - rc.Height) / 2)
- End If
- gr.DrawImage(oBitmap, rc)
- End Sub
Ich hoffe mir kann jemand helfen von euch, danke.
Edit:
hahahaha, aus Zufall beim ausprobieren jetzt ne Lösung gefunden die passen sollte, hier der Code dazu:
Bezieht sich auf den ersten Code den ich gepostet habe.
Ich lasse das Thema noch geöffnet bis morgen Abend, vielleich hat ja noch jemand ne elegantere Lösung. Diese Funktioniert zumindest mal in der Vorschau und im PDF-Creator. Tatsächlischen Ausdruck werde ich morgen machen.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Gottric“ ()