Image fehlt beim 1. Druck

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von GünterD.

    Image fehlt beim 1. Druck

    Moin Zusammen,

    ich habe beim erzeugen einer PDF ein Problem mit dem Drucken eines Image.
    Hier ein Auszug meines Codes

    VB.NET-Quellcode

    1. ​ ...
    2. Dim logo As Image = Image.FromFile("e:\Anwendungen\LOGO.png")
    3. Dim LogoHoch = CInt(Logo.Height / 80)
    4. Dim LogoBreit = CInt(Logo.Width / 80)
    5. XAchse = SeitenBreite - LogoBreit - RandRechts - 2
    6. YAchse = RandTop + LogoHoch + 2
    7. Dim rectLogo As Rectangle = New Rectangle(XAchse, YAchse, LogoBreit, LogoHoch)
    8. g.DrawImage(PictureBox1.Image, rectLogo)
    9. ....


    Beim 1. Drucken wird das Image auf dem Ausdruck, obwohl das Image geladen ist, nicht angezeigt/gedruckt.
    Das Image ist aber definitiv geladen, da LogoHoch einen Wert besitzt.
    Beim unmittelbar anschließenden 2. Druck ist das Image dann gedruckt.
    Verlasse ich das Menü und und starte anschließend den Druck erneut, fehlt beim 1. Mal das Image wieder.

    Hat von euch einer eine Idee wo ich den Fehler suchen müsste?
    Im Voraus Danke für einen Tipp.
    Günter
    Gruß Günter
    @GünterD Wann wird denn dasw Bild der PictureBox zugewiesen? Drucke doch das logo.
    Und verewende Integer-Division:

    VB.NET-Quellcode

    1. Dim LogoHoch = Logo.Height \ 80
    2. Dim LogoBreit = Logo.Width \ 80
    3. ' ...
    4. g.DrawImage(logo, rectLogo)
    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!
    Dann brauchen wir mehr Infos. Das hier klappt bei mir sehr gut:
    Bild der PicBox zur Designzeit, also vor Programmstart, zuweisen plus

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. PrintDocument1.PrinterSettings.PrinterName = "Microsoft Print to PDF"
    3. PrintDocument1.Print()
    4. End Sub
    5. Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
    6. e.Graphics.DrawImage(PictureBox1.Image, 100, 100)
    7. End Sub


    Es gibt für eine Selbsttestung zwei Möglichkeiten: die Aufbau- und die Abbaulösung.
    Aufbau: Du machst Dir ein Testprojekt, bei dem Du dann nach und nach Dein altes Programm nachstellst und austestest, ab wann es nicht mehr klappt.
    Abbau: Nimm Dein Projekt, mach eine Kopie, entferne alles, was nicht für den Druck nötig ist, um das Problem zu isolieren.

    Alternativ kannst Du das abgespeckte Projekt ohne bin-, obj-, .vs- und .git-Ordner und gezippt über [+ Erweiterte Antwort] hochladen. Vielleicht finden wir so das Problem und eine Lösung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    GünterD schrieb:

    ... das Problem bleibt leider!
    Poste ein Testprojekt, das den Effekt reproduziert und häng es an Deinen nächsten Post.
    Und:
    Sieh Dir mal den Inhalt der Variable rectLogo an.
    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!
    Moin RodFromGermany,

    rectLogo war der super Tipp.
    DANKE!!!

    Zur Erklärung...
    Der Wert für XAchse war beim ersten Aufruf negativ, da ich die Druckereinstellungen erst später abgerufen habe, womit der Wert für SeitenBreite = 0 war.
    Beim 2. Aufruf gab's dann die Werte für die Druckereinstellungen, da es globale Variablen sind.
    Gruß Günter