
Tengo un script de shell que toma un archivo PDF como argumento y lo imprime con opciones adicionales específicas de la impresora. ¿Cómo puedo agregar este script como una impresora virtual que se puede seleccionar desde la GUI?
El script de shell es un script dúplex manual que toma un archivo PDF, imprime páginas pares, le indica al usuario mediante zenity que voltee las páginas y luego imprime las páginas impares.
Mi flujo de trabajo actual es:
- Archivo -> Imprimir -> Guardar en archivo -> tmp.pdf
my_duplex_script tmp.pdf
rm tmp.pdf
¿Hay alguna manera de hacerlo como:
- Archivo -> Imprimir -> my_script_as_virtual_printer
Nota: Esto está en Linux mint 13 canela. Lo he intentado gnome-manual-duplex
pero no me funciona.
El cuadro de diálogo GUI desde el que puedo imprimir en un archivo PDF
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
Respuesta1
Nunca he probado esto pero hay una herramienta llamadatea4cups
lo que parece que podría implementar un preenganche a su script que haría la impresión. Luego, podría cancelar esta impresión y no ir a una impresora real a través de tazas, permitiendo que su script haga la impresión.
extracto
Las posibilidades son infinitas :
- Envía el mismo trabajo a varias impresoras al mismo tiempo, lo que no es posible con CUPS.
- Automatice el archivo PDF de todos los trabajos de impresión.
- Prohibir trabajos de impresión duplicados (se muestra un ejemplo simple en el archivo de configuración de muestra)
- Cree una solución de contabilidad impresa en 15 minutos (SÍ, ESTO ES REAL)
- etc...
Tea4cups proporciona lo siguiente facilita:
Tea4CUPS proporciona tres formas de ejecutar comandos:
- filtros: un filtro puede modificar los datos de entrada antes de enviarlos a la impresora o ponerlos a disposición de los enlaces previos y posteriores definidos a continuación. Actualmente se puede definir un único filtro por cola de impresión.
- prehooks: se garantiza que se ejecutarán antes de que el trabajo de impresión se envíe a la impresora real. Cualquier preenganche que salga de -1 puede cancelar el trabajo de impresión. Se puede definir cualquier número de prehooks para una cola de impresión en particular.
- posthooks: se garantiza que se ejecutarán después de que el trabajo de impresión se haya enviado a la impresora real, a menos que el trabajo haya sido cancelado previamente mediante un prehook. Se puede definir cualquier número de posthooks para una cola de impresión en particular.
Respuesta2
¿Cómo puedo agregar este script como una impresora virtual que se puede seleccionar desde la GUI?
Para anunciar una impresora virtual, simplemente edite su archivo /etc/printcap
. Esto no es muy fácil, porque la sintaxis de IMPRIMIRNecesita acostumbrarse.
Aquí se muestra un ejemplo de cómo hacerlo.Servicio 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:
Aquí el /usr/bin/smbprint
script se utiliza como filtro de impresión. La impresora en sí es /dev/null
.
Quizás necesites instalar cups-bsd
, pero suele ser la configuración predeterminada.
Respuesta3
Llegué tarde a la fiesta, pero quise hacer lo mismo y no encontré otra solución.
Escribiré aquí cómo lo resolví, tal vez otros encuentren útil la solución.
- hizo un filtro para tazas para atrapar el archivo a imprimir
- hizo un backend para imprimir el archivo
- Hizo un instalador agradable y fácil.
El código fuente está en github: https://github.com/dentys03/manual_duplex_linux
Debería funcionar en cualquier impresora HP. Supongo que se adapta fácilmente a otras impresoras.