
Eu tenho um script de shell que usa um arquivo PDF como argumento e o imprime com opções adicionais específicas da impressora. Como posso adicionar este script como uma impressora virtual que pode ser selecionada na GUI?
O shell script é um script duplex manual que pega um arquivo PDF, imprime páginas pares, fornece um prompt ao usuário usando zenity solicitando ao usuário que vire as páginas e depois imprima as páginas ímpares.
Meu fluxo de trabalho atual é:
- Arquivo -> Imprimir -> Salvar em arquivo -> tmp.pdf
my_duplex_script tmp.pdf
rm tmp.pdf
Existe alguma maneira de fazer isso como:
- Arquivo -> Imprimir -> my_script_as_virtual_printer
Nota: Isto está no Linux mint 13 canela. Eu tentei gnome-manual-duplex
, mas não funciona para mim.
A caixa de diálogo da GUI a partir da qual posso imprimir em um arquivo 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
Responder1
Eu nunca tentei isso, mas existe uma ferramenta chamadatea4cups
o que parece que você poderia implementar um pré-gancho em seu script que faria a impressão. Você poderia então cancelar essa impressão e não ir para uma impressora real por meio do cups, permitindo que seu script fizesse a impressão.
excerto
As possibilidades são infinitas :
- Envie o mesmo trabalho para várias impressoras ao mesmo tempo, o que não é possível com o CUPS.
- Automatize o arquivamento PDF de todos os trabalhos de impressão.
- Proibir trabalhos de impressão duplicados (um exemplo simples é mostrado no arquivo de configuração de amostra)
- Crie uma solução de contabilidade impressa em 15 minutos (SIM, ISSO É DE VERDADE)
- etc...
Tea4cups oferece as seguintes facilidades:
Tea4CUPS oferece três maneiras de iniciar comandos:
- filtros: um filtro pode modificar os dados de entrada antes de serem enviados para a impressora ou disponibilizados para os pré e pós-ganchos definidos abaixo. Atualmente um único filtro pode ser definido por fila de impressão.
- pré-ganchos: é garantido que sejam iniciados antes que o trabalho de impressão seja enviado para a impressora real. Qualquer pré-gancho que saia de -1 pode cancelar o trabalho de impressão. Qualquer número de pré-ganchos pode ser definido para uma fila de impressão específica.
- posthooks : é garantido que serão iniciados após o envio do trabalho de impressão para a impressora real, a menos que o trabalho tenha sido cancelado anteriormente por um pré-hook. Qualquer número de posthooks pode ser definido para uma fila de impressão específica.
Responder2
Como posso adicionar este script como uma impressora virtual que pode ser selecionada na GUI?
Para anunciar uma impressora virtual, basta editar seu arquivo /etc/printcap
. Isto não é muito fácil, porque a sintaxe do IMPRIMIR CAPpreciso me acostumar.
Um exemplo de como fazer isso é mostrado aquiServiço de PDF com 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:
Aqui o /usr/bin/smbprint
script é usado como filtro de impressão. A impressora em si é /dev/null
.
Talvez você precise instalar o cups-bsd
, mas geralmente é a configuração padrão.
Responder3
Atrasado para a festa, mas queria fazer a mesma coisa e não encontrei outra solução.
Vou escrever aqui como resolvi isso, talvez outros achem a solução útil.
- fiz um filtro para copos para pegar o arquivo a ser impresso
- fiz um backend para imprimir o arquivo
- fez um instalador agradável e fácil.
o código fonte está no github: https://github.com/dentys03/manual_duplex_linux
Deve funcionar em qualquer impressora HP. Facilmente adaptado para outras impressoras, eu acho.