?

Log in

No account? Create an account
о печати (компьютерное) - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

о печати (компьютерное) [дек. 9, 2014|11:55 am]
Anatoly Vorobey
[Tags|]

Каждый раз, когда мне надо распечатать что-то не совершенно стандартным путем, я начинаю в итоге лезть на стенку от того, как тяжело найти простой способ это сделать. 2014-й год. У нас есть принтеры, понимающие потрясающе мощный язык (Postscript), способный сделать на странице все, что только захочется. Почему же это так тяжело?

Мне нужно было распечатать книгу в формате 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+. Если бы одного из этих двух упущений не было, мне не пришлось бы потратить столько времени на поиски других решений.
СсылкаОтветить

Comments:
[User Picture]From: vorobiev
2014-12-09 10:08 am
Интересно, а идея заранее распечатать рамки под стандартные размеры страниц почему не прошла?
(Ответить) (Thread)
[User Picture]From: avva
2014-12-09 10:12 am
Честно говоря, мне это даже в голову не пришло. Поскольку я знаю в общих чертах устройство PDF/DJVU/PS/печати, я понимал, что технологически это *просто*, распечатать с рамками, и все никак не мог поверить, что очередная утилита опять окажется глючной или не сумеет это сделать. Поэтому убил кучу времени.

Но вообще мне это решение не очень нравится. Эти рамки надо где-то нарисовать (где?), подогнать по размеру, плюс при обычной печати с двух сторон логические страницы могут быть немного сдвинуты друг относительно друга на четных и нечетных физических страницах (чтобы кромки совпадали), значит, придется рамки в двух вариантах рисовать...
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: vadim_i_z
2014-12-09 10:24 am
Печать нескольких страниц на одном листе с рамками прекрасно делает FinePrint. Не знаю, правда, есть ли его версия под Линукс.
(Ответить) (Thread)
[User Picture]From: kosovsky_family
2014-12-09 10:24 am
Я тоже сталкивался с этой проблемой. Причем на виндовых машинах я ВСЕГДА встречал опцию добавления рамки. Меня это огорчило, но я ничего не сделал с этим.
(Ответить) (Thread)
[User Picture]From: eisenberg
2014-12-09 10:35 am
Если Вы добрались до PS (как и зачем - не столь важно), то в нём можно тупо нарисовать рамки руками. Язык же. Что-то типа
newpath 0 0 moveto 540 0 rlineto 0 720 rlineto -540 0 rlineto stroke
(Ответить) (Thread)
[User Picture]From: avva
2014-12-09 10:38 am
Ну да, я почти до этого дошел. Просто ж пришлось бы вычислять правильные координаты, вставлять это автоматически на каждую страницу итд. Если б я не нашел mpage(1), в конце концов может так бы и сделал. Был бы еще более разъярен тогда.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: migmit
2014-12-09 10:47 am
Я обычно пользую для таких вещей pstops. Рамки она умеет. Но, правда, из-под линуха я печатать не пробовал никогда.

Кстати, а разве convert не ghostscript дёргает?

Edited at 2014-12-09 10:50 (UTC)
(Ответить) (Thread)
[User Picture]From: avva
2014-12-09 11:00 am
Про pstops я забыл и не пробовал, в другой раз посмотрю, спасибо.

convert дергает ghostscript, да, что само по себе плохо; но кроме того уже к полученным от ghostscript картинкам она применяет масштабирование по каким-то своим диким понятиям, на которые теоретически можно повлиять правильными опциями -depth и -geometry в правильных местах, но на практике у меня постоянно получалось какое-то дерьмо.
(Ответить) (Parent) (Thread)
[User Picture]From: _pg_
2014-12-09 11:06 am
Прошу прощения, а что означает выражение (1), обильно встречающееся в этом тексте?
(Ответить) (Thread)
[User Picture]From: avva
2014-12-09 11:17 am
В юниксе есть старая традиция писать после названия какой-то системной утилиты, библиотеки, документа в скобках номер раздела документации (т.н. man pages), которому она соответствует. 1 это "просто программы" и разного рода полезные утилиты, 5 - конфигурационные файлы системы, 7 - административные утилиты итд. Если я пишу mpage(1), это говорит привыкшему к такой традиции читателю: это какая-то полезная программа, которая запускается с таким именем в командной строке.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: grundik
2014-12-09 11:18 am
> В принципе почти все эти программы можно найти/запустить и под OSX, и под Windows при желании.

В OSX и в Windows всё уже есть из коробки, программы не нужны.
(Ответить) (Thread)
[User Picture]From: winpooh
2014-12-09 12:08 pm
Windows "искаропки" умеет открывать дежавю?
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: tobotras
2014-12-09 11:29 am
psutils — наше всё, и даже больше, чем всё!
(Ответить) (Thread)
[User Picture]From: ulrith
2014-12-09 01:28 pm
Не упомянут pdftk, а он хороший.
(Ответить) (Thread)
[User Picture]From: avva
2014-12-09 01:34 pm
Да, вы правы. Хоть он мне тут совсем и не понадобился. Хороший, сейчас добавлю хоть строчку в конце.
(Ответить) (Parent) (Thread)
From: djkmomega
2014-12-09 02:29 pm
Я вот плачу за квартиру в инете и дабы чеки печатные сохранить, печатаю их в pdf файлы, а потом эту кучку компаную в одну страницу.
Вот часть скрипта
pdfjam "$@" --a4paper --landscape --nup 4x1 --scale 1.0 --trim '1.5cm 4cm 12cm 0.5cm' --clip true \
--outfile cheques.pdf

Так что pdfjam сильная весчь. Да, и рамки она тоже рисует с --frame true опцией.

Edited at 2014-12-09 14:31 (UTC)
(Ответить) (Thread)
From: edo_rus
2014-12-09 07:35 pm
Не пользуйтесь: разнообразными "виртуальными PDF-принтерами", они дают PDF намного больше и хуже качеством.

странно.
как-то сравнил экспорт в pdf из inkscape с печатью на виртуальный pdf-принтер. файлы побайтово совпали, был удивлён.
(Ответить) (Thread)
[User Picture]From: max630
2014-12-09 08:21 pm
Мне кажется, всё от драйвера принтера зависит. Я точно помню, что у меня был где-то принтер который умел рамки делать. Хоть одиночные, хоть двойные. Вот где это было - не помню, но помню много распечатывал.

А диалог - тупой, он просто пишет то что можно и текстом в lpoptions увидеть.
(Ответить) (Thread)
[User Picture]From: avva
2014-12-10 09:00 am
Я этого не понимал раньше (что диалог тупой). А опция печати с рамкой, оказывается, есть в стандартном lp, см. апдейт - только ни man lp, ни lpoptions ее не показывают.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: Евгений Кузнецов
2014-12-13 05:53 pm

boomaga!

А в boomaga нет ли нужной опции? https://github.com/Boomaga
(Ответить) (Thread)