Entwickler-Ecke

Sonstiges (Delphi) - Druckaufträge bleiben im Spooler hängen


dirksen - Do 17.11.16 15:37
Titel: Druckaufträge bleiben im Spooler hängen
Hallo zusammen,

ich habe hier beim Drucken aus meiner Anwendung ein Problem.
Mein Druckauftrag wird an lokal angeschlossene Drucker ohne Probleme ausgedruckt, auch auf alle Netzwerkdrucker, die ich hier zur Verfügung habe.
Bei Kunden kommt es immer wieder vor, dass der Ausdruck bei Netzwerkdrucker nicht ausgedruckt wird. Der Druckjob wird in der Druckerwarteschlange
angezeigt mit der Anmerkung wird gedruckt, es passiert aber nichts. Der Druckauftrag bleibt in der Warteschlange. Stelle ich diese Drucker dann auf
"Druckaufträge direkt zum Drucker leiten" um, funktioniert das Ganze. Der Ausdruck aus z.B. Word auf diese Drucker funktioniert ganz normal.
Gedruckt wird der Inhalt eines Stringgrids über eine etwas abgewandelte Version des TJvGridPrinter bzw. TJvGridPreviewForm. Während des Ausdrucks kommt keine
Exception. Printer.BeginDoc und Printer.EndDoc werden ausgeführt, alles ganz normal.


Hat hier jemand von Euch eine Idee?


jasocul - Do 17.11.16 16:00

Bist du sicher, dass EndDoc durchgeführt wird?

Nach meiner Erfahrung:
Normalerweise beginnt der Druck erst mit erfolgreichem EndDoc. Auch wenn in der Warteschlange steht, dass gedruckt wird.
Die Umstellung auf direkten Druck, führt in der Regel dazu, dass tatsächlich sofort gedruckt wird, ohne auf EndDoc zu warten.

Es mag noch andere Ursachen geben, aber ich würde hier erst nochmal ganz sicher gehen wollen, ob EndDoc auch beim Kunden ganz bestimmt ausgeführt wird.


dirksen - Do 17.11.16 16:24

Ja, bin sicher, da BeginDoc und EndDoc in try...finally gekapselt ist:



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  Printer.Title := GridPrinter.PrintOptions.JobTitle;
  Printer.Copies := GridPrinter.PrintOptions.Copies;
  Printer.Orientation := GridPrinter.PrintOptions.Orientation;
  try 
    Printer.BeginDoc;
    DrawToCanvas(Printer.Canvas, pmPrint, 1, Grid.RowCount - 1);  
  finally
    Printer.EndDoc;
  end;
end;


Delete - Fr 18.11.16 06:17

- Nachträglich durch die Entwickler-Ecke gelöscht -


dirksen - Fr 18.11.16 10:23

Aber müsste dann nicht der gleiche Ausdruck, wenn ich ihn direkt zum Drucker sende nicht auch schief gehen bzw. unvollständig sein?
Werde mal in der DrawToCanvas Methode noch ein paar Logmessages einbauen und nach exceptions Ausschau halten.


jasocul - Fr 18.11.16 10:48

Das würde ich auch vermuten. Eine Prüfung kann aber sicher nicht schaden.

Aber prüfe doch mal, ob du irgendwo zwischendurch an den Drucker-Einstellungen etwas veränderst (Schacht, Auflösung, anderer Drucker zugewiesen, ...). Das könnte den Druckprozess stören und das EndDoc ins leere laufen lassen.