Fehlermeldung beim Drucken auf ADOBE PDF

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von mepema2.

    Fehlermeldung beim Drucken auf ADOBE PDF

    Hallo allerseits,

    seit Stunden suche ich den Fehler, warum in meinem Programm mit mehreren Forms das Drucken aus einer einzigen Form nicht funktioniert. Doch der Reihe nach. In allen Formen ist "PrintDialog1" und "PrintDocument1" vorhanden. Das Problem tritt auf, wenn als Drucker der ADOBE PDF-Drucker gewählt wurde.

    VB.NET-Quellcode

    1. Imports System.Drawing
    2. Imports System.Drawing.Printing
    3. Imports System.Windows.Forms
    4. Public Class Form1
    5. Private StandardFont As Font = New Font("Arial", 10)
    6. Private HeadlineFont As Font = New Font("Arial", 12, FontStyle.Bold + FontStyle.Italic + FontStyle.Underline, GraphicsUnit.Point)
    7. Private BoldFont As Font = New Font("Arial", 10, FontStyle.Bold)
    8. Private yPos As Single = 0
    9. Private LeftPos As Single = 25
    10. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    11. If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    12. Try
    13. Dim pd As New PrintDocument()
    14. AddHandler pd.PrintPage, AddressOf pd_PrintPage
    15. pd.PrinterSettings = PrintDialog1.PrinterSettings
    16. pd.DocumentName = "Aufstellung"
    17. pd.Print()
    18. Catch ex As Exception
    19. MessageBox.Show(ex.Message)
    20. End Try
    21. End If
    22. End Sub
    23. Private Sub pd_printpage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    24. '// Testausdruck //
    25. e.Graphics.DrawString("Testdruck" & "; Druckdatum: " & Now.Date, HeadlineFont, Brushes.Black, LeftPos, yPos + 1)
    26. e.HasMorePages = False
    27. End Sub
    28. End Class


    Nur bei einer einzigen Form tritt der Fehler auf, obwohl die Testroutinen überall gleich sind. Das Programm wird mit der Fehlermeldung
    "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist." unterbrochen. Wie gesagt, aus einer anderen Form geht das pdf-Drucken einwandfrei. Der ADOBE ist also in Ordnung.

    Hat jemand eine Ahnung???? ?(

    Gruß und Danke
    Setz mal auf Zeile 14 einen Haltepunkt und steppe durch. Wo genau knallt es?
    oder
    Schmeiß das PrintDocument raus und hole es Dir vom Designer rein.
    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!
    Hallo RodFromGermany,

    es "knallt" bei pd.print (Zeile 18). Die pd_printpage wird gar nicht erst angesprungen sondern sofort die catch.. Jetzt erscheint im Programm auch eine Fehlermeldung "Eine externe Komponente hat eine Ausnahme ausgelöst". Ohne OK-Button .. und das Programm steht
    Mach Dir mal ne neue Form mit PrintDocument und PrintPreviewDialog.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Me.PrintPreviewDialog1.ShowDialog()
    3. End Sub
    4. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    5. e.Graphics.DrawString("bla", New Font("Arial", 30), Brushes.Black, New Point(30, 30))
    6. End Sub
    Mehr nicht.
    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!
    Danke für die Antwort.
    Ich habe noch eine Zeile eingefügt...

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. PrintPreviewDialog1.Document = PrintDocument1
    3. Me.PrintPreviewDialog1.ShowDialog()
    4. End Sub
    5. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    6. e.Graphics.DrawString("bla", New Font("Arial", 30), Brushes.Black, New Point(30, 30))
    7. End Sub

    weil sonst nix angezeigt wurde.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mepema2“ ()

    Also, das Problem scheint bei der Verbindung zur Datenbank begründet zu sein:

    VB.NET-Quellcode

    1. Dim con As New OleDbConnection
    2. con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\PAV2012\DATA\Adressen.accdb"
    3. Dim cmd As New OleDbCommand
    4. cmd.Connection = con
    5. cmd.CommandText = "select * from Adressen order by Suchname"
    6. Dim reader As OleDbDataReader
    7. Try
    8. con.Open()
    9. reader = cmd.ExecuteReader
    10. Do While reader.Read
    11. Kunden(i) = auslesen(reader("Suchname"))
    12. i += 1
    13. Loop
    14. Catch ex As Exception
    15. 'MessageBox.Show("Fehler")
    16. MsgBox("Fehler bei der Tabellenverarbeitung." & ex.Message.ToString)
    17. Finally
    18. con.Close()
    19. End Try

    Wenn ich "con.open" auskommentiere ist der Fehler beim Drucken weg.

    Wohl bemerkt: Es gibt andere Formen mit gleicher Datananbindung, wo das Drucken einwandfrei funktioniert.

    Bin echt am verzweifeln oder völlig blind ;(

    mepema2 schrieb:

    weil sonst nix angezeigt wurde.
    Das mach ich im Designer.
    ---
    :?: :?: :?: :S
    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!
    Hallo RodFromGermany, danke für die erschöpfende Antwort, aber den PrintDialog benutze ich bereits (siehe 1.Posting). Die Frage bezog sich darauf, wie ich die Druckerauswahl dem PrintPreviewDialog klar machen kann, denn das Control druckt immer nur auf dem Standarddrucker.

    mepema2 schrieb:

    Standarddrucker
    Druckefr auswählen, dann drucken.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Me.PrintDialog1.ShowDialog()
    3. Me.PrintPreviewDialog1.ShowDialog()
    4. End Sub
    5. Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    6. e.Graphics.DrawString("Bla", New Font("Arial", 30), Brushes.Black, New Point(30, 30))
    7. End Sub
    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!
    Danke Danke, soweit war ich auch schon, aber ich sehe keinen Weg, dem PrintViewDialog den ausgewählten Drucker zu übergergeben. Sicherlich kann ich einen Drucker auswählen, aber das interessiert das PrintViewDialog Objekt nicht.
    @mepema2:
    Ich sage dem System, welcher Drucker verwendet werden soll, und das System verwendet ihn.
    So ist Bills Plan und so funktioniert er.
    Und bei mir funktioniert das genau so, wie es 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!

    Gonger96 schrieb:

    Soetwas wird mit dem bitweiesn Or gemacht
    Korekt, hier aber (nicht nur zufällig) richtig.
    @mepema2: Machma Option Strict On.
    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!
    @ RodFromGermany: Option Strict On sieht gar nicht gut aus: Alle Tabellenabfragen scheinen dann falsch zu sein und

    VB.NET-Quellcode

    1. Private HeadlineFont As Font = New Font("Arial", 12, FontStyle.Bold + FontStyle.Italic + FontStyle.Underline, GraphicsUnit.Point)
    macht natürlich auch Fehler.
    Aber noch mal zum alten Problem: Das Auslesen der Tabellen hat den Fehler nicht verursacht, denn das

    VB.NET-Quellcode

    1. Kunden(i) = reader.Item("Suchname")
    hatte ich testweise auskommenttiert. Allein

    VB.NET-Quellcode

    1. con.open
    hat gereicht. Und: Das Problem tritt nur bei dem ADOBE PDF auf, nicht bei dem FREE ADOBE und bei keinem "echten" Drucker.