Software "Später drucken"

12

Wenn ich an meinem Laptop arbeite, möchte ich manchmal ein paar Dokumente in die Warteschlange stellen, um sie später zu drucken, da ich zu diesem Zeitpunkt nicht an einen Drucker angeschlossen bin.

Tatsächliche Druckerwarteschlangen sind jedoch nicht dafür ausgelegt. Sie versuchen sofort, das Dokument zu drucken, und alle beginnen plötzlich mit dem Drucken, sobald ich im Netzwerk bin. Dies ist im Allgemeinen nicht das, was ich tun möchte. Außerdem möchte ich manchmal die Reihenfolge der Dokumente in der Warteschlange ändern, was nicht ganz einfach ist, insbesondere, wenn einige davon bereits gedruckt wurden.

Manchmal schlägt der Druck auch fehl, weil z. B. auf dem Drucker kein Papier oder kein Toner mehr vorhanden ist und ich das Dokument auf einem anderen Drucker erneut drucken möchte. Dies ist nicht einfach mit zB CUPSoder system-config-printer; Im Allgemeinen muss ich zurückgehen, den PDF-Reader erneut öffnen und von vorne beginnen. In keinem der mir bekannten PDF-Reader können Sie eine Liste der zu druckenden Dokumente aufbewahren, aber dies ist möglicherweise eine verborgene Funktion eines PDF-Readers, von dem ich nichts weiß.

Folgendes möchte ich auf jeden Fall können:

  • Geben Sie eine Liste der zu druckenden PDF-Dateien an.
  • Behalten Sie diese Liste auf der Festplatte, damit ich die Anwendung schließen oder neu starten kann, ohne die gesamte Liste zu verlieren.
  • Geben Sie die Drucker an, an die ich sie senden möchte, ohne zu diesem Zeitpunkt tatsächlich mit diesen Druckern verbunden zu sein.
  • Geben Sie Druckoptionen wie Farbe, Duplex und Anzahl der Kopien an.
  • Ändern Sie diese Druckerzuweisungen und Druckoptionen später.
  • Warten Sie, bis ich eine Taste drücke oder einen Befehl ausführe, um die Dokumente tatsächlich zu drucken.
  • Führen Sie eine separate Liste der bereits gedruckten Dokumente, falls der Druck nicht funktioniert oder ich sie später erneut drucken möchte.

Ich weiß, ich könnte etwas zusammen mit einem Shell-Skript lprund einer Liste von Pfaden in einer Textdatei hacken , aber ich kann nicht anders, als das Gefühl zu haben, dass dieses Problem bereits auf robustere und elegantere Weise gelöst wurde.

Bonuspunkte:

  • Es ist nicht erforderlich, dass die Dokumente in einem PDF-Reader geöffnet sind. Ich möchte sie drucken, nicht durchsuchen, und es gibt keinen Grund, warum sie dieselbe Anwendung sein müssen.
  • Mehr als eine Liste.
  • Funktioniert auch für Postscript, DjVu und andere Seitenbeschreibungsformate.
  • Ziehen und Ablegen von Dateimanagern.

Irgendwelche Vorschläge?

Nathaniel M. Beaver
quelle
Starten Sie ein Kopfgeld, wenn Sie genug Ruf haben;)
AB
Soweit ich sehen kann, würde dies nur eine einfache Änderung der Druckerwarteschlangen erfordern, wie sie derzeit von implementiert werden cups. Sie drucken einfach in die gewünschte Druckerwarteschlange, halten die Druckaufträge jedoch an, bis Sie sie freigeben. Die Taste "Halten" ist alles, was benötigt wird. Oder vermisse ich etwas?
Jos
@Jos Meine Version von system-config-printer-appletermöglicht es mir, Druckaufträge zurückzuhalten und freizugeben sowie auf andere Drucker zu verschieben, aber ich kann die Reihenfolge der Druckaufträge oder die Druckoptionen nach dem Senden des Auftrags nicht ändern. Außerdem ist der Pfad zum Originaldokument zu diesem Zeitpunkt schon lange nicht mehr vorhanden.
Nathaniel M. Beaver
@AB Für Kopfgelder sind leider 75 Internetpunkte erforderlich, und ich bin ein geringer 53-Zeiger.
Nathaniel M. Beaver

Antworten:

10

Was ich tue, ist das Folgende - es ist nicht so vielseitig, wie Sie gefragt haben, aber es funktioniert fast in Ordnung. Sie müssen alle Ihre Drucker definiert haben, und dann benötigen Sie diese beiden Skripte:

  1. stop_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsdisable "$i"
        echo " " paused.
    done
    
  2. start_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsenable "$i"
        echo " " restarted.
    done
    

Sie müssen sie (zum Beispiel ~/bin) in Ihren Pfad einfügen und mit ausführbar machen chmod +x. CAVEAT : Ich habe keinen Drucker mit Leerzeichen im Namen. Die Skripte werden in diesem Fall nicht getestet (aber ich bin sicher, dass einer der Gurus unseres Shell-Skripts die Skripte blitzschnell reparieren wird; -) ...)

Jetzt können Sie Folgendes ausgeben:

[romano:~] % stop_printers
Printer PDF:  paused.
Printer ColorDEA:  paused.
Printer Deskjet_6980:  paused.
Printer fotocop5:  paused.

Und Sie können von jedem beliebigen Ort aus drucken, der Drucker wird angehalten:

Drucker von Evince

Sie können Ihre Warteschlange sehen:

