Использование сценария оболочки в качестве виртуального принтера

10

У меня есть сценарий оболочки, который принимает файл PDF в качестве аргумента и распечатывает его с дополнительными параметрами принтера. Как я могу добавить этот скрипт в качестве виртуального принтера, который можно выбрать из графического интерфейса?

Сценарий оболочки представляет собой ручной дуплексный сценарий, который принимает файл PDF, печатает четные страницы, выдает пользователю приглашение с помощью zenity, прося пользователя перевернуть страницы, а затем распечатывает нечетные страницы.

Мой текущий рабочий процесс:

  1. Файл -> Печать -> Сохранить в файл -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

Есть ли способ сделать это так:

  1. Файл -> Печать -> my_script_as_virtual_printer

Примечание: это на Linux mint 13 cinnamon. Я пытался, gnome-manual-duplexно это не работает для меня.


Диалоговое окно с графическим интерфейсом, из которого я могу печатать в файл PDF Стандартный диалог печати GTK

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
источник

Ответы:

2

Я никогда не пробовал этого, но есть инструмент под названием, tea4cupsкоторый звучит так, как будто вы можете реализовать предварительный крюк для вашего скрипта, который будет выполнять печать. Затем вы можете отменить эту печать и фактически не обращаться к настоящему принтеру с помощью чашек, что позволяет вашему сценарию выполнять печать.

выдержка

Возможности безграничны :

  • Отправьте одно и то же задание на несколько принтеров одновременно, что невозможно с CUPS.
  • Автоматизируйте PDF-архивирование всех заданий на печать.
  • Запретить повторяющиеся задания на печать (простой пример показан в примере файла конфигурации)
  • Создайте печатное бухгалтерское решение за 15 минут (ДА, ЭТО НАСТОЯЩАЯ)
  • и т.д...

Tea4cups обеспечивает следующее облегчает:

Tea4CUPS предоставляет три способа запуска команд:

  • Фильтры. Фильтр может изменять входные данные до того, как они будут отправлены на принтер или доступны для предварительных и последующих перехватчиков, определенных ниже. В настоящее время для каждой очереди печати можно определить один фильтр.
  • prehooks: они гарантированно будут запущены до того, как задание на печать будет отправлено на настоящий принтер. Любой предварительный крюк, который выходит из -1, может отменить задание на печать. Для определенной очереди печати может быть определено любое количество предшоков.
  • posthooks: они гарантированно будут запущены после того, как задание на печать будет отправлено на настоящий принтер, если задание не было предварительно отменено предварительным крючком. Для определенной очереди печати может быть определено любое количество повторных подключений.
SLM
источник
2

Как я могу добавить этот скрипт в качестве виртуального принтера, который можно выбрать из графического интерфейса?

Чтобы рекламировать виртуальный принтер, просто отредактируйте свой /etc/printcap. Это не очень легко, потому что к синтаксису PRINTCAP нужно привыкнуть.

Пример того, как это сделать, показан здесь PDF Service с 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, но это часто конфигурация по умолчанию.


источник
Обратите внимание, что printcapэто файл конфигурации для BSD lpr или lprNG, а не для CUPS, который в настоящее время является стандартом де-факто и является стандартом для Mint.
Жиль "ТАК - перестань быть злым"
Поэтому я упомянул cups-bsdпакет, который также доступен на Mint, установлен по умолчанию и также хорошо поддерживается. cups-bsdэто не lprng! Это только оболочка, которая обеспечивает функциональность печати BSD для чашек, чтобы поддерживать приложения, которые используют lprдля печати (например, xpdf).
0

Поздно на вечеринку, но я хотел сделать то же самое, и я не нашел никакого другого решения.

Я напишу здесь, как я решил это, возможно, другие найдут решение полезным.

  • сделал фильтр для чашек, чтобы поймать файл для печати
  • сделал бэкэнд для печати файла
  • сделал хороший и простой установщик.

Исходный код находится на GitHub: https://github.com/dentys03/manual_duplex_linux

Он должен работать на любом принтере HP. Я думаю, легко адаптируется для других принтеров.

Денис
источник