?

Log in

о печати (компьютерное) - Поклонник деепричастий [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: vorobiev
2014-12-09 10:23 am
Как вариант, можно было бы сделать одну пробную страницу с двусторонней печатью. Потом посмотреть положение рамок и в обычном Word сделать рамку с таблицей в виде двустороннего документа. Потом распечатать рамки и проверить совпадение.

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

Видимо дело в том, что я недавно прочитал изумительную книгу Файнмана и теперь с интересом смотрю на физически-инженерные решения :)
(Ответить) (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: agathpher
2014-12-10 06:01 am
"If you wish to make an apple pie from scratch, you must first invent the universe." (c) C. Sagan ;)
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2014-12-09 10:42 am
А, кстати нет, не так просто: я не смог найти простой способ распечатать в файл PS в формате n-up, по крайней мере диалог не позволяет. n-up без рамок он дает послать только прямо на принтер.
(Ответить) (Parent) (Thread)
[User Picture]From: f137
2014-12-09 08:16 pm
А psnup не годится?
(Ответить) (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: _pg_
2014-12-09 11:53 am
Ага, я так примерно и подумал, но про магию чисел 1, 5 и 7 не знал. :)
(Ответить) (Parent) (Thread)
[User Picture]From: tejblum
2014-12-09 01:33 pm
Административные утилиты -- это всё-таки 8, а не 7.
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2014-12-09 01:48 pm
Спасибо :)
(Ответить) (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: grundik
2014-12-09 12:13 pm
Речь про печать вообще-то.
(Ответить) (Parent) (Thread)
[User Picture]From: winpooh
2014-12-09 12:17 pm
Тогда я не понял, что Вы имели в виду под "всё это есть". Что именно "это"? Умение рамочку рисовать?
(Ответить) (Parent) (Thread)
[User Picture]From: grundik
2014-12-09 12:21 pm
Автор этого журнала пишет, что у него возникли проблемы с рамочкой и для решения этих проблем он юзает какой-то софт, который можно использовать и под виндой и под маком.

Соответственно да, я про умение рисовать рамочку.
(Ответить) (Parent) (Thread)
[User Picture]From: winpooh
2014-12-09 12:25 pm
Век живи под Виндой, век учись :) Не знал, однако!
Вообще, часто обнаруживаю у Винды какие-то полезности, о которых долгое время не подозревал. Например, недавно обнаружил, что 7-ка умеет монтировать iso-шки без необходимости во всяких Daemon Tools или Alcohol 120%...
(Ответить) (Parent) (Thread)
[User Picture]From: grundik
2014-12-09 12:27 pm
Она теоретически и писать умеет их :)
(Ответить) (Parent) (Thread)
[User Picture]From: plogenius
2014-12-10 07:35 am
КАК??!?!?!?
(Ответить) (Parent) (Thread)
[User Picture]From: winpooh
2014-12-10 07:41 am
Может быть, я и наврал :)
(Ответить) (Parent) (Thread)
[User Picture]From: squadette
2014-12-09 12:28 pm
да. Pages Per Sheet: 4
Border: Single Hairline
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2014-12-10 08:58 am
В Линуксе, оказывается, тоже, см. апдейт.
(Ответить) (Parent) (Thread)
[User Picture]From: gegmopo4
2014-12-09 12:21 pm
Windows "искаропки" умеет печатать дежавю?
(Ответить) (Parent) (Thread)
[User Picture]From: grundik
2014-12-09 12:24 pm
Винда из коробки умеет печатать рамочки. Речь в посте идёт о рамочках, да. И на печать отправляется PDF или PS.

Вы вообще читали оригинальный пост, или так, чисто в комментах честь линукса отстаивать пришли?
(Ответить) (Parent) (Thread)
From: ald1976
2014-12-11 11:47 pm
Рамочки умеют печатать почти все принтеры, предоставляя соотв. опцию, которую реализует стандартный диалог печати виндоус.

И принтеру пофиг, что было исходником.

Просмотрщика дежавю в коробке нет, но установка стороннего - не более сложная операция, чем линуксовые рукоблудия с пост-скрипт.

**************

Думаю, что и в линуксе рамочки можно напечатать без трюкачества.

(Ответить) (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: gegmopo4
2014-12-10 12:20 pm
Как нашли?
(Ответить) (Parent) (Thread)
[User Picture]From: avva
2014-12-10 12:48 pm
Я решил посмотреть, почему в CUPS ее нет, и не стоит ли добавить, и обнаружил, что она есть.
(Ответить) (Parent) (Thread)
[User Picture]From: Евгений Кузнецов
2014-12-13 05:53 pm

boomaga!

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