[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank    Owner   Job     File(s)                         Total Size
1st     romano  439     Bones_3+RG.pdf — Flesh depth  125952 bytes

(AFAIK, die Druckwarteschlangen bleiben auch nach einem Neustart bestehen). Und wenn Sie drucken möchten:

[romano:~] % start_printers         
Printer PDF:  restarted.
Printer ColorDEA:  restarted.
Printer Deskjet_6980:  restarted.
Printer fotocop5:  restarted.

Mit können lprmSie einen Job entfernen, wenn Sie möchten. lprUm ein Dokument über die Befehlszeile in eine Warteschlange zu bringen und wenn Sie unterschiedliche "Listen" möchten, verbietet es niemand, denselben Drucker mehrmals mit unterschiedlichen Namen zu definieren.

Sie können jeden Drucker auch manuell wiederaufnehmen. Dies ist nur eine Frage cupsenable <printername>der Eingabeaufforderung.

Ich glaube nicht, dass Sie mit dieser Lösung die Druckoptionen nachträglich ändern können. Sie müssen das Dokument dafür aus der Warteschlange nehmen und erneut in die Warteschlange stellen.

Rmano
quelle
2
+1 Gut, aber während Sie Ihre Gründe haben können, könnte Ihren Array bevöl gemacht wird einfacher durch die richtigen Trennzeichen in der Verwendung von cutAbschnitt: cat /etc/printcap | cut -d "|" -f 1 | grep -v "#". Sie sparen sich Zeit, indem Sie die Übersetzung entfernen tr. Dies funktioniert, sofern Sie nur Ihr erstes Feld benötigen.
Cbhihe
1

Mein Paket (schamloser Plug), duplexpr, macht einiges von dem, was Sie wollen und enthält Bash-Funktionen, die nützlich sein können, um Ihre eigene Version zu rollen. (Es ist in bash codiert, daher sollte es relativ einfach zu ändern sein und ich werde helfen, wenn ich kann.)

Es wurde entwickelt, um Duplexdruck auf Nicht-Duplexdruckern zu emulieren, und implementiert eine eigene einfache Druckwarteschlangenverwaltung. Es hat sowohl GUI- als auch CLI-Schnittstellen.

Die aktuelle Version druckt nur im Duplex-Modus und funktioniert nur mit Nicht-Duplex-Druckern. Es ist jedoch eine neue Version in Arbeit, die Drucker mit Duplex-Hardware unterstützt, die im Wesentlichen nur die Verwaltung von Druckern und Warteschlangen ohne die Duplex-Emulationssoftware umfasst. (Ich habe eine Alpha-Version eines Skripts, das bereits funktioniert, wenn jemand mich direkt über das Projekt kontaktieren möchte, usw.)

Das System druckt auf dem aktuellen Standarddrucker. Die Skripte dplx und duplex akzeptieren jedoch zusätzliche Argumente, die an lp übergeben werden und zum Festlegen von Optionen verwendet werden können, die lp versteht, z. B. Drucker und andere Eigenschaften.

Das System verarbeitet derzeit PDF-, PostScript- und Nur-Text-Dateien.

Das einzige, was nicht möglich ist , ist das Drucken von Dateien, die mit der Option "In Datei drucken" in Acroread erstellt wurden. Diese Dateien funktionieren mit lp einfach nicht, und ich war noch nie in der Lage, die Aufmerksamkeit eines der vorgelagerten Leute auf sich zu ziehen, um herauszufinden, wo die Probleme liegen.

Persönlich drucke ich fast alles "offline" (unter Verwendung der Print to File-Optionen, die die meisten Anwendungen unterstützen), auch wenn meine Drucker verfügbar sind. Es hilft mir, mich auf das zu konzentrieren, was ich tue. Wenn ich später einen geeigneten Haltepunkt erreiche, drucke ich Auftragsstapel.

Eine Druckwarteschlange ist auch sehr hilfreich, wenn Sie eine weitere Kopie von etwas drucken möchten, ohne es neu generieren zu müssen. Dies ist wichtig, um Druckerfehler wie Papierstaus oder Tonermangel zu beheben.

Joe
quelle
Das ist ein interessantes Paket, sieht aber so aus, als hätte es im Moment ein paar Ecken und Kanten, und ich bin mir nicht sicher, ob ich es reparieren kann, wenn etwas schief geht. Hast du schon darüber nachgedacht, es auf Github hochzuladen?
Nathaniel M. Beaver
@bariumbitmap - Ich benutze es seit über 10 Jahren täglich (seit ich es zum ersten Mal geschrieben habe). Es ist stabil. Ich habe auch eine neue Version in der Entwicklung. Wenn Sie Probleme haben oder zusätzliche Funktionen benötigen und bereit sind, mit mir zusammenzuarbeiten, werde ich das Problem beheben. Ich muss noch Git lernen, also nutze ich Github nur minimal. Sourceforge ist sehr bekannt.
Joe
0

Es scheint keine vollständige Lösung für dieses Problem zu geben, aber hier ist eine Funktion, die ich zu meiner hinzugefügt habe und .bashrcdie Rmanos Antwort oben ähnelt , mit dem zusätzlichen Komfort der automatischen Vervollständigung.

all-printers() {
    if [ "$*" = "" ]
    then
        # Print usage."
        printf "Usage:\n"
        printf "all-printers start\n"
        printf "all-printers stop\n"
        return 1
    elif ! [ "$1" = "stop" -o "$1" = "start" ]
    then
        printf "Unrecognized command: $1\n"
        return 1
    fi

    cut -f 1 -d '|' /etc/printcap |
    grep -v '^#' |
    while read printer_name
    do 
        if [ "$1" = "stop" ]
        then
            cupsdisable "$printer_name"
            printf "$printer_name stopped.\n"
        elif [ "$1" = "start" ]
        then
            cupsenable "$printer_name"
            printf "$printer_name started.\n"
        fi
    done
}
complete -W 'stop start' all-printers
Nathaniel M. Beaver
quelle