
У меня есть скрипт оболочки, который принимает PDF-файл в качестве аргумента и печатает его с дополнительными параметрами принтера. Как добавить этот скрипт в качестве виртуального принтера, который можно выбрать из графического интерфейса?
Скрипт оболочки представляет собой ручной дуплексный скрипт, который берет PDF-файл, печатает четные страницы, выдает пользователю подсказку с помощью zenity, предлагающую перевернуть страницы, а затем печатает нечетные страницы.
Мой текущий рабочий процесс таков:
- Файл -> Печать -> Сохранить в файл -> tmp.pdf
my_duplex_script tmp.pdf
rm tmp.pdf
Есть ли способ сделать это как:
- Файл -> Печать -> my_script_as_virtual_printer
Примечание: Это на Linux mint 13 cinnamon. Я пробовал, gnome-manual-duplex
но у меня не работает.
Диалоговое окно графического интерфейса, из которого можно распечатать файл 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
решение1
Я никогда этого не пробовал, но есть инструмент, который называетсяtea4cups
что звучит так, как будто вы могли бы реализовать prehook в вашем скрипте, который бы выполнял печать. Затем вы могли бы отменить эту печать и не переходить на настоящий принтер через cups, позволяя вашему скрипту выполнять печать вместо этого.
выдержка
Возможности безграничны :
- Отправляйте одно и то же задание на несколько принтеров одновременно, что невозможно в CUPS.
- Автоматизируйте архивацию всех заданий на печать в формате PDF.
- Запретить дублирование заданий на печать (простой пример показан в образце файла конфигурации)
- Создайте решение для печатного учета за 15 минут (ДА, ЭТО РЕАЛЬНО)
- и т. д...
Tea4cups предоставляет следующие возможности:
Tea4CUPS предоставляет три способа запуска команд:
- фильтры: Фильтр может изменять входные данные перед тем, как они будут отправлены на принтер или станут доступными для pre и post hooks, определенных ниже. В настоящее время для каждой очереди печати можно определить один фильтр.
- prehooks: они гарантированно запускаются до отправки задания на печать на реальный принтер. Любой prehook, который выходит из -1, может отменить задание на печать. Для конкретной очереди печати можно определить любое количество prehooks.
- posthooks: они гарантированно запускаются после отправки задания на печать на реальный принтер, если только задание не было предварительно отменено prehook. Для конкретной очереди печати можно определить любое количество posthooks.
решение2
Как добавить этот скрипт в качестве виртуального принтера, который можно будет выбрать из графического интерфейса?
Чтобы добавить виртуальный принтер, просто отредактируйте свой /etc/printcap
. Это не очень просто, потому что синтаксис PRINTCAPнужно привыкнуть.
Пример того, как это сделать, показан здесь.PDF-сервис с 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:
Здесь /usr/bin/smbprint
скрипт используется как фильтр печати. Сам принтер — /dev/null
.
Возможно, вам потребуется установить cups-bsd
, но часто это конфигурация по умолчанию.
решение3
Опоздал, но мне хотелось сделать то же самое, и я не нашел другого решения.
Я напишу здесь, как я решил эту проблему, возможно, другим это решение покажется полезным.
- сделал фильтр для чашек, чтобы поймать файл для печати
- сделал бэкэнд для печати файла
- сделал хороший и простой установщик.
Исходный код находится на github: https://github.com/dentys03/manual_duplex_linux
Должно работать на любом принтере HP. Легко адаптируется для других принтеров, я полагаю.