Hallo zusammen,
ich möchte eine Bilddatei (JPG, BMP, PNG usw.) über eine Picturebox drucken und automatisch als PDF abspeichern lassen.
Grundsätzlich läuft auch schon alles wie gewünscht.
Das Einzige was mich jetzt noch stört ist die Dialogabfrage beim Speichern.
Hier mal mein bisheriger Code
Spoiler anzeigen
(Das Umstellen auf den eDoc-Printer fehlt hier zwar noch, stellt aber kein Problem dar)
Gruß
Volker
ich möchte eine Bilddatei (JPG, BMP, PNG usw.) über eine Picturebox drucken und automatisch als PDF abspeichern lassen.
Grundsätzlich läuft auch schon alles wie gewünscht.
Das Einzige was mich jetzt noch stört ist die Dialogabfrage beim Speichern.
Hier mal mein bisheriger Code
VB.NET-Quellcode
-
- Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
- TBox_Bildpfad.Text = "C:\Kalender 2019.bmp"
- 'PBox_Bilddrucken.Image = Image.FromFile("C:\Temp\Outlook\03_ Lupe.png")
- 'PBox_Bilddrucken.Image = Image.FromFile("C:\Temp\Outlook\05_ Download.jpg")
- 'PBox_Bilddrucken.Image = Image.FromFile("C:\Temp\Outlook\04_ Bild1.png")
- PBox_Bilddrucken.Image = Image.FromFile(TBox_Bildpfad.Text)
- PrintDocument1.DocumentName = "C:\Temp\Outlook\Test.pdf"
- PrintDocument1.Print()
- 'PBox_Bilddrucken.Image.Save("C:\Temp\Outlook\Test.pdf")
- End Sub
- Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
- Dim gr As Graphics = e.Graphics
- ' Verweis auf das Bild festlegen
- Dim oImage As Image = PBox_Bilddrucken.Image
- ' Rechteck für den Ausdruck festlegen
- ' Position + Originalgröße
- Dim p As New Point(e.MarginBounds.Left, e.MarginBounds.Top)
- ' Hier nun das Bild in der Originalgröße oder der maximalen Breite anzeigen lasssen bzw. drucken
- Dim hDC As Long
- 'Die log. Pixels pro Zoll für den Bildschirm werden ermittelt:
- 'hDC = CreateICA("DISPLAY", "", "", 0&)
- DPI_Breite = 92 'GetDeviceCaps(hDC, LOGPIXELSX)
- DPI_Höhe = 92 'GetDeviceCaps(hDC, LOGPIXELSY)
- 'DeleteDC hDC
- 'Die Breite/Höhe des Bildschirm-Fensters (in Pixeln) wird ermittelt:
- Bildschirmbreite = 1920 ' GetSystemMetrics&(SM_CXSCREEN)
- Bildschirmhöhe = 1080 ' GetSystemMetrics&(SM_CYSCREEN)
- Dim BreiteinCM As Double
- Dim HöheinCM As Double
- BreiteinCM = 21
- HöheinCM = 29.7
- BildBreitePixel = Bildergroesse(TBox_Bildpfad.Text, Bildgroesse_ENUM.Breite)
- BildHöhePixel = Bildergroesse(TBox_Bildpfad.Text, Bildgroesse_ENUM.Höhe)
- PBox_Bilddrucken.Height = DPI_Höhe * HöheinCM / 2.54
- PBox_Bilddrucken.Width = DPI_Breite * BreiteinCM / 2.54
- BreiteinCM = 19
- ' Höhe proportional anpassen
- HöheinCM = (BildHöhePixel / BildBreitePixel) * BreiteinCM
- PBox_Bilddrucken.Top = 10
- PBox_Bilddrucken.Left = 10
- ' Prüfen, ob die Pixel das DIN A4 Format übersteigen, wenn ja, das Bild proportional auf das max. verkleinern
- If BildHöhePixel > Fix(72 * HöheinCM / 2.54) Or BildBreitePixel > Fix(72 * BreiteinCM / 2.54) Then
- 'PBox_Bilddrucken.Height = Fix(72 * HöheinCM / 2.54)
- BildHöhePixel = Fix(72 * HöheinCM / 2.54)
- ' PBox_Bilddrucken.Width = Fix(72 * BreiteinCM / 2.54)
- BildBreitePixel = Fix(72 * BreiteinCM / 2.54)
- Else
- ' andernfalls, Originalbreite und -höhe einstellen
- PBox_Bilddrucken.Height = BildHöhePixel
- PBox_Bilddrucken.Width = BildBreitePixel
- End If
- ' Ein paar Infos zu dem Bild abspeichern
- e.Graphics.DrawString("E-Mail Absender: " & RBox_Absender.Text & vbCrLf & "Betreff: " & RBox_Betreff.Text & vbCrLf & "Datum: " & Lbl_DatumUhrzeit.Text & vbCrLf & "Dateiname: " & System.IO.Path.GetFileName(TBox_Bildpfad.Text), New Font("Arial", 12), Brushes.Black, New Point(10, 15))
- 'Dim r As New Rectangle(p.X, p.Y, oImage.Width, oImage.Height)
- Dim r As New Rectangle(10, 120, BildBreitePixel, BildHöhePixel)
- ' Bild drucken im angegebenen Rechteck drucken
- gr.DrawImage(oImage, r)
- 'gr.Dispose()
- ' Picturebox wieder klein machen
- PBox_Bilddrucken.Top = 76
- PBox_Bilddrucken.Left = 300
- PBox_Bilddrucken.Width = 156
- PBox_Bilddrucken.Height = 127
- End Sub
(Das Umstellen auf den eDoc-Printer fehlt hier zwar noch, stellt aber kein Problem dar)
Gruß
Volker