Программирование фильтра / бэкэнда для "печати в PDF" с помощью CUPS из любого приложения Mac OS X
хорошо, вот что я хочу сделать. Я хочу добавить опцию печати, которая печатает любой документ пользователя в PDF и добавляет некоторые заголовки перед отправкой его на устройство.
Я думаю, мои вопросы: Как добавить виртуальный драйвер "принтера" для пользователя, который запустит приложение, которое я разрабатывал, которое сделает PDF (или сделает PDF и запустит мое приложение со ссылками на недавно созданный PDF)? Как мне взаимодействовать с CUPS для создания Формат PDF? Я не уверен, что я ясно, поэтому дайте мне знать, если дополнительная информация будет полезной.
Я проработал эта печать с учебником чашки и, похоже, все настроено нормально, но файл никогда не появляется в соответствующем временном месте. И если кто-то ищет пользовательский PDF-принтер, это чашки-pdf-для-mac-os-x это тот, который работает через установщик, однако у меня та же проблема, что и без файла, появляющегося в указанном каталог, когда я загружаю источник и следую инструкциям в readme. Если кто-нибудь может заставить любой из них работать на mac через терминал, пожалуйста, дайте мне знать шаг за шагом, как вы это сделали.
2 ответов
путь такой:
настройте очередь печати с любым драйвером, который вам нравится. Но я рекомендую использовать драйвер PostScript / PPD. (Постскриптум PPD-это тот, который не содержит
*cupsFilter: ...
линии.):первоначально используйте (образовательный) бэкэнд CUPS с именем
2dir
. Что можно скопировать с этого сайта: KDE Printing Developer Tools Wiki. убедитесь, что при копировании вы получаете окончания строк справа (Unix-like).-
Командная строка для настройки начальной очереди:
lpadmin \ -p pdfqueue \ -v 2dir:/tmp/pdfqueue \ -E \ -P /path/to/postscript-printer.ppd
на2dir
бэкэнд теперь будет записывать все выходные данные в каталог/tmp/pdfqueue/
и он будет использовать имя uniq для каждого задания. Каждый результат должен пока будь файлом PostScript. (без каких-либо изменений, которые вы хотите еще). найдите PPD, используемый этой очередью в
/etc/cups/ppd/
(его имя должно бытьpdfqueue.ppd
).-
добавить следующую строку (лучше всего, в верхней части PPD):
*cupsFilter: "application/pdf 0 -"
(убедитесь, что*cupsFilter
начинается в самом начале строки.) Эта строка говоритcupsd
для автоматической настройки цепочки фильтрации, которая создает PDF, а затем вызывает последний фильтр с именем'-'
перед отправкой файла через бэкэнд на принтере. Это'-'
фильтр особенный: он ничего не делает, это passthrough фильтр. -
повторно запустите планировщик CUPS:
sudo launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist sudo launchctl load /System/Library/LaunchDaemons/org.cups.cupsd.plist
отныне ваш
pdfqueue
приведет к тому, что каждое задание, напечатанное на нем, закончится как PDF на/tmp/pdfqueue/*.pdf
.исследование
2dir
скрипт бэкенд. Это просто Bash, и достаточно хорошо прокомментировано.изменить
2dir
таким образом, что добавляет желаемые изменения в PDF перед сохранением на в результате/tmp/pdfqueue/*.pdf
...
обновление: похоже, я забыл 2 цитаты в моем изначально прописал *cupsFilter: ...
выше линии. Прости!
я действительно хотел бы принять два ответа, потому что я не думаю, что я мог бы сделать это без всей помощи @Kurt Pfeifle для специфики Mac и просто понимания драйверов принтера и местоположения файлов. Но вот что я сделал:--15-->
загрузите исходный код из codepoet cups-pdf-for-mac-os-x. (Для не-macs, вы можете посмотреть наhttp://www.cups-pdf.de/) readme очень подробно, и если Вы читаете все инструкции тщательно, это будет работать, однако у меня были небольшие проблемы с получением всех частей, поэтому я расскажу точно, что я сделал в надежде спасти кого-то еще от некоторых проблем. Для этого каталог с исходным кодом называется "cups-pdfdownloaddir".
-
Compile cups-pdf.c содержится в папке src, как указывает readme:
gcc -09 -s -lcups -o cups-pdf cups-pdf.c
может быть предупреждение:
ld: warning: option -s is obsolete and being ignored
, но это не представляло для меня проблемы. Копировать двоичный файл в /usr/libexec/cups / backend. Вероятно, вам придетсяsudo
команда, которая предложит вам ввести пароль. Например:sudo cp /cups-pdfdownloaddir/src/cups-pdf /usr/libexec/cups/backend
кроме того, не забудьте изменить разрешения на этот файл-ему нужны права root (700), которые могут быть изменены следующим образом после перемещения cupd-pdf в бэкэнд-каталог:
sudo chmod 700 /usr/libexec/cups/backend/cups-pdf
-
изменить файл, содержащийся в / cups-pdfdownloaddir / extra / чашки-pdf.conf. В заголовке "параметры преобразования PDF" найдите строку под GhostScript, которая читает
#GhostScript /usr/bin/gs
. Я не раскомментировал его на случай, если он мне понадобится, а просто добавил под ним строкуGhostscript /usr/bin/pstopdf
. (Не должно быть предварительного курсора # для любой из этих модификаций)найдите строку под GSCall, которая гласит
#GSCall %s -q -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile="%s" -dAutoRotatePage\ s=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite \ -f %s
опять же, не отменяя этого, под этим я добавил строкуGSCall %s %s -o %s %s
найдите строку под PDFVer, которая гласит
#PDFVer 1.4
и меняем его наPDFVer
, без пробелов и следующих символов.теперь сохраните и закройте редактирование перед копированием этого файла в /etc / cups со следующей командой
sudo cp cups-pdfdownloaddir/extra/cups-pdf.conf /etc/cups
будьте осторожны с редактированием в текстовом редакторе, потому что новые строки в средах UNIX и Mac отличаются и могут потенциально разрушить сценарии. Вы всегда можете использовать команду perl для их удаления, но я параноик и предпочитаю не заниматься этим в первом место.
теперь вы сможете открыть программу (например, Word, Excel,...) и выберите Файл > > печать и найдите доступный принтер под названием CUPS-PDF. Печать на этом принтере, и вы должны найти свои PDF-файлы в /var/spool/cups-pdf/ yourusername / по умолчанию.
*кроме того, я подумал, что это может быть полезно, потому что это помогло мне: если что-то напортачил в следующих направлениях, и вы должны начать все сначала/избавиться из этого, чтобы удалить драйвер, вам нужно (1) удалить сервер cups-pdf из /usr/libexec/cups/backend
(2) Удалите cups-pdf.conf с /etc/cups/
(3) перейдите в Системные настройки >> печать и факс и удалите принтер CUPS-PDF.
вот как я успешно настроил бэкэнд/фильтр pdf для себя, однако есть более подробная информация и другая информация о настройке, содержащаяся в файле readme. Надеюсь, это поможет кому-то еще!