о печати (компьютерное)
Dec. 9th, 2014 11:55 amКаждый раз, когда мне надо распечатать что-то не совершенно стандартным путем, я начинаю в итоге лезть на стенку от того, как тяжело найти простой способ это сделать. 2014-й год. У нас есть принтеры, понимающие потрясающе мощный язык (Postscript), способный сделать на странице все, что только захочется. Почему же это так тяжело?
Мне нужно было распечатать книгу в формате DJVU, у которой страницы были совсем маленького размера. Я хотел сделать n-up printing, т.е. больше одной логической страницы на одной физической, в данном случае даже 4 на 1. Стандартный диалог печати на Линуксе (Убунту, если быть точнее) это легко позволяет, но нигде нет опции нарисовать рамки вокруг логических страниц. А без этих рамок выглядело плохо.
Сколько я времени убил, пытаясь найти способ это нормально распечатать с этими гребаными рамками, мне стыдно даже сказать.
На случай, если другим пригодится мой опыт, вот основные заключения. Я не даю ссылки, все легко находится. В принципе почти все эти программы можно найти/запустить и под OSX, и под Windows при желании.
Update: Опция печати с рамкой была доступна мне в стандартной программе lp(1), опция -o page-border. См. подробную документацию в CUPS manual. К сожалению, эта опция не документирована в "man lp", и ее нет в стандартном диалоге печати GTK+. Если бы одного из этих двух упущений не было, мне не пришлось бы потратить столько времени на поиски других решений.
Update: mpage на данный момент, 2018, нет больше в стандартном Дебиан, исходники тут: http://www.mesa.nl/pub/mpage/
Мне нужно было распечатать книгу в формате DJVU, у которой страницы были совсем маленького размера. Я хотел сделать n-up printing, т.е. больше одной логической страницы на одной физической, в данном случае даже 4 на 1. Стандартный диалог печати на Линуксе (Убунту, если быть точнее) это легко позволяет, но нигде нет опции нарисовать рамки вокруг логических страниц. А без этих рамок выглядело плохо.
Сколько я времени убил, пытаясь найти способ это нормально распечатать с этими гребаными рамками, мне стыдно даже сказать.
На случай, если другим пригодится мой опыт, вот основные заключения. Я не даю ссылки, все легко находится. В принципе почти все эти программы можно найти/запустить и под OSX, и под Windows при желании.
- Системный диалог печати, насколько я могу судить, ничего не умеет делать сам; это фронт-энд к опциям командной строки lp(1). Стандартная lp(1) из CUPS умеет делать n-up printing, duplex итд., но не умеет рисовать рамку, отсюда и проблема. (можно ли ее научить?)
- На этой странице есть много хороших советов, некоторые из которых мне помогли.
- Перевод DJVU->PDF: пользуйтесь ddjvu, например "ddjvu --format=pdf input.djvu output.pdf".
Не пользуйтесь: разнообразными "виртуальными PDF-принтерами", они дают PDF намного больше и хуже качеством. - Перевод DJVU->PS: есть хорошая утилита djvups. К сожалению, она не сохраняет размер маленьких страниц, а увеличивает все до A4 (откуда она узнала, что именно A4, я не знаю, может, прочитала /etc/papersize). Опция "масштабируй до 100%", --zoom=100, не помогает, т.к. на выходе получаются страницы размером A4, а внутри них по центру маленькие странички оригинала. В итоге получилось, что я масштабировал исходные страницы два раза, а не один: один раз до A4, второй раз для N-Up. Но вышло хорошо.
- Перевод PDF->PS: есть хорошая утилита pdftops (кроме --paper A4, ей ничего не нужно).
Не пользуйтесь: похожей по названию pdf2ps: она вызывает Ghostscript, который часто портит качество и вообще создает PS больше и хуже и глючнее. pdftops построена на движке xpdf. - На будущее, если у меня есть PDF, я буду пользоваться pdftops, если DJVU, то djvups напрямую дает результат чуть лучше и удобнее (меньше кромки, например), чем DJVU->PDF->PS, но серьезной разницы нет, и ddjvu+pdftops тоже хорошо работает.
Не пользуйтесь: прямой печатью в файл PS из просмотрщика DJVU через системный диалог: выходит огромный файл, с которым не все утилиты хорошо работают. - N-Up Printing: лучшая программа несомненно mpage(1). Она умеет все: рисовать рамки (-B), указывать разные виды дуплекса (-t, -T), устанавливать кромки на физической странице (-m) и даже отрицательные кромки на логической странице (-M) что дает удобный способ удалить пустое пространство и увеличить шрифт, когда речь идет об отсканированной книге. Если правильно задать все опции (которых, правда, много и стоит внимательно почитать), то она из PS делает PS, который затем можно прямо послать на печать с помощью lp(1) и больше ни о чем не заботиться.
Не пользуйтесь: pdfnup(1) (ужасно глючный конвертер, пользуется pdflatex, очень трудно настроить на что-то нестандартное, я так и не смог нормально позиционировать маленькие логические страницы). nup(1) - эта утилита работает PS->PS, но мало что умеет и создает глючные PS файлы, которые принтер съедает и игнорирует. - Последний совет: если вам нужно как-то обработать PDF, составленный из одних картинок (напр., отсканированная книга) и вы хотите превратить его в набор картинок, пользуйтесь pdfimages (вы почти всегда захотите включить опцию -j). Если вам нужно взять отдельные страницы, перевернуть, разобрать/собрать, но оставаться все время в формате PDF, пользуйтесь pdftk - очень удобная утилита.
Не пользуйтесь: ImageMagick (т.е. convert(1)), потому что его трудно заставить не сделать ужасные вещи с качеством картинки из-за глючной модели и анти-интуитивных опций DPI и разрешения. ImageMagick хорош для некоторых вещей, но не для работы с PDF.
Update: Опция печати с рамкой была доступна мне в стандартной программе lp(1), опция -o page-border. См. подробную документацию в CUPS manual. К сожалению, эта опция не документирована в "man lp", и ее нет в стандартном диалоге печати GTK+. Если бы одного из этих двух упущений не было, мне не пришлось бы потратить столько времени на поиски других решений.
Update: mpage на данный момент, 2018, нет больше в стандартном Дебиан, исходники тут: http://www.mesa.nl/pub/mpage/