Autor Beitrag
dirksen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 7, Win 8, Win 2012 Server R2
Delphi 7, Delphi XE2, VS 2008
BeitragVerfasst: Do 17.11.16 15:37 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 7, Win 8, Win 2012 Server R2
Delphi 7, Delphi XE2, VS 2008
BeitragVerfasst: Do 17.11.16 16:24 
Ja, bin sicher, da BeginDoc und EndDoc in try...finally gekapselt ist:


ausblenden 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;
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.11.16 06:17 
- Nachträglich durch die Entwickler-Ecke gelöscht -
dirksen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23

Win 7, Win 8, Win 2012 Server R2
Delphi 7, Delphi XE2, VS 2008
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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.