ananas 10.11.2012 13:25

Tips & tricksфильтры для cups

обновил cups на свою голову. с удивлением обнаружил, что apple-овские мерзавцы и подонки удалили все фильтры, кроме pstops. дескать, нам это не надо, значит не надо и никому. а мерзкий gtk, единственный, на мой взгляд, достойный графический тулкит, использует для печати pdf бэкенд. такое вот внутреннее противоречие

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

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

потому, после получасового чтения док, родились следующие скриптики


pdftops
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#! /bin/bash

if [[ $# -eq 5 ]]; then
tempfile=$(mktemp --tmpdir pdftops-XXXXXXX.pdf)
dd of=$tempfile
need_cleanup=1
else
tempfile="$6"
need_cleanup=0
fi

if [[ -x /usr/bin/pdftops ]]; then
/usr/bin/pdftops -origpagesizes $tempfile -
elif [[ -x /usr/bin/gs ]]; then
/usr/bin/gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=ps2write -sOUTPUTFILE=%stdout $tempfile
fi

[[ $need_cleanup -eq 1 ]] && rm -f $tempfile


djvutops
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! /bin/bash

if [[ $# -eq 5 ]]; then
tempfile=$(mktemp --tmpdir djvutops-XXXXXXX.pdf)
dd of=$tempfile
need_cleanup=1
else
tempfile="$6"
need_cleanup=0
fi

if [[ -x /usr/bin/djvups ]]; then
/usr/bin/djvups $tempfile -
fi

[[ $need_cleanup -eq 1 ]] && rm -f $tempfile


imagetops
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /bin/bash

# create temp file
if [[ $# -eq 5 ]]; then
tempfile=$(mktemp --tmpdir pdftops-XXXXXXX)
dd of=$tempfile
need_cleanup=1
else
tempfile="$6"
need_cleanup=0
fi

if [[ -x /usr/bin/gm ]]; then
/usr/bin/gm convert $tempfile -format PS -
fi

[[ $need_cleanup -eq 1 ]] && rm -f $tempfile


texttops
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#! /bin/bash

# create temp file
if [[ $# -eq 5 ]]; then
tempfile=$(mktemp --tmpdir texttops-XXXXXXX.txt)
dd of=$tempfile
need_cleanup=1
else
tempfile="$6"
need_cleanup=0
fi

# check for landscape
for opt in $5; do
case $opt in
landscape|orientation-requested=4)
OPTIONS="--landscape"
;;
esac
done

if [[ -x /usr/bin/paps ]]; then
eval /usr/bin/paps --header $OPTIONS $tempfile
fi

[[ $need_cleanup -eq 1 ]] && rm -f $tempfile



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

чтобы все это работало, скрипты размещаются в /usr/lib/cups/filter, а в /etc/cups создается файл extra.convs (имя не важно, главное - расширение) для привязок фильтров к определенным типам mime

extra.convs
1
2
3
4
5
6
# custom filters for CUPS

application/pdf application/postscript 33 pdftops
image/vnd.djvu application/postscript 33 djvutops
image/* application/postscript 33 imagetops
text/* application/postscript 33 texttops



все, печать работает без всякого лишнего барахла


Тэги: bash cups
+ 6 -
Похожие Поделиться

mealsforall 11.11.2012 19:16 #
пакет cups-filters поддерживается командой OpenPrinting (той же, что клепает foomatic), и вполне беспроблемно компилируется. Я буквально недавно собирал версию 1.0.24 под Ubuntu 10.04. Под Debian и под 12.04 прям есть готовые пакеты.

А GTK специально печатает pdf, потому что нынче модно печатать pdf напрямую, без конвертации в PostScript. Пакет cups-filters как раз содержит множество таких фильтров. gs и poppler жрут очень много ресурсов при этой конвертации.

Если ваши принтеры понимают direct PDF, советую попробовать. :)

ananas 11.11.2012 21:56 #
foomatic мне тоже не нравится. и после 1.0.20 эти фильтры требуют отдельной libqpdf, нафига - непонятно. а учитывая тот факт, что их pdftops точно так-же дергает poppler или ghostscript и потом родной cups-овый pstops, совершенно не понимаю, нафига мне это барахло.

но опять таки повторю, мое решение для маргиналов, сидящих на lfs или подобном
mealsforall 12.11.2012 02:38 #
ну опять-таки, libqpdf -- для работы с чистым pdf, без postscript. pdftops -- вчерашний день :)
ananas 12.11.2012 13:00 #
в принципе, мне совершенно все равно, какой формат будет в конце, ps или pdf. но ps уже есть, а pdf еще прикручивать надо. это и лишний софт, и лишние телодвижения.
dront78 12.11.2012 08:36 #
> но опять таки повторю, мое решение для маргиналов, сидящих на lfs или подобном

тогда ubuntuшники - золотая молодежь :D