Використання сценарію оболонки як віртуального принтера


10

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

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

Мій поточний робочий процес:

  1. Файл -> Друк -> Зберегти у файлі -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

Чи є спосіб зробити так:

  1. Файл -> Друк -> my_script_as_virtual_printer

Примітка. Це на м'яті Linux з корицею 13. Я спробував, 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

Відповіді:


2

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

витяг

Можливості безмежні:

  • Надсилайте одну і ту ж роботу на кілька принтерів одночасно, що неможливо з CUPS.
  • Автоматизуйте PDF-архівування всіх завдань друку.
  • Заборонити повторювані завдання друку (простий приклад показаний у зразковому файлі конфігурації)
  • Створіть рішення для обліку друку за 15 хвилин (ТАК, ЦЕ ПРАВО)
  • тощо ...

Tea4cups забезпечує наступне полегшення:

Tea4CUPS пропонує три способи запуску команд:

  • Фільтри: Фільтр може змінювати вхідні дані перед тим, як їх надсилати на принтер або робити доступними для гачок попереднього і після розміщення, визначених нижче. Наразі для черги друку можна визначити один фільтр.
  • попередні виступи: вони гарантовано будуть запущені до того, як завдання друку буде відправлено на справжній принтер. Будь-яка попередня затримка, яка закінчується -1, може скасувати завдання друку. Будь-яка кількість попередніх записів може бути визначена для певної черги друку.
  • 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, але це часто конфігурація за замовчуванням.


Зауважте, що 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. Думаю, легко адаптується для інших принтерів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.