2008-09-16 17 views
2

Ich habe eine Linux-App, die Tassen zum Drucken verwendet, aber mir ist aufgefallen, dass, wenn ich sofort drucke und dann meine App verlasse, mein Ausdruck nie erscheint. Also nehme ich an, dass meine App warten muss, bis sie tatsächlich aus dem Drucker kommt, bevor sie beendet wird. Kann also jemand wissen, wann er fertig ist?Drucken mit CUPS, wann kann meine App beendet werden?

Ich benutze Libcups, um eine Postscript-Datei zu drucken, die von meiner App generiert wird. Also benutze ich den Befehl, um die Datei zu drucken und sie kehrt dann zu meiner App zurück. Also denkt meine App, dass das Dokument in der Druckerwarteschlange ist, wenn ich denke, es ist noch nicht dort angekommen. Anstatt also alle meine Benutzer auf dem Bildschirm nach dem Druckersymbol in der Taskleiste suchen zu müssen, hätte ich lieber eine Lösung im Code. Wenn sie also versuchen und beenden, bevor sie wirklich gesendet wurde, kann ich sie darauf aufmerksam machen . Auch die Datei, die ich generiere, ist eine temporäre Datei, daher wäre es schön zu wissen, wann sie fertig ist, damit ich sie löschen kann.

+0

Neben Drucken PostScript, wie drucken Sie? Verwenden Sie libcups oder die Befehlszeile util? –

+0

mein Code erzeugt eine Postscript-Datei und verwendet dann libcups, um sie zu drucken. Ich verwende nicht die Befehlszeile. – KPexEA

Antwort

0

Ihre App wurde wahrscheinlich noch nicht gedruckt, wenn Sie sie beenden. Wenn Sie evince verwenden, um eine PDF-Datei oder ein anderes Dokument zu drucken, ist dies ein bekannter Fehler. Es gibt keine visuelle Bestätigung, dass der Druckvorgang ausgeführt wird. Wenn der Druckauftrag gesendet wurde, wird in der Taskleiste ein Druckersymbol angezeigt, bis der Druckvorgang abgeschlossen ist. Sie können auf das Druckersymbol in der Taskleiste klicken und sehen, welche Jobs gerade ausgeführt werden und ausstehen.

1

Sobald Ihre CUPS-Weboberfläche (localhost: 631) oder etwas anderes, was CUPS sieht, Ihnen zeigt, dass CUPS den Auftrag erhalten hat, können Sie die Anwendung beenden.

1

Wie wäre es mit einem Druck Spool-Service wie lpr & lpq?

+0

'lpr' selbst ist kein Druckspool-Dienst. Es ist ein Clientbefehl, um einen Job an einen tatsächlichen Druckspooldienst zu senden. 'lpq' selbst ist kein Druckspool-Dienst. Es ist ein Clientbefehl, um eine Abfrage an einen tatsächlichen Druckspooldienst zu senden. Ein tatsächlicher Druckspool-Dienst wäre 'lpd'. Oder in CUPS: 'cupsd'. –

1

Sie müssen nicht warten, bis das Papier aus dem Drucker ist. Sie müssen jedoch warten, bis Ihre temporäre Datei vollständig von cupsd in der Spooling-Area empfangen wurde (normalerweise /var/spool/cups/).

Wenn Sie auf der Kommandozeile gedruckt (einer der CUPS mit lp oder lpr Befehle) würden Sie wissen, dass der Job ist im Gange, wenn die Shell-Eingabeaufforderung zurückkehrt (der Befehl auch die CUPS Job-ID für den Auftrag gesendet berichten), und wenn der Beendigungscode ($?) 0 ist.

Sie geben nicht an, welcher Teil von libcups und welcher Funktionsaufruf Sie verwenden, um zu erreichen, was Sie wollen. Wenn ich dies tun müsste, würde ich die IPP-Funktion cupsSendRequest und dann cupsGetResponse verwenden, um das Ergebnis zu wissen.

+0

Ich rufe die Funktion cupsPrintFile auf. – KPexEA