Ручная двусторонняя печать для Mac (и / или Linux)

8059
Chris Lercher

Мои принтеры не поддерживают автоматическую двустороннюю печать. Я ищу решение для моих компьютеров Mac и Linux, которое я видел с большинством драйверов принтеров Windows:

  • Отметьте «Ручной дуплекс» на экране принтера.
  • Принтер начинает печатать на одной стороне
  • Появится диалоговое окно с просьбой перевернуть страницы
  • Принтер печатает на другой стороне.

Единственное, что я могу сделать, - это print odd pagesснова открыть диалоговое окно и print even pages, но это очень неудобно, особенно когда я хочу печатать только определенный диапазон страниц документа, поскольку диалог Mac каждый раз забывает мой предыдущий диапазон страниц. Это становится еще более неудобным при печати двухсторонней печати или при изменении дополнительных настроек для этой распечатки.

Есть ли какой-нибудь инструмент, который может это сделать? Или, может быть, «виртуальный драйвер принтера», который может находиться где-то между диалогом и фактическим драйвером принтера, который управляет этими шагами? (Инструмент Windows http://en.wikipedia.org/wiki/FinePrint может сделать что-то подобное, но мне не нужны все его функции, и он мне нужен в Mac / Linux.)

Или кто-то может знать хитрость, как заставить диалог печати оставаться открытым, то есть «Печатать, но не закрывать»?

Обновить

Кажется, что такой инструмент еще не существует. Насколько сложно было бы реализовать что-то подобное? Где он должен быть интегрирован - как драйвер принтера CUPS или как ловушка для действия печати диалога? Может ли он работать кроссплатформенно, или он должен быть специфичным для Mac / Linux?

Может ли кто-то с опытом в Mac / Linux / программировании драйверов пролить свет на это?

Решение

Текущее решение:

Создайте скрипт Apple Automator:


Действие: Извлечение нечетных и четных страниц [Все страницы в отдельных файлах]


Действие: Запустить сценарий оболочки [Передать ввод в качестве аргументов]

mv "$1" /tmp/odd.pdf mv "$2" /tmp/even.pdf lpr /tmp/odd.pdf 

Действие: запросите подтверждение ["Пожалуйста, переверните страницы"]


Действие: Запустить сценарий оболочки [Передать ввод в качестве аргументов]

lpr /tmp/even.pdf 

Это еще не идеально. Предложения по улучшению и альтернативы приветствуются!

7
Пересмотрено для ссылки на CUPS, который используется в дистрибутивах OS X и Linux. Broam 14 лет назад 0
@Broam: Спасибо, тег чашки - очень хорошая идея. Chris Lercher 14 лет назад 0
В качестве отступления: некоторые принтеры могут также нуждаться в печати нечетных страниц в обратном порядке ...? (В противном случае необходимо переставить страницы между двумя заданиями на печать.) Хммм. Arjan 14 лет назад 0

8 ответов на вопрос

3
Arjan

ПОЧТИ, но пока нет сигары : 4-й шаг только получает нечетные страницы с 1-го шага, а затем берет четные страницы из этого набора ... Это не хорошо. Я удалю это через некоторое время, если я не придумаю что-нибудь умное. (1-й шаг также можно сделать, чтобы сразу создать два файла, но вам нужно диалоговое окно подтверждения. Может быть, есть некоторая «перезагрузка» или параллельная обработка в Automator.


Для Mac Automator - ваш друг:

  • Открыть Автоматор

  • Выберите «Плагин печати» (Плагины печати - это рабочие процессы, доступные в диалоговом окне печати. ​​Они принимают PDF-версии документа для печати. ​​До версии 10.6 Snow Leopard вы можете не получить этот выбор, пока не собираетесь сохранить рабочий процесс, а не при создании пустого рабочего процесса. Должен работать так же.)

  • Перетащите следующие элементы в рабочий процесс справа:

    1. «Извлечь нечетные и четные страницы» и выберите «Нечетные»

    2. «Print Finder Items»

    3. «Запросите подтверждение», напишите несколько инструкций

    4. «Извлечь нечетные и четные страницы» и выберите «Четные»

    5. «Print Finder Items»

  • Сохрани это. Он будет в конечном итоге ~/Library/PDF Services/и будет частью меню PDF в диалоговом окне «Печать».

enter image description here
Автоматизатор на помощь

enter image description here
Меню PDF в диалоге печати

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

@Arjan: Хорошая идея! У меня нет большого опыта работы с Automator - я надеюсь, что есть способ получить доступ к обоим файлам PDF, которые созданы «Извлечь нечетные и четные страницы». Я тоже пока не нашел. Chris Lercher 14 лет назад 0
@ Крис, я думаю, нам понадобится кое-что из командной строки, чтобы сделать это. Тем не менее, Automator может быть использован для выполнения любой команды, и интеграция с диалоговым окном печати приятна. Кроме того, плагины для Automator [для печати буклета существуют] (http://automatorworld.com/archives/create-pdf-booklet/), так что, возможно, есть плагин для дуплекса ... Arjan 14 лет назад 1
Multivalent Document Tools предоставляет [split-duplex] (http://multivalent.sourceforge.net/Tools/pdf/Split.html) (см. Пример 7). Это «только» оставляет в печати два полученных PDF-файла ... Arjan 14 лет назад 0
@Arjan: Опять же, очень хорошая идея: Automator в сочетании со скриптом bash. Я думаю, мы приближаемся! Как передать вывод (PDF) в сценарий? Мне это нужно либо в виде файла (или двух файлов), либо из stdin. Chris Lercher 14 лет назад 0
@ chris, с первыми шагами проблем нет, см. http://dltj.org/article/pocketmodmac/ Однако скрипт Bash также должен вызывать фактическую печать и показывать диалог между двумя заданиями. (Я не нашел способа передать полученные имена файлов обратно в Automator, но это может быть выполнимо.) Arjan 14 лет назад 0
Эрнр, щедрость слишком рано - теперь я чувствую себя обязанным действительно решить эту проблему! (Но, думаю, мы действительно доберемся туда, но не сегодня вечером ... я вернусь.) Arjan 14 лет назад 0
@Arjan: Осталось всего около 5 минут, поэтому я должен был принять это ;-) Но я думаю, что это справедливо, потому что я в значительной степени понял это с вашей помощью: в Automator добавьте действие «Извлечь нечетные и четные страницы» (с «Все страницы в отдельных файлах»), затем добавьте действие «Выполнить сценарий оболочки» (с вводом Pass: «в качестве аргументов»). Это передает результирующие два * имени файла * в качестве аргументов. Выведите их с помощью `lpr $ 1` и` lpr $ 2`. Единственное, что осталось сейчас, это отобразить диалог! Поскольку окно терминала не появляется, я не могу просто использовать команду «чтение» ... Какой самый простой способ показать диалоговое окно с графическим интерфейсом? Chris Lercher 14 лет назад 0
@chris: `osascript -e 'сообщает приложению" Системные события ", чтобы отображалось предупреждение" Положите напечатанные страницы обратно в лоток для бумаги лицевой стороной вниз или чем-либо другим ". кнопки «ОК» как предупреждение'` Arjan 14 лет назад 0
И @chris, использование инструментов для многовалентных документов может позаботиться о печатных комплектах, которые имеют нечетное общее количество страниц? Или это не проблема? Arjan 14 лет назад 0
@Arjan: Да, решение все еще может быть немного подправлено тут и там :-) Нечетное общее количество страниц не является проблемой на моем струйном принтере (думаю, это будет проблемой на моем лазерном принтере). Однако с моим струйным принтером у меня проблема в том, что мне нужно напечатать вторую сторону в обратном порядке (как вы отметили выше) ... Chris Lercher 14 лет назад 0
3
Joe

На sourceforge есть проект duplexpr, который может делать то, что вы хотите.

http://sourceforge.net/projects/duplexpr/

Я написал это давным-давно и не мог заинтересовать его, поэтому я не обновил его. Если я смогу получить активную базу пользователей> 0 или кого-то, кто заинтересован в том, чтобы помочь в разработке или тестировании, я буду работать над этим снова. У меня даже есть новый код разработки, который имеет несколько дополнительных функций. Я также стараюсь сделать так, чтобы он был включен с графическим интерфейсом, чтобы его можно было использовать с рабочего стола, не переходя в командную строку.

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

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

Текущая версия (на sourceforge) имеет несколько проблем. Во-первых, они изменили Bash. Чтобы заставить работать текущие сценарии (после их загрузки), необходимо изменить первую строку каждого сценария с #! / Bin / sh на #! / Bin / bash

Другая проблема - это проблема дизайна. Принтеры различаются по способу обращения с бумагой. Некоторые выводят страницы с напечатанной стороной вверх, а некоторые - напечатанной стороной вниз и т. Д. Это означает, что должен быть более одного алгоритма дуплексной печати. duplexpr в настоящее время поддерживает только один алгоритм. Он отлично работает на принтерах, таких как HP Deskjet 720 и 895 (старые) и HP C4480 (более новые). Это почти работает на моих HP LaserJet (1006 и 1020). На них все распечатанные страницы правильные и в правильном порядке, но каждую страницу необходимо перевернуть вручную после завершения печати задания (они выходят 2/1, 4/3 ... вместо 1/2 3/4).

Проверьте это и свяжитесь со мной, если вы заинтересованы в его использовании. Вы можете отправить мне электронное письмо через страницу проекта sourceforge (URL выше).

Еще несколько мыслей:

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

Если у вас есть вывод в файле (в стандартном (по крайней мере, для Linux) формате PostScript), у вас есть несколько вариантов. Затем вы можете запустить его через duplexpr (который, кстати, решает проблему с нечетным количеством страниц, упомянутую другими авторами).

Если вы можете работать с помощью интерфейса командной строки (cli), то команда lp - или lpr, в зависимости от того, что вы установили, имеет параметры, которые вы можете указать только для нечетных страниц, даже для четных страниц, и даже при необходимости можете задать для них диапазоны страниц. Если вам это не нравится, есть замечательная небольшая графическая утилита под названием xpp, которая сделает все это и даже больше. Это даже позволит вам создать псевдоним для одного из существующих принтеров, который будет печатать только четные или нечетные страницы. Я использую его все время для устранения застревания бумаги и многократной подачи страниц во время второго прохода двусторонней печати (вторые стороны), чтобы я мог закончить печать на любых односторонних страницах, которые не были уничтожены, не начав с нуля.

С помощью любого из этих ручных методов, если у вас нечетное количество страниц, вы можете просто отправить форму на принтер, чтобы извлечь последнюю страницу:

echo -n $ '\ f' | Л.П.

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

В любом случае, это гораздо проще, чем помнить, чтобы не вставлять последнюю страницу и т. Д.

НТН

Джо

Я видел старое программное обеспечение для печати буклетов, у которого была хорошая хитрость, чтобы определить, как принтер обрабатывает страницы. Он напечатал несколько кружков и цифр на двух страницах, затем заставил вас положить страницы обратно в лоток для бумаги точно так же, как вы их взяли с вывода (без поворота, без переворачивания), а затем напечатал несколько квадратов на тех же двух страницах. Объединенный результат, который можно увидеть на верхней странице, затем сообщает программному обеспечению, как обрабатывается бумага. Следовательно, если вы когда-нибудь продолжите этот проект, то придумывание чего-то подобного может помочь найти правильную конфигурацию. :-) Arjan 14 лет назад 0
Это звучит фантастически - я проверю это на следующей неделе. Если вы продолжите проект (пожалуйста!), Я буду рад провести некоторые тесты с моими принтерами, если вы сможете дать мне инструкции, как это сделать (у меня есть лазер Kyocera Mita + струйный принтер Canon. Они работают с бумага по-разному.) В прошлом я всегда использовал такие инструменты, как TurboPrint Professional (на Amiga!) или FinePrint Professional, или драйверы принтера для Windows - где большинство на самом деле имеют это преимущество перед Mac / Linux :-( Нашей ОС нужна такая инструмент - интеграция с графическим интерфейсом была бы отличной, но давайте начнем с базовой функциональности! Chris Lercher 14 лет назад 0
@ Arjan - я добавил в пакет немного похожий файл, когда последний раз обновлял его. У меня до сих пор нет вариантов компенсации принтеров, которые делают это по-другому. Joe 12 лет назад 0
@ Крис: Извините за крайне поздний ответ. Не получил никакого уведомления, что были ответы на мой пост. Если вы все еще там, пришлите мне письмо через мой сайт duplexpr. Я обновил проект 29.10.2010. В нем меньше ошибок и еще несколько функций. Было бы здорово увидеть, как это работает с вашими принтерами. Joe 12 лет назад 0
2
LoB
Можете ли вы объяснить, что он делает и как работает? slhck 12 лет назад 0
Brilliant! Программное обеспечение добавляет панель принтера, которая проведет вас через процесс перелистывания / переворачивания напечатанных страниц и их повторной вставки в принтер. Я просто использовал это на MacOS X 10.7.5 со старым LaserJet 4M Plus, и он работал отлично. Dan Barowy 11 лет назад 0
1
quack quixote

В духе «драйвера виртуального принтера» вы можете попробовать печатать в Postscript или PDF из своего приложения. Это особенно помогло бы при печати определенного диапазона или сложной нумерации по 2 строчки.

Основная идея заключается в том, чтобы «напечатать» из приложения нужные параметры (диапазоны страниц, страницы на листе и т. Д.), Но отправить результаты в PS / PDF. Затем используйте стандартное средство печати PS / PDF вашей операционной системы для обработки фактической двусторонней печати.

Поочередно, запустите два задания печати из приложения. Установите первый для создания PS / PDF ваших страниц, обращенных вверх, а второй - для создания второго PS / PDF ваших страниц вниз. Затем двусторонняя печать уже завершена, и все, что вам нужно сделать, это распечатать первый файл, перевернуть страницы и положить их обратно в лоток принтера, а затем распечатать второй файл.

Это, конечно, не самый красивый и не самый удобный метод, но его можно реализовать, изменив рабочий процесс - никакого дополнительного программного обеспечения не требуется. (Я полагаю, что в OSX функция печати в PDF встроена; в Linux довольно просто настроить ее, если она недоступна в вашем дистрибутиве.)

Хорошо, что является стандартным средством печати ОС для обработки фактического дуплексирования? AFAIK, диалог печати всегда один и тот же (или нет? Кажется, что он никогда не имеет опции ручной двусторонней печати?) Chris Lercher 14 лет назад 0
При использовании двух заданий на печать для печати в отдельных PDF-файлах мне все равно придется дважды проходить через диалоговое окно (заново применить все мои настройки вручную.) Chris Lercher 14 лет назад 0
@chris: под "стандартным средством ОС" я имею в виду любое приложение, позволяющее печатать файлы PS / PDF; Под «обработкой фактического дуплексирования» я подразумеваю «сначала распечатать нечетные страницы, затем распечатать четные страницы» или что-то подобное. То, что я предлагаю, является своего рода поддельным программным дуплексом - думайте об этом как о рабочем процессе, чтобы сделать это вручную. это не фактическая настройка «ручной дуплекс» в любом месте. к сожалению, у меня нет Mac, поэтому я не могу дать точных советов по диалогам печати OSX. quack quixote 14 лет назад 0
Ситуация такова: я могу сделать «распечатать нечетные страницы», а затем «распечатать четные страницы» прямо из любого приложения. Но я должен закрыть промежуточное диалоговое окно, затем снова открыть его, повторно ввести диапазон страниц вручную и т. Д. Хорошо, проблема диапазона страниц будет уменьшена, если я сначала напечатаю его в PDF. Кстати, моя проблема была бы уже в значительной степени решена, если бы диалог оставался открытым :-) Chris Lercher 14 лет назад 0
@ Крис: да, но это не так. :) это смягчает проблему диапазона страниц, вот что я говорю. если вы хотите напечатать, скажем, страницы 3-50 из 400 какого-либо документа, если вы сначала напечатаете этот диапазон в PDF, затем напечатаете нечетные страницы PDF, а затем напечатаете четные PDF-документы, ... да, это не экономит * много * времени и усилий, но, по крайней мере, вам не нужно вводить диапазон несколько раз. Между прочим, я все еще надеюсь увидеть кого-то, кто разместит удобный программный инструмент, который сделает это проще. :) quack quixote 14 лет назад 0
В целом, этот ответ больше о нестандартном мышлении и изучении текущего рабочего процесса на предмет того, что можно улучшить с помощью существующих инструментов. это действительно не очень хороший ответ на ваш вопрос, но я надеюсь, что он полезен при отсутствии реальных решений. quack quixote 14 лет назад 0
Абсолютно спасибо. Я думаю о написании небольшого bash-скрипта, который использует pdftk для выбора нечетных / четных страниц из сгенерированного PDF. Затем он распечатывает нечетные страницы, делает паузу для ввода и, наконец, печатает остальную часть (недостаток: вероятно, не могу выбрать качество печати и т. Д.). Я все же предпочел бы что-то более элегантное - я ожидал бы этого от моего Mac ;-) Chris Lercher 14 лет назад 0
1
Rick Richardson

