Программирование фильтра / бэкэнда для "печати в 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. Надеюсь, это поможет кому-то еще!