Druckproblem (keine PDF-Erstellung über PrintDialog!)

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Druckproblem (keine PDF-Erstellung über PrintDialog!)

    Hallo,
    ich habe in .net 2010 eine Druckroutine mit Druckvorschau und Druckeinstellungen erstellt, also nicht schwieriges.
    Als ich nun die Druckroutine testen wollte, mußte ich feststellen, daß meine Ausdrucke nur in Papierform aus dem Drucker kommen, nicht jedoch eine PDF-Erstellung (bei ausgewähltem PDF-Printer im PrinterDialog) möglich ist.
    Hat jemand hier schon einmal ähnliche Erfahrung gemacht oder habe ich nur etwas grundlegendes übersehen?
    Danke für jedwelche Hilfe.
    Grüsse
    Coding-Nerd
    Hallo,
    ich habe meinen Druckercode vor einigen Monaten im Internet gefunden und habe ihn hier jetzt mal komprimiert eingefügt, damit man nur das notwendigste vor sich hat. (Der Übersichtlichkeit halber...)
    Das, was hier nachfolgend steht, habe ich auch mit einem Papierdrucker und dem PDF-Drucker getestet und wieder bekam ich nur einen Papierausdruck und der PDF-Drucker machte nichts!

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Imports System.Drawing.Printing
    3. Imports System.Windows.Forms
    4. Public Class Form1
    5. Private pd As DruckDokument
    6. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles Me.Load
    7. Dim zuDruckenderText(200) As String
    8. For i As Integer = 0 To 200
    9. zuDruckenderText(i) = i.ToString()
    10. zuDruckenderText(i) &= " Das ist eine Textzeile..."
    11. Next
    12. pd = New DruckDokument(zuDruckenderText)
    13. AddHandler pd.PrintPage, AddressOf printme
    14. End Sub
    15. Private Sub printme(ByVal sender As Object, ByVal e As PrintPageEventArgs)
    16. pd = CType(sender, DruckDokument)
    17. Dim f As New Font("Arial", 11)
    18. Dim Zeilenhoehe As Single = f.GetHeight(e.Graphics)
    19. Dim x As Single = e.MarginBounds.Left
    20. Dim y As Single = e.MarginBounds.Top
    21. pd.Seitennummer += 1
    22. Do
    23. e.Graphics.DrawString(pd.Text(pd.Zeilennummer), f, Brushes.Black, x, y)
    24. pd.Zeilennummer += 1
    25. y += Zeilenhoehe
    26. Loop Until (y + Zeilenhoehe) > e.MarginBounds.Bottom Or pd.Zeilennummer > pd.Text.GetUpperBound(0)
    27. If pd.Zeilennummer < pd.Text.GetUpperBound(0) Then
    28. e.HasMorePages = True
    29. Else
    30. pd.Zeilennummer = 0
    31. End If
    32. End Sub
    33. Private Sub SeitenansichtToolStripMenu_Click(sender As System.Object, e As System.EventArgs) Handles SeitenansichtToolStripMenu.Click
    34. Dim PrintPreviewDialog1 As New PrintPreviewDialog
    35. PrintPreviewDialog1.Document = pd
    36. PrintPreviewDialog1.ShowDialog()
    37. End Sub
    38. Private Sub SeiteneinstellungenToolStripMenu_Click(sender As System.Object, e As System.EventArgs) Handles SeiteneinstellungenToolStripMenu.Click
    39. Dim PageSetupDialog1 As New PageSetupDialog()
    40. PageSetupDialog1.Document = pd
    41. PageSetupDialog1.AllowMargins = True
    42. If PageSetupDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    43. pd = PageSetupDialog1.Document
    44. End If
    45. End Sub
    46. Private Sub DruckenToolStripMenu_Click(sender As System.Object, e As System.EventArgs) Handles DruckenToolStripMenu.Click
    47. Dim prd As New PrintDialog()
    48. prd.Document = pd
    49. prd.AllowPrintToFile = True
    50. prd.AllowSelection = True
    51. prd.AllowSomePages = True
    52. prd.ShowHelp = True
    53. If (prd.ShowDialog() = Windows.Forms.DialogResult.OK) Then
    54. pd = prd.Document
    55. End If
    56. End Sub
    57. End Class


    Und das hier ist eine Klasse, in der sich der zu druckende Text befindet:

    VB.NET-Quellcode

    1. Public Class DruckDokument
    2. Inherits Printing.PrintDocument
    3. Private mText() As String
    4. Private mSeitennummer As Integer
    5. Private mZeilennummer As Integer
    6. Public Property Text() As String()
    7. Get
    8. Return mText
    9. End Get
    10. Set(ByVal value As String())
    11. mText = value
    12. End Set
    13. End Property
    14. Public Property Seitennummer() As Integer
    15. Get
    16. Return mSeitennummer
    17. End Get
    18. Set(ByVal value As Integer)
    19. mSeitennummer = value
    20. End Set
    21. End Property
    22. Public Property Zeilennummer() As Integer
    23. Get
    24. Return mZeilennummer
    25. End Get
    26. Set(ByVal value As Integer)
    27. mZeilennummer = value
    28. End Set
    29. End Property
    30. Public Sub New(ByVal text() As String)
    31. Me.Text = text
    32. End Sub
    33. End Class


    Danke schonmal für jede Hilfe...
    Grüsse
    Lass mal diese beiden Zeilen einfach weg:

    coding_nerd schrieb:

    VB.NET-Quellcode

    1. pd = PageSetupDialog1.Document

    coding_nerd schrieb:

    VB.NET-Quellcode

    1. pd = prd.Document
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    coding_nerd schrieb:

    Hast du das selbst getestet?
    Ich habe hier keinen Drucker, sondern nur PDF-Print, aber Du weist doch die selbe Instanz hin und her, das ist überflüssig.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So, ich habe es selbst herausgefunden:

    VB.NET-Quellcode

    1. Private Sub DruckenToolStripMenu_Click(sender As System.Object, e As System.EventArgs) Handles DruckenToolStripMenu.Click
    2. Dim prd As New PrintDialog()
    3. prd.Document = pd
    4. prd.AllowPrintToFile = True
    5. prd.AllowSelection = True
    6. prd.AllowSomePages = True
    7. prd.ShowHelp = True
    8. If (prd.ShowDialog() = Windows.Forms.DialogResult.OK) Then
    9. pd = prd.Document
    10. pd.Print
    11. End If
    12. End Sub


    in der if-Abfrafe hat

    Quellcode

    1. pd.Print
    gefehlt.
    Jetzt klappt der PDF-Druck aus dem PrintDialog() mit allen installierten PDF-Druckern...
    Danke an alle für Ihre Bemühungen

    coding_nerd schrieb:

    pd.Print
    löst Du im PrintPreviewDialog aus.
    Vollzieh mal dieses Beispiel nach.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    coding_nerd schrieb:

    ohne diese Codezeile funktionieren dann die PDF-Printer im PrinterDialog()
    bei mir so, wie es sein soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    coding_nerd schrieb:

    also kann dieser Thread geschlossen werden.
    Dann musst Du ihn auf Erledigt setzen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!