Druckvorgang erst starten, wenn PrintPage abgeschlossen ist

  • C#
  • .NET 5–6

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

    Druckvorgang erst starten, wenn PrintPage abgeschlossen ist

    Hallo zusammen,

    ich habe folgenden Code, welcher Eine Liste mit Bildern drucken soll, bis x Anzahl Seiten erreicht sind. In dem Fall hier ist es ein Bild und 140 Seiten.

    Das Problem was ich habe ist, dass der Druckertreiber bei jedem neuen Druckjob immer 3 leer Seiten zieht, das ist auch so gewollt. Nur mein Druckvorgang startet direkt mit dem ersten Durchlauf von PrintPage. Der Drucker druckt nun so schnell, dass die Daten für die neuen Seiten noch nciht an den Drucker übertragen wurden. Das sorgt dafür, dass der Drucker nach N Seiten immer unterschiedlich anfängt Leerseiten zu ziehen. Meistens so ab 49-60 Seiten. Das variiert je nach Motiv etwas.

    C#-Quellcode

    1. int printed = 0;
    2. List<Image> images = new List<Image>();
    3. foreach (var imagePath in product.Images)
    4. {
    5. Image picture = Image.FromFile(imagePath);
    6. images.Add(picture);
    7. }
    8. int index = 0;
    9. pd.PrintPage += (o, e) =>
    10. {
    11. printed++;
    12. if (printed < configuration.PageAmount)
    13. {
    14. e.HasMorePages = true;
    15. }
    16. else
    17. {
    18. index = 0;
    19. }
    20. e.Graphics.DrawImage(images[index], e.PageBounds);
    21. index++;
    22. if (index >= images.Count)
    23. {
    24. index = 0;
    25. }
    26. };
    27. pd.Print();



    Habe ich irgendwie die Möglichkeit, dass der Druckvorgang erst gestartet wird, wenn alle 140 Seiten generiert worden sind? Oder von mir aus schon wenn X Seiten bereits generiert worden sind. Wenn ich das Bild über OpenOffice mit 140 Wiederholungen drucke, dann macht er das ja auch korrekt. Da wird aber auch nur das Bild einmal an den Drucker geschickt und dann 140 mal wiederholt, zumindest liest sich das so aus der Druckerwarteschlange.

    LG Marvin
    Bevor Du was in echt druckst, hau Dir doch ein PrintPreviewControl oder PP-Dialog auf's Form und schau, was dort angezeigt wird. Und setz nen Pdf-Drucker ans Ende der Fahnenstange, keinen echten Drucker.
    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.

    MarvinKleinMusic schrieb:

    wenn alle 140 Seiten generiert worden sind
    Hast Du nun 140 verschiedene Seiten
    oder
    druckst Du eine Seite 140 Mal?
    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!
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Ja, mit der obigen Logik wurden aber 140 Seiten generiert.

    Ich habe bereits eine Lösung gefunden. Ich drucke nun die Bilder einmal pro Seite und wiederhole dann den Druck über die PrinterSettings wie folgt:

    C-Quellcode

    1. short kopien = (short)Math.Ceiling((decimal)(configuration.AnzahlSeiten / product.Images.Count));
    2. pd.PrinterSettings.Copies = kopien;

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    MarvinKleinMusic schrieb:

    Ja, mit der obigen Logik wurden aber 140 Seiten generiert.
    Kannst Du einfach diese Frage beantworten:

    RodFromGermany schrieb:

    Hast Du nun 140 verschiedene Seiten
    oder
    druckst Du eine Seite 140 Mal?
    Mögliche Antworten:
    • Ich drucke 140 verschiedene Seiten
    • Ich drucke eine Seite 140 Mal
    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!