Программное обеспечение «Распечатать позже»

Программное обеспечение «Распечатать позже»

Иногда, когда я работаю на ноутбуке, мне хочется поставить в очередь несколько документов, чтобы распечатать их позже, поскольку в этот момент я не подключен к принтеру.

Однако настоящие очереди принтеров не предназначены для этого; они немедленно пытаются распечатать документ, и все внезапно начинают печатать, как только я подключаюсь к сети, что, как правило, не то, что я хочу делать. Более того, иногда я хочу изменить порядок документов в очереди, что не очень просто, особенно когда некоторые из них уже начали печатать.

Также иногда печать не удается, например, потому что в принтере заканчивается бумага или тонер, и я хочу перепечатать документ на другом принтере. Это не так просто, например, CUPSили system-config-printer; обычно мне приходится возвращаться, снова открывать PDF-ридер и начинать все заново. Ни один из известных мне PDF-ридеров не позволяет сохранять список документов для последующей печати, но это может быть скрытая функция PDF-ридера, о которой я не знаю.

В любом случае, вот что я хочу уметь делать:

  • Укажите список PDF-файлов, которые я хочу распечатать.
  • Сохраните этот список на диске, чтобы я мог закрыть приложение или перезагрузить его, не теряя весь список.
  • Укажите заранее принтер(ы), на которые я хочу отправить документы, не подключаясь к ним в данный момент.
  • Укажите параметры печати, такие как цвет, двусторонняя печать и количество копий.
  • Измените назначения принтера и параметры печати позже.
  • Подождите, пока я нажму кнопку или выполню команду, чтобы распечатать документ(ы).
  • Сохраните отдельный список уже распечатанных документов на случай, если печать не сработает или я захочу перепечатать их позже.

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

Бонусные очки:

  • Не требуйте, чтобы документы были открыты в программе для чтения PDF-файлов. Я хочу их распечатать, а не просматривать, и нет никаких причин, чтобы это было одно и то же приложение.
  • Более одного списка.
  • Также работает с Postscript, DjVu и другими форматами описания страниц.
  • Перетаскивание из файловых менеджеров.

Какие-либо предложения?

решение1

Я делаю следующее --- это не так универсально, как вы просили, но работает почти нормально. Вам нужно определить все ваши принтеры, а затем вам нужны эти два скрипта:

  1. stop_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsdisable "$i"
        echo " " paused.
    done
    
  2. start_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsenable "$i"
        echo " " restarted.
    done
    

Вам необходимо поместить их в свой путь (например ~/bin, ) и сделать их исполняемыми с помощью chmod +x.ПРЕДОСТЕРЕЖЕНИЕ: У меня нет принтеров с пробелами в именах. Скрипты в этом случае не тестируются (но я уверен, что один из наших гуру скриптов оболочки исправит скрипты в мгновение ока ;-)... )

Теперь вы можете оформить:

[romano:~] % stop_printers
Printer PDF:  paused.
Printer ColorDEA:  paused.
Printer Deskjet_6980:  paused.
Printer fotocop5:  paused.

И вы можете печатать откуда угодно, принтер будет приостановлен:

принтер от evince

Вы можете увидеть свою очередь:

[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank    Owner   Job     File(s)                         Total Size
1st     romano  439     Bones_3+RG.pdf — Flesh depth  125952 bytes

(Насколько мне известно, очереди печати сохраняются после перезагрузки). А когда вы хотите печатать:

[romano:~] % start_printers         
Printer PDF:  restarted.
Printer ColorDEA:  restarted.
Printer Deskjet_6980:  restarted.
Printer fotocop5:  restarted.

Используя lprm, можно удалить задание, если нужно; lprпоставить документ в очередь через командную строку; а если нужны разные «списки», то никто не запрещает определять один и тот же принтер несколько раз под разными именами.

Вы также можете возобновить работу каждого принтера вручную, для этого достаточно запустить его cupsenable <printername>из командной строки.

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

решение2

Мой пакет (бесстыдная реклама),дуплекспрделает часть того, что вам нужно, и включает функции bash, которые могут быть полезны при создании вашей собственной версии. (Он написан на bash, поэтому его должно быть относительно легко модифицировать, и я помогу вам, если смогу.)

Он разработан для эмуляции двусторонней печати на недуплексных принтерах и реализует собственное простое управление очередью печати. ​​Он имеет интерфейсы gui и cli.

Текущая версия печатает только в дуплексном режиме и работает только с принтерами, не поддерживающими дуплексную печать, но разрабатывается новая версия, которая будет работать с принтерами с дуплексным оборудованием, что по сути является просто управлением принтером и очередью без программного обеспечения для эмуляции дуплексной печати. ​​(У меня есть альфа-версия скрипта, которая уже работает, если кто-то хочет связаться со мной напрямую через проект и т. д.)

Система печатает на текущем принтере по умолчанию, но скрипты dplx и duplex принимают дополнительные аргументы, которые передаются в lp и могут использоваться для установки любых параметров, которые понимает lp, таких как принтер и другие свойства.

В настоящее время система обрабатывает файлы PDF, PostScript и простые текстовые файлы.

Единственное, что это будетнетсделать, это распечатать файлы, которые были созданы с помощью опции «Печать в файл» изв пределахAcroread. Эти файлы просто не работают с lp, и мне так и не удалось привлечь внимание кого-либо из разработчиков, чтобы выяснить, в чем проблема.

Лично я печатаю почти все "офлайн" (используя функцию "Печать в файл", которую поддерживает большинство приложений), даже когда мой принтер(ы) доступен. Это помогает мне сосредоточиться на том, что я делаю. Позже, когда я достигаю подходящей точки останова, я печатаю партии заданий.

Наличие очереди печати также очень удобно, когда вам нужно напечатать еще одну копию чего-либо без необходимости ее повторной генерации, а также она необходима для устранения ошибок принтера, таких как замятие бумаги или отсутствие тонера.

решение3

Кажется, для этой проблемы нет полного решения, но вот функция, которую я добавил в свой, .bashrcкоторая похожа наОтвет Рмановыше, с дополнительным удобством автозаполнения.

all-printers() {
    if [ "$*" = "" ]
    then
        # Print usage."
        printf "Usage:\n"
        printf "all-printers start\n"
        printf "all-printers stop\n"
        return 1
    elif ! [ "$1" = "stop" -o "$1" = "start" ]
    then
        printf "Unrecognized command: $1\n"
        return 1
    fi

    cut -f 1 -d '|' /etc/printcap |
    grep -v '^#' |
    while read printer_name
    do 
        if [ "$1" = "stop" ]
        then
            cupsdisable "$printer_name"
            printf "$printer_name stopped.\n"
        elif [ "$1" = "start" ]
        then
            cupsenable "$printer_name"
            printf "$printer_name started.\n"
        fi
    done
}
complete -W 'stop start' all-printers

Связанный контент