Utilizzo di uno script di shell come stampante virtuale


10

Ho uno script di shell che prende un file PDF come argomento e lo stampa con ulteriori opzioni specifiche della stampante. Come posso aggiungere questo script come una stampante virtuale che può essere selezionata dalla GUI?

Lo script di shell è uno script duplex manuale che prende un file PDF, stampa pagine pari, dà un prompt all'utente usando zenity chiedendo all'utente di capovolgere le pagine e quindi stampare le pagine dispari.

Il mio flusso di lavoro attuale è:

  1. File -> Stampa -> Salva su file -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

C'è un modo per farlo come:

  1. File -> Stampa -> my_script_as_virtual_printer

Nota: questo è su Linux alla menta 13 cannella. Ho provato gnome-manual-duplexma non funziona per me.


La finestra di dialogo della GUI da cui posso stampare su un file PDF Finestra di dialogo di stampa GTK standard

my_duplex_script

#!/bin/bash

lp_args=
while getopts o: opt
do
    case "$opt" in
        o)  lp_args="$lp_args -o $OPTARG" ;;
        \?) echo >&2 Invalid argument; exit 1 ;;
    esac
done
shift `expr $OPTIND - 1`

file=$1
page_count=$(pdfinfo "$file" | grep Pages | awk '{print $2}')
is_odd=`expr $page_count % 2`

if [ $is_odd -eq 1 ]
then
    #outputting blank
    echo | lp -s -t "$file"-blank
fi

#printing even reversed
lp -s -o page-set=even -o outputorder=reverse $lp_args -t "$file"-even "$file"

if zenity --question --text="Flip and reinsert the entire stack when printing has finished." --ok-label="Proceed" --cancel-label="Cancel"
then
    #printing odd reversed
    lp -s -o page-set=odd -o outputorder=reverse $lp_args -t "$file"-odd "$file"
else
    echo >&2 User abort
    exit 1
fi

exit 0

Risposte:


2

Non l'ho mai provato, ma esiste uno strumento chiamato tea4cupsche sembra che tu possa implementare un prehook nella tua sceneggiatura che farebbe la stampa. Potresti quindi annullare questa stampa e in realtà non andare a una vera stampante tramite tazze, consentendo invece al tuo script di eseguire la stampa.

estratto

Le possibilità sono infinite :

  • Invia lo stesso lavoro a più stampanti contemporaneamente, cosa impossibile con CUPS.
  • Automatizza l'archiviazione PDF di tutti i lavori di stampa.
  • Vieta lavori di stampa duplicati (un esempio semplice è mostrato nel file di configurazione di esempio)
  • Crea una soluzione di contabilità di stampa in 15 minuti (SÌ, QUESTO È REALE)
  • eccetera...

Tea4cups fornisce le seguenti funzioni:

Tea4CUPS offre tre modi per avviare i comandi:

  • filtri: un filtro può modificare i dati di input prima che vengano inviati alla stampante o resi disponibili agli hook pre e post definiti di seguito. Attualmente è possibile definire un singolo filtro per coda di stampa.
  • prehooks: questi sono garantiti per essere lanciati prima che il lavoro di stampa venga inviato alla stampante reale. Qualsiasi prehook che esce da -1 può annullare il lavoro di stampa. È possibile definire un numero qualsiasi di prehook per una determinata coda di stampa.
  • posthook: sono garantiti per essere lanciati dopo che il lavoro di stampa è stato inviato alla stampante reale, a meno che il lavoro non sia stato precedentemente annullato da un prehook. È possibile definire un numero qualsiasi di posthook per una particolare coda di stampa.

2

Come posso aggiungere questo script come una stampante virtuale che può essere selezionata dalla GUI?

Per inserire una stampante virtuale, basta modificare il tuo /etc/printcap. Questo non è molto semplice, perché è necessario abituarsi alla sintassi di PRINTCAP .

Un esempio di come farlo è mostrato qui Servizio PDF con Samba :

# /etc/printcap
# PDF Service entry

lp|pdf|PDF Printer:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/pdf:\
        :af=/var/spool/lpd/pdf/acct:\
        :mx#0:sh:\
        :if=/usr/bin/smbprint:

Qui lo /usr/bin/smbprintscript viene utilizzato come filtro di stampa. La stessa stampante è /dev/null.

Forse dovrai installarlo cups-bsd, ma spesso è la configurazione predefinita.


Si noti che printcapè il file di configurazione per BSD lpr o lprNG, non per CUPS che è lo standard di fatto al giorno d'oggi, ed è lo standard su Mint.
Gilles 'SO- smetti di essere malvagio' il

Pertanto ho citato il cups-bsdpacchetto, che è disponibile anche su Mint, per impostazione predefinita installato e anche ben supportato. cups-bsdnon è lprng! È solo un wrapper, che fornisce la funzionalità di stampa BSD per tazze al fine di supportare le applicazioni che utilizzano lprper la stampa (ad esempio xpdf).

0

In ritardo alla festa, ma volevo fare la stessa cosa e non ho trovato altra soluzione.

Scriverò qui come l'ho risolto, forse altri troveranno utile la soluzione.

  • fatto un filtro per tazze per catturare il file da stampare
  • fatto un backend per stampare il file
  • fatto un programma di installazione piacevole e facile.

il codice sorgente è su github: https://github.com/dentys03/manual_duplex_linux

Dovrebbe funzionare su qualsiasi stampante HP. Facilmente adattato per altre stampanti, immagino.

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.