Software "Stampa più tardi"


12

A volte, quando lavoro sul mio laptop, voglio mettere in coda alcuni documenti per stamparli in seguito, poiché al momento non sono collegato a una stampante.

Tuttavia, le code di stampa effettive non sono progettate per questo; provano immediatamente a stampare il documento e tutti improvvisamente iniziano a stampare non appena arrivo in rete, cosa che generalmente non è ciò che voglio fare. Inoltre, a volte voglio cambiare l'ordine dei documenti in coda, il che non è molto semplice, in particolare una volta che alcuni di essi hanno iniziato a stampare.

Inoltre, a volte la stampa non riesce perché, ad esempio, la stampante esaurisce la carta o il toner e desidero ristampare il documento su una stampante diversa. Questo non è semplice con eg CUPSo system-config-printer; In genere devo tornare indietro, riaprire il lettore PDF e ricominciare da capo. Nessuno dei lettori PDF che conosco ti consente di conservare un elenco di documenti da stampare in un secondo momento, ma questa potrebbe essere una caratteristica nascosta di un lettore PDF da qualche parte che non conosco.

Comunque, ecco cosa voglio essere in grado di fare:

  • Specifica un elenco di PDF che voglio stampare.
  • Conservare l'elenco su disco in modo da poter chiudere l'applicazione o riavviare senza perdere l'intero elenco.
  • Specificare le stampanti a cui si desidera inviarle in anticipo senza essere effettivamente collegate a tali stampanti al momento.
  • Specificare le opzioni di stampa come colore, fronte-retro e numero di copie.
  • Modificare le assegnazioni della stampante e le opzioni di stampa in un secondo momento.
  • Attendere finché non premo un pulsante o eseguo un comando per stampare effettivamente i documenti.
  • Tenere un elenco separato di documenti che sono già stati stampati, nel caso in cui la stampa non funzioni o si desidera ristamparli in un secondo momento.

So che potrei hackerare qualcosa insieme a uno script di shell lpre un elenco di percorsi in un file di testo, ma non posso fare a meno di sentire che questo problema è già stato risolto in un modo più robusto ed elegante.

Punti bonus:

  • Non è necessario che i documenti siano aperti in un lettore PDF. Voglio stamparli, non sfogliarli e non c'è motivo per cui debbano essere la stessa applicazione.
  • Più di un elenco.
  • Funziona anche con Postscript, DjVu e altri formati di descrizione della pagina.
  • Trascina selezione da file manager.

Eventuali suggerimenti?


Inizia una taglia se hai abbastanza reputazione;)
AB

Per quanto posso vedere, ciò richiederebbe solo una semplice modifica delle code di stampa come attualmente implementato da cups. Dovresti semplicemente stampare sulla coda di stampa desiderata, ma mettere i processi di stampa "in attesa" fino a quando non decidi di "rilasciarli". Il pulsante "in attesa" è tutto ciò che serve. O mi manca qualcosa?
Jos

@Jos La mia versione di system-config-printer-appletmi consente di mettere in attesa e rilasciare i lavori di stampa, nonché di spostarli su altre stampanti, ma non posso cambiare l'ordine dei lavori di stampa o le opzioni di stampa dopo aver inviato il lavoro. Inoltre, a quel punto il percorso del documento originale è ormai scomparso.
Nathaniel M. Beaver,

@AB Purtroppo le taglie richiedono 75 punti internet e io sono un 53-puntatore basso.
Nathaniel M. Beaver,

Risposte:


10

Quello che faccio è il seguente --- non è versatile come hai chiesto, ma funziona quasi bene. Devi avere tutte le tue stampanti definite e quindi hai bisogno di questi due script:

  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
    

Devi metterli nel tuo percorso (per esempio ~/bin) e renderli eseguibili con chmod +x. CAVEAT : Non ho nessuna stampante con spazi nei loro nomi. Gli script non sono testati in quel caso (ma sono sicuro che uno dei guru del nostro script shell risolverà gli script in un lampo; -) ...)

Ora puoi emettere:

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