Gnome Manual Duplex - ваш друг. GUI'ified, виртуальный принтер, CUPS-совместимый ...

Спасибо - однако, я просто попробовал это, и это не сработало: он распечатал все мои страницы, затем показал диалоговое окно, чтобы красиво перевернуть бумагу, а затем снова напечатал все страницы ... проект все еще в процессе на ранней стадии, и я предполагаю, что эта проблема будет решена. Спасибо за ссылку! (+1) Chris Lercher 13 лет назад 0
1
borosdenes

Based on the comments here, and on other forums, I've made some kind of a merged solution, merging the functions of Automator and Shell Scripts. As I've seen, such solution have not yet been posted, so this might come handy.

The only package you have to get is pdftk server, which can be downloaded from pdftk's official website. By installing pdftk server you only install a single package that gives you the ability to edit PDF files with shell scripts. Let me quote some text from the official website, about pdftk server:

After installation, open a Terminal, type pdftk and press Return. Pdftk will respond by displaying brief usage information. Access pdftk documenation by running man pdftk.

This installer creates a directory on you Mac: /opt/pdflabs/pdftk/. This will contain a bin directory which holds the pdftk program and a docs directory which holds the complete PDFtk manual.

With pdftk, we will be able to extract the odd & even pages of a pdf (which is very fast, compared to Automator's built in extractor), reorder and rotate pages. Reordering and rotating comes handy based on the printer you are using: you don't have to reorder the pages manually between printing odd and even pages. FYI: In my example, I've used a Samsung ML-2165W printer (in case you want to understand the flow of a paper within the printer).

The base comes from Arjan's top answer:

  • Open Automator
  • Select "Print Plugin" (As Arjan wrote before: "... print plugins accept PDF versions of the document being printed ..." which means that the first item's (you drag to the workflow) input will be that PDF)
  • Drag the following items:

    1. Set Value of Variable. From the dropdown menu select Path.
    2. Run Shell Script: this is the part, where we're implementing pdftk.

      source ~/.bash_profile while read -r p; do pdftk A="$p" cat Aodd output /tmp/odd.pdf done lpr /tmp/odd.pdf 

      Explanation: sourcing the .bash_profile is necessary, because elsehow pdftk command won't be accessable. The while cycle is wrote based on pdftk's man page: all you have to know is that it extracts the odd pages of the input pdf into odd.pdf, which will be put in /tmp. After odd.pdf is generated, we will print it with default settings, using lpr shell command.

    3. Ask for confirmation: Put in some instruction text. IMPORTANT: when using this workflow, you have to wait until the printing process of the odd pages are completed, then put the pages back into the input tray, and THEN you can press ok. Elsehow, the upcoming shell script (which also includes printing obviously) will be executed before you can put the papers back.

    4. Get Value of Variable. Set Variable to Path. This is the tricky part: from options dropdown menu, select Ignore this actions's input. This give you back the original PDF's path, so you won't extract the just extracted odd pages further (which was a problem within comments above).

    5. Run Shell Script: printing the even pages (in backwards order, as well as in rotated orientation).

      source ~/.bash_profile while read -r p; do pdftk A="$p" cat Aeven output /tmp/even.pdf pdftk /tmp/even.pdf cat end-1 output /tmp/even_backwards.pdf lpr -o orientation-requested=6 /tmp/even_backwards.pdf done 

      Explanation: After extracting the even pages from the source PDF file, using the end-1 parameter with pdftk gives us a backward PDF. The rotating will be made using lpr command's parameters (I've tried to rotate it with pdftk, which went smoothly, but somewhy using lpr command with initial parameters rotated that pdf back, I guess because of the printer's settings). -o orientation-requested=6 gives us a 180 degree rotation (for more, see man lpr).

This screenshot summarizes the whole workflow.

enter image description here

0
Jim Van Zandt

Сначала откройте принтер и найдите значок, который указывает, как загружать фирменные бланки. Если он загружен лицевой стороной вверх, используйте этот скрипт:

#!/bin/sh  if [ "$1" = "--help" ]; then echo ' twosidedu - print a PDF document two-sided, using a single-sided printer  that needs letterhead paper loaded face up.  USAGE: twosidedu foo.pdf  The even numbered pages will be printed in reverse order. When prompted, re-insert the pages with printed side down and the top edge according to the icon, and type <enter>. Then, the odd-numbered pages will be printed in normal order.' exit 0 fi  pdftk "$1" cat end-1even output - | lp read -p "please re-insert the pages into the printer then hit <enter>" junk pdftk "$1" cat 1-endodd output - | lp  

В противном случае используйте этот скрипт:

#!/bin/sh  if [ "$1" = "--help" ]; then echo ' twosidedd - print a PDF document two-sided, using a single-sided printer that needs letterhead paper loaded face down.  USAGE: twosidedd foo.pdf  The even numbered pages will be printed in normal order. When prompted, re-insert the pages with printed side up and the top edge according to the icon, and type <enter>. Then, the odd-numbered pages will be printed in normal order.' exit 0 fi  pdftk "$1" cat 1-endeven output - | lp read -p "please re-insert the pages into the printer then hit <enter>" junk pdftk "$1" cat 1-endodd output - | lp  
-1
fkenna

Программное обеспечение HP для двусторонней печати. Я просто использовал его, он работает легко и отлично. Конечно, вам нужен принтер HP, который у меня есть.