Utilisation d'un script shell comme imprimante virtuelle

10

J'ai un script shell qui prend un fichier PDF comme argument et l'imprime avec des options spécifiques à l'imprimante supplémentaires. Comment puis-je ajouter ce script en tant qu'imprimante virtuelle pouvant être sélectionnée dans l'interface graphique?

Le script shell est un script duplex manuel qui prend un fichier PDF, imprime des pages paires, donne une invite utilisateur en utilisant zenity demandant à l'utilisateur de retourner les pages, puis imprime les pages impaires.

Mon flux de travail actuel est le suivant:

  1. Fichier -> Imprimer -> Enregistrer dans un fichier -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

Existe-t-il un moyen de le faire comme:

  1. Fichier -> Imprimer -> my_script_as_virtual_printer

Remarque: Ceci est sur Linux menthe 13 cannelle. J'ai essayé gnome-manual-duplexmais ça ne marche pas pour moi.


La boîte de dialogue GUI à partir de laquelle je peux imprimer dans un fichier PDF Boîte de dialogue d'impression 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
user80551
la source

Réponses:

2

Je n'ai jamais essayé ceci mais il existe un outil appelé tea4cupsqui sonne comme si vous pouviez implémenter un pré-crochet à votre script qui ferait l'impression. Vous pourriez alors faire annuler cette impression et ne pas réellement aller sur une véritable imprimante via des tasses, permettant à votre script de faire l'impression à la place.

extrait

Les possibilités sont infinies :

  • Envoyez le même travail à plusieurs imprimantes en même temps, ce qui n'est pas possible avec CUPS.
  • Automatisez l'archivage PDF de tous les travaux d'impression.
  • Interdire les travaux d'impression en double (un exemple simple est illustré dans l'exemple de fichier de configuration)
  • Créez une solution de comptabilité d'impression en 15 minutes (OUI, C'EST POUR DE VRAI)
  • etc...

Tea4cups fournit les facilités suivantes:

Tea4CUPS propose trois façons de lancer des commandes:

  • filtres: un filtre peut modifier les données d'entrée avant de les envoyer à l'imprimante ou de les mettre à disposition des crochets pré et post définis ci-dessous. Actuellement, un seul filtre peut être défini par file d'attente d'impression.
  • pré-raccords: ils sont garantis pour être lancés avant que le travail d'impression ne soit envoyé à l'imprimante réelle. Tout pré-crochet qui quitte -1 peut annuler le travail d'impression. Un nombre quelconque de pré-raccords peut être défini pour une file d'attente d'impression particulière.
  • posthooks: ils sont garantis pour être lancés après que le travail d'impression a été envoyé à l'imprimante réelle, à moins que le travail n'ait été précédemment annulé par un pré-crochet. Un nombre quelconque de posthooks peut être défini pour une file d'attente d'impression particulière.
slm
la source
2

Comment puis-je ajouter ce script en tant qu'imprimante virtuelle pouvant être sélectionnée dans l'interface graphique?

Pour publier une imprimante virtuelle, modifiez simplement votre /etc/printcap. Ce n'est pas très facile, car la syntaxe de PRINTCAP doit être utilisée.

Un exemple de procédure est montré ici Service PDF avec 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:

Ici, le /usr/bin/smbprintscript est utilisé comme filtre d'impression. L'imprimante elle-même l'est /dev/null.

Vous devrez peut-être installer cups-bsd, mais c'est souvent la configuration par défaut.


la source
Notez que printcapc'est le fichier de configuration pour BSD lpr ou lprNG, pas pour CUPS qui est la norme de facto de nos jours, et qui est la norme sur Mint.
Gilles 'SO- arrête d'être méchant'
J'ai donc mentionné le cups-bsdpackage, qui est également disponible sur Mint, installé par défaut et également bien pris en charge. cups-bsdn'est pas lprng! Ce n'est qu'un wrapper, qui fournit les fonctionnalités d'impression BSD pour les gobelets afin de prendre en charge les applications qui utilisent lprpour l'impression (c'est-à-dire xpdf).
0

Tard dans la fête, mais je voulais faire la même chose et je n'ai pas trouvé d'autre solution.

J'écrirai ici comment je l'ai résolu, peut-être que d'autres trouveront la solution utile.

  • fait un filtre pour les tasses pour attraper le fichier à imprimer
  • fait un backend pour imprimer le fichier
  • fait un installateur agréable et facile.

le code source est sur github: https://github.com/dentys03/manual_duplex_linux

Il devrait fonctionner sur n'importe quelle imprimante HP. Facilement adapté aux autres imprimantes, je suppose.

Denis
la source