E puoi stampare da dove vuoi, la stampante verrà messa in pausa:

stampante da evince

Puoi vedere la tua coda:

[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, le code di stampa sono persistenti durante i riavvii). E quando vuoi stampare:

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

Utilizzando lprmè possibile rimuovere un lavoro, se necessario; lpraccodare un documento dalla riga di comando e se si desidera "elenchi" diversi, nessuno vieta di definire più volte la stessa stampante con nomi diversi.

Puoi anche riprendere a mano ogni stampante, è solo una questione di esecuzione cupsenable <printername>dal prompt.

Quello che non penso che tu possa fare con questa soluzione è cambiare le opzioni di stampa dopo il fatto --- dovrai dequequare e ri-accodare il documento per questo.


2
1 Buono, però, mentre si può avere le tue ragioni, popolando la matrice potrebbe essere reso più semplice utilizzando il delimitatore corretto nella cutporzione: cat /etc/printcap | cut -d "|" -f 1 | grep -v "#". Ti risparmi un po 'di tempo ciclo eliminando la traduzione tr. Funziona a condizione che tu abbia bisogno solo del tuo primo campo.
Cbhihe,

1

Il mio pacchetto (plug shameless), duplexpr fa un po 'di quello che vuoi e include funzioni bash che potrebbero essere utili nel rotolare la tua versione. (È codificato in bash, quindi dovrebbe essere relativamente facile da modificare e ti aiuterò se posso.)

È progettato per emulare la stampa duplex su stampanti non duplex e implementa la sua semplice gestione delle code di stampa. Ha entrambe le interfacce gui e cli.

La versione corrente stampa solo in duplex e funziona solo con stampanti non duplex, ma è in lavorazione una nuova versione che gestirà le stampanti con hardware duplex che essenzialmente è solo la gestione di stampanti e code senza il software di emulazione duplex. (Ho una versione alfa disponibile di uno script che funziona già se qualcuno vuole contattarmi direttamente tramite il progetto, ecc.)

Il sistema stampa sulla stampante predefinita corrente, ma gli script dplx e duplex accettano argomenti aggiuntivi che vengono passati a lp e possono essere utilizzati per impostare qualsiasi opzione che lp capisca come stampante e altre proprietà.

Il sistema attualmente gestisce PDF, PostScript e file di testo semplice.

L'unica cosa che sarà non fare è stampare i file che sono stati creati utilizzando l'opzione Stampa File per da dentro Acroread. Quei file semplicemente non funzionano con lp e non sono mai stato in grado di attirare l'attenzione di nessuna delle persone a monte per capire quali fossero i problemi.

Personalmente, stampo quasi tutto "offline" (utilizzando le opzioni Stampa su file supportate dalla maggior parte delle applicazioni) anche quando sono disponibili le mie stampanti. Mi aiuta a concentrarmi su ciò che sto facendo. Successivamente, quando raggiungo un punto di interruzione adeguato, stampo gruppi di lavori.

Avere una coda di stampa è anche molto utile quando si desidera stampare un'altra copia di qualcosa senza rigenerarla ed è essenziale per gestire errori di stampa come inceppamenti o esaurimento del toner.


Questo è un pacchetto interessante, ma sembra che abbia alcuni spigoli in questo momento, e non sono sicuro che sarei in grado di risolverlo se qualcosa fosse andato storto. A proposito, hai pensato di caricarlo su Github?
Nathaniel M. Beaver,

@bariumbitmap: lo uso quotidianamente da oltre 10 anni (da quando l'ho scritto per la prima volta). È stabile. Ho anche una nuova versione in sviluppo. Se lo rompi o hai bisogno di funzionalità aggiuntive e sei disposto a lavorare con me, lo risolverò. Devo ancora imparare git, quindi uso minimamente github. Sourceforge è molto noto.
Joe,

0

Non sembra esserci una soluzione completa per questo problema, ma ecco una funzione che ho aggiunto alla mia .bashrcche è simile alla risposta di Rmano sopra, con la comodità aggiuntiva del completamento automatico.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.