о печати (компьютерное)
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/
no subject
Date: 2014-12-09 10:08 am (UTC)no subject
Date: 2014-12-09 10:12 am (UTC)Но вообще мне это решение не очень нравится. Эти рамки надо где-то нарисовать (где?), подогнать по размеру, плюс при обычной печати с двух сторон логические страницы могут быть немного сдвинуты друг относительно друга на четных и нечетных физических страницах (чтобы кромки совпадали), значит, придется рамки в двух вариантах рисовать...
no subject
Date: 2014-12-09 10:23 am (UTC)Понимаю, что с математической точки зрения - это "некрасивое" решение, ибо вместо точного совпадения и управляемого процесса получаем вероятностный (возможно смещение на некоторых страницах будет настолько велико, что придется их перепечатать). Плюс оно недостаточно универсально (для каждой новой книги придется рисовать новые рамки).
Видимо дело в том, что я недавно прочитал изумительную книгу Файнмана и теперь с интересом смотрю на физически-инженерные решения :)
no subject
Date: 2014-12-09 10:24 am (UTC)no subject
Date: 2014-12-09 10:24 am (UTC)no subject
Date: 2014-12-09 10:35 am (UTC)newpath 0 0 moveto 540 0 rlineto 0 720 rlineto -540 0 rlineto stroke
no subject
Date: 2014-12-09 10:38 am (UTC)no subject
Date: 2014-12-10 06:01 am (UTC)no subject
Date: 2014-12-09 10:42 am (UTC)no subject
Date: 2014-12-09 08:16 pm (UTC)no subject
Date: 2014-12-09 10:47 am (UTC)Кстати, а разве convert не ghostscript дёргает?
no subject
Date: 2014-12-09 11:00 am (UTC)convert дергает ghostscript, да, что само по себе плохо; но кроме того уже к полученным от ghostscript картинкам она применяет масштабирование по каким-то своим диким понятиям, на которые теоретически можно повлиять правильными опциями -depth и -geometry в правильных местах, но на практике у меня постоянно получалось какое-то дерьмо.
no subject
Date: 2014-12-09 11:06 am (UTC)no subject
Date: 2014-12-09 11:17 am (UTC)no subject
Date: 2014-12-09 11:53 am (UTC)no subject
Date: 2014-12-09 01:33 pm (UTC)no subject
Date: 2014-12-09 01:48 pm (UTC)no subject
Date: 2014-12-09 11:18 am (UTC)В OSX и в Windows всё уже есть из коробки, программы не нужны.
no subject
Date: 2014-12-09 12:13 pm (UTC)no subject
Date: 2014-12-09 12:21 pm (UTC)Соответственно да, я про умение рисовать рамочку.
no subject
Date: 2014-12-09 12:27 pm (UTC)no subject
Date: 2014-12-10 07:35 am (UTC)no subject
Date: 2014-12-09 12:28 pm (UTC)Border: Single Hairline
no subject
Date: 2014-12-10 08:58 am (UTC)no subject
Date: 2014-12-09 12:21 pm (UTC)no subject
Date: 2014-12-09 12:24 pm (UTC)Вы вообще читали оригинальный пост, или так, чисто в комментах честь линукса отстаивать пришли?
no subject
Date: 2014-12-11 11:47 pm (UTC)И принтеру пофиг, что было исходником.
Просмотрщика дежавю в коробке нет, но установка стороннего - не более сложная операция, чем линуксовые рукоблудия с пост-скрипт.
**************
Думаю, что и в линуксе рамочки можно напечатать без трюкачества.
no subject
Date: 2014-12-09 11:29 am (UTC)no subject
Date: 2014-12-09 01:28 pm (UTC)no subject
Date: 2014-12-09 01:34 pm (UTC)no subject
Date: 2014-12-09 02:29 pm (UTC)Вот часть скрипта
pdfjam "$@" --a4paper --landscape --nup 4x1 --scale 1.0 --trim '1.5cm 4cm 12cm 0.5cm' --clip true \
--outfile cheques.pdf
Так что pdfjam сильная весчь. Да, и рамки она тоже рисует с --frame true опцией.
no subject
Date: 2014-12-09 07:35 pm (UTC)странно.
как-то сравнил экспорт в pdf из inkscape с печатью на виртуальный pdf-принтер. файлы побайтово совпали, был удивлён.
no subject
Date: 2014-12-09 08:21 pm (UTC)А диалог - тупой, он просто пишет то что можно и текстом в lpoptions увидеть.
no subject
Date: 2014-12-10 09:00 am (UTC)no subject
Date: 2014-12-10 12:20 pm (UTC)no subject
Date: 2014-12-10 12:48 pm (UTC)boomaga!
Date: 2014-12-13 05:53 pm (UTC)