![]() |
"kontrolliertes" Drucken
Wir drucken mit Delphi / Fastreport Rechnungen, die jeweils als einzelner Druckjob ausgegeben werden. Bei einem Kunden ist es bei einem Drucklauf von ca. 1000 Rechnungen vorgekommen, dass ein zusammenhängender Block von ca. 30 Rechnungen offensichtlich nicht gedruckt wurde. Lt. unserem Programm wurden aber alle Rechnungen korrekt ausgegeben. Der Drucker ist via Printserver an eine Windows 2008-Server angeschlossen.
Meine Frage ist: Wie kann man sicherstellen, das jedes einzelne Dokument tatsächlich gedruckt wurde oder gibt es im Nachhinein eine Kontrollmöglichkeit? Schöne Grüsse |
AW: "kontrolliertes" Drucken
Sobald der Druckauftrag an den Druckerspooler übergeben ist gibt es m.W. keine Möglichkeit mehr festzustellen, ob der Auftrag auch durchgeführt wurde
|
AW: "kontrolliertes" Drucken
Zitat:
hier findest du eine recht gute Übersicht, wie der Server Drucke überwachen kann: ![]() Zunächst landen die Events in einem Logfile. Zur automatischen Überprüfung müsste man ein entsprechendes Script erstellen. Gruss Reinhard |
AW: "kontrolliertes" Drucken
Wie schwer wäre es, sowas zu einem Druckauftrag zusammenzufassen!? Also schon Programmseitig zu reagieren.
|
AW: "kontrolliertes" Drucken
Danke erst mal!
Das mit dem Logging werde ich mir mal genauer ansehen. Zusammenfassen fällt aus, da je nach Rechnungsart und Sprache unterschiedliche Reports verwendet werden müssen. Schönen Gruss |
AW: "kontrolliertes" Drucken
Das Programm könnte die Anzahl der Aufträge im Spooler abfragen.
In meiner Software verhindere ich so, dass hunderte Druckjobs im Spooler hängen weil der Drucker nicht bereit ist. Wenn mehr als 3 Jobs (einstellbar) im Spooler sind, geht ein Fenster auf und der Benutzer kann entscheiden, ob er trotzdem weiterdrucken oder warten möchte bis das Limit unterschritten wurde.
Delphi-Quellcode:
function PrinterJobsCount(const PrinterName : String) : Integer;
var hPrinter : THandle; PPI2 : PPrinterInfo2; dwNeeded : DWORD; begin Result := -1; // open the printer if NOT OpenPrinter(PChar(PrinterName), hPrinter, Nil) then raise EPrinter.Create('Can''t open printer '+PrinterName+ #13+SysErrorMessage(GetLastError)); try // just get the amount of needed memory GetPrinter(hPrinter, 2, Nil, 0, @dwNeeded); // allocate the memory GetMem(PPI2, dwNeeded); try // get the printer information if NOT GetPrinter( hPrinter, // handle to printer 2, // information level PPI2, // printer information buffer dwNeeded, // size of buffer @dwNeeded // bytes received or required ) then raise EPrinter.Create('Error getting information for printer: '+ PrinterName+#13+SysErrorMessage(GetLastError)); Result := PPI2^.cJobs; finally FreeMem(PPI2); end; finally ClosePrinter(hPrinter); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz