"Stampa dopo" software

12

A volte, quando lavoro con il mio portatile, voglio mettere in coda alcuni documenti da stampare più tardi, dato che al momento non sono connesso a una stampante.

Tuttavia, le code di stampa effettive non sono progettate per questo; cercano immediatamente di stampare il documento e all'improvviso iniziano a stampare non appena arrivo in rete, cosa che generalmente non è ciò che voglio fare. Inoltre, a volte desidero modificare 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 fallisce perché ad es. la stampante ha esaurito la carta o il toner e desidero ristampare il documento su una stampante diversa. Questo non è semplice, ad es. CUPS o system-config-printer ; Generalmente devo tornare indietro, riaprire il lettore PDF e ricominciare da capo. Nessuno dei lettori di PDF che conosco ti consente di conservare un elenco di documenti da stampare in seguito, ma potrebbe trattarsi di una funzionalità nascosta di un lettore PDF da qualche parte che non conosco.

Ad ogni modo, ecco cosa voglio essere in grado di fare:

  • Specifica un elenco di PDF che voglio stampare.
  • Mantieni la lista su disco in modo che possa chiudere l'applicazione o riavviare senza perdere l'intero elenco.
  • Specifica la / e stampante / e Desidero inviarli in anticipo senza essere effettivamente connesso a tali stampanti in quel momento.
  • Specifica le opzioni di stampa come colore, fronte / retro e numero di copie.
  • Cambia i compiti di stampa e le opzioni di stampa più tardi.
  • Attendi finché non premo un pulsante o esegui un comando per stampare effettivamente i documenti.
  • Conserva un elenco separato di documenti che sono già stati stampati, nel caso in cui la stampa non funzioni o desidero ristamparli in seguito.

So che potrei modificare qualcosa con uno script di shell, lpr , e un elenco di percorsi in un file di testo, ma non posso fare a meno di pensare che questo problema sia già stato risolto in un modo più solido ed elegante .

Punti bonus:

  • Non richiedere 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 una lista.
  • Funziona anche con Postscript, DjVu e altri formati di descrizione della pagina.
  • Trascina e rilascia dai gestori di file.

Qualche suggerimento?

    
posta Nathaniel M. Beaver 14.07.2015 - 09:51
fonte

3 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 (ad 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 pubblicare:

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

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

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 attraverso i riavvii). E quando vuoi stampare:

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

Usando lprm puoi rimuovere un lavoro se necessario; lpr per accodare un documento tramite riga di comando, e se vuoi "liste" differenti, nessuno proibisce di definire più volte la stessa stampante con nomi diversi.

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

Quello che non penso che tu possa fare con questa soluzione sta cambiando le opzioni di stampa dopo il fatto --- dovrai dequeue e re-accodare il documento per questo.

    
risposta data Rmano 14.07.2015 - 11:06
fonte
1

Il mio pacchetto (plug spudorato), duplexpr fa parte di ciò che desideri e include funzioni di bash che possono essere utili nel rollare la tua versione. (È codificato in bash, quindi dovrebbe essere relativamente facile da modificare e ti aiuterò se posso.)

È progettato per emulare la stampa fronte-retro su stampanti non duplex e implementa la propria 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 una nuova versione è in lavorazione che gestirà le stampanti con hardware duplex che essenzialmente è solo la gestione della stampante e della coda senza il software di emulazione duplex. (Ho a disposizione una versione alpha 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 usati per impostare qualsiasi opzione che lp capisca come stampante e altre proprietà.

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

L'unica cosa che non fare è stampare i file che sono stati creati usando l'opzione Stampa su file da dentro Acroread. Quei file non funzionano con lp e non sono mai stato in grado di attirare l'attenzione di qualcuno degli upstream per capire quali sono 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 quello che sto facendo. Più tardi, quando raggiungo un punto di rottura adatto, stampo lotti di lavori.

Avere una coda di stampa è anche molto bello quando si desidera stampare un'altra copia di qualcosa senza doverla rigenerare ed è essenziale per gestire gli errori della stampante come inceppamenti o esaurimento del toner.

    
risposta data Joe 16.07.2015 - 01:15
fonte
0

Non sembra esserci una soluzione completa per questo problema, ma ecco una funzione che ho aggiunto al mio .bashrc che è simile a La risposta di Rmano sopra, con l'ulteriore comodità 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 ! [ "" = "stop" -o "" = "start" ]
    then
        printf "Unrecognized command: \n"
        return 1
    fi

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

Leggi altre domande sui tag