avva: (Default)
[personal profile] avva
Каждый раз, когда мне надо распечатать что-то не совершенно стандартным путем, я начинаю в итоге лезть на стенку от того, как тяжело найти простой способ это сделать. 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+. Если бы одного из этих двух упущений не было, мне не пришлось бы потратить столько времени на поиски других решений.

Update: mpage на данный момент, 2018, нет больше в стандартном Дебиан, исходники тут: http://www.mesa.nl/pub/mpage/

Date: 2014-12-09 10:08 am (UTC)
From: [identity profile] vorobiev.livejournal.com
Интересно, а идея заранее распечатать рамки под стандартные размеры страниц почему не прошла?

Date: 2014-12-09 10:12 am (UTC)
From: [identity profile] avva.livejournal.com
Честно говоря, мне это даже в голову не пришло. Поскольку я знаю в общих чертах устройство PDF/DJVU/PS/печати, я понимал, что технологически это *просто*, распечатать с рамками, и все никак не мог поверить, что очередная утилита опять окажется глючной или не сумеет это сделать. Поэтому убил кучу времени.

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

Date: 2014-12-09 10:23 am (UTC)
From: [identity profile] vorobiev.livejournal.com
Как вариант, можно было бы сделать одну пробную страницу с двусторонней печатью. Потом посмотреть положение рамок и в обычном Word сделать рамку с таблицей в виде двустороннего документа. Потом распечатать рамки и проверить совпадение.

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

Видимо дело в том, что я недавно прочитал изумительную книгу Файнмана и теперь с интересом смотрю на физически-инженерные решения :)

Date: 2014-12-09 10:24 am (UTC)
From: [identity profile] vadim-i-z.livejournal.com
Печать нескольких страниц на одном листе с рамками прекрасно делает FinePrint. Не знаю, правда, есть ли его версия под Линукс.

Date: 2014-12-09 10:24 am (UTC)
From: [identity profile] kosovsky-family.livejournal.com
Я тоже сталкивался с этой проблемой. Причем на виндовых машинах я ВСЕГДА встречал опцию добавления рамки. Меня это огорчило, но я ничего не сделал с этим.

Date: 2014-12-09 10:35 am (UTC)
From: [identity profile] eisenberg.livejournal.com
Если Вы добрались до PS (как и зачем - не столь важно), то в нём можно тупо нарисовать рамки руками. Язык же. Что-то типа
newpath 0 0 moveto 540 0 rlineto 0 720 rlineto -540 0 rlineto stroke

Date: 2014-12-09 10:38 am (UTC)
From: [identity profile] avva.livejournal.com
Ну да, я почти до этого дошел. Просто ж пришлось бы вычислять правильные координаты, вставлять это автоматически на каждую страницу итд. Если б я не нашел mpage(1), в конце концов может так бы и сделал. Был бы еще более разъярен тогда.

Date: 2014-12-10 06:01 am (UTC)
From: [identity profile] agathpher.livejournal.com
"If you wish to make an apple pie from scratch, you must first invent the universe." (c) C. Sagan ;)

Date: 2014-12-09 10:42 am (UTC)
From: [identity profile] avva.livejournal.com
А, кстати нет, не так просто: я не смог найти простой способ распечатать в файл PS в формате n-up, по крайней мере диалог не позволяет. n-up без рамок он дает послать только прямо на принтер.

Date: 2014-12-09 08:16 pm (UTC)
From: [identity profile] f137.livejournal.com
А psnup не годится?

Date: 2014-12-09 10:47 am (UTC)
From: [identity profile] migmit.livejournal.com
Я обычно пользую для таких вещей pstops. Рамки она умеет. Но, правда, из-под линуха я печатать не пробовал никогда.

Кстати, а разве convert не ghostscript дёргает?
Edited Date: 2014-12-09 10:50 am (UTC)

Date: 2014-12-09 11:00 am (UTC)
From: [identity profile] avva.livejournal.com
Про pstops я забыл и не пробовал, в другой раз посмотрю, спасибо.

convert дергает ghostscript, да, что само по себе плохо; но кроме того уже к полученным от ghostscript картинкам она применяет масштабирование по каким-то своим диким понятиям, на которые теоретически можно повлиять правильными опциями -depth и -geometry в правильных местах, но на практике у меня постоянно получалось какое-то дерьмо.

Date: 2014-12-09 11:06 am (UTC)
From: [identity profile] -pg-.livejournal.com
Прошу прощения, а что означает выражение (1), обильно встречающееся в этом тексте?

Date: 2014-12-09 11:17 am (UTC)
From: [identity profile] avva.livejournal.com
В юниксе есть старая традиция писать после названия какой-то системной утилиты, библиотеки, документа в скобках номер раздела документации (т.н. man pages), которому она соответствует. 1 это "просто программы" и разного рода полезные утилиты, 5 - конфигурационные файлы системы, 7 - административные утилиты итд. Если я пишу mpage(1), это говорит привыкшему к такой традиции читателю: это какая-то полезная программа, которая запускается с таким именем в командной строке.

Date: 2014-12-09 11:53 am (UTC)
From: [identity profile] -pg-.livejournal.com
Ага, я так примерно и подумал, но про магию чисел 1, 5 и 7 не знал. :)

Date: 2014-12-09 01:33 pm (UTC)
From: [identity profile] tejblum.livejournal.com
Административные утилиты -- это всё-таки 8, а не 7.

Date: 2014-12-09 01:48 pm (UTC)
From: [identity profile] avva.livejournal.com
Спасибо :)

Date: 2014-12-09 11:18 am (UTC)
From: [identity profile] grundik.livejournal.com
> В принципе почти все эти программы можно найти/запустить и под OSX, и под Windows при желании.

В OSX и в Windows всё уже есть из коробки, программы не нужны.
(deleted comment)

Date: 2014-12-09 12:13 pm (UTC)
From: [identity profile] grundik.livejournal.com
Речь про печать вообще-то.
(deleted comment)

Date: 2014-12-09 12:21 pm (UTC)
From: [identity profile] grundik.livejournal.com
Автор этого журнала пишет, что у него возникли проблемы с рамочкой и для решения этих проблем он юзает какой-то софт, который можно использовать и под виндой и под маком.

Соответственно да, я про умение рисовать рамочку.
(deleted comment)

Date: 2014-12-09 12:27 pm (UTC)
From: [identity profile] grundik.livejournal.com
Она теоретически и писать умеет их :)

Date: 2014-12-10 07:35 am (UTC)
From: [identity profile] plogenius.livejournal.com
КАК??!?!?!?

Date: 2014-12-09 12:28 pm (UTC)
From: [identity profile] squadette.livejournal.com
да. Pages Per Sheet: 4
Border: Single Hairline

Date: 2014-12-10 08:58 am (UTC)
From: [identity profile] avva.livejournal.com
В Линуксе, оказывается, тоже, см. апдейт.

Date: 2014-12-09 12:21 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Windows "искаропки" умеет печатать дежавю?

Date: 2014-12-09 12:24 pm (UTC)
From: [identity profile] grundik.livejournal.com
Винда из коробки умеет печатать рамочки. Речь в посте идёт о рамочках, да. И на печать отправляется PDF или PS.

Вы вообще читали оригинальный пост, или так, чисто в комментах честь линукса отстаивать пришли?

Date: 2014-12-11 11:47 pm (UTC)
From: [identity profile] ald1976.livejournal.com
Рамочки умеют печатать почти все принтеры, предоставляя соотв. опцию, которую реализует стандартный диалог печати виндоус.

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

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

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

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

Date: 2014-12-09 11:29 am (UTC)
tobotras: (Default)
From: [personal profile] tobotras
psutils — наше всё, и даже больше, чем всё!

Date: 2014-12-09 01:28 pm (UTC)
From: [identity profile] ulrith.livejournal.com
Не упомянут pdftk, а он хороший.

Date: 2014-12-09 01:34 pm (UTC)
From: [identity profile] avva.livejournal.com
Да, вы правы. Хоть он мне тут совсем и не понадобился. Хороший, сейчас добавлю хоть строчку в конце.

Date: 2014-12-09 02:29 pm (UTC)
From: [identity profile] djkmomega.livejournal.com
Я вот плачу за квартиру в инете и дабы чеки печатные сохранить, печатаю их в 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 Date: 2014-12-09 02:31 pm (UTC)

Date: 2014-12-09 07:35 pm (UTC)
From: [identity profile] edo-rus.livejournal.com
Не пользуйтесь: разнообразными "виртуальными PDF-принтерами", они дают PDF намного больше и хуже качеством.

странно.
как-то сравнил экспорт в pdf из inkscape с печатью на виртуальный pdf-принтер. файлы побайтово совпали, был удивлён.

Date: 2014-12-09 08:21 pm (UTC)
From: [identity profile] max630.livejournal.com
Мне кажется, всё от драйвера принтера зависит. Я точно помню, что у меня был где-то принтер который умел рамки делать. Хоть одиночные, хоть двойные. Вот где это было - не помню, но помню много распечатывал.

А диалог - тупой, он просто пишет то что можно и текстом в lpoptions увидеть.

Date: 2014-12-10 09:00 am (UTC)
From: [identity profile] avva.livejournal.com
Я этого не понимал раньше (что диалог тупой). А опция печати с рамкой, оказывается, есть в стандартном lp, см. апдейт - только ни man lp, ни lpoptions ее не показывают.

Date: 2014-12-10 12:48 pm (UTC)
From: [identity profile] avva.livejournal.com
Я решил посмотреть, почему в CUPS ее нет, и не стоит ли добавить, и обнаружил, что она есть.

boomaga!

Date: 2014-12-13 05:53 pm (UTC)
From: [identity profile] Евгений Кузнецов (from livejournal.com)
А в boomaga нет ли нужной опции? https://github.com/Boomaga

January 2026

S M T W T F S
    1 2 3
4 5 6 7 8 910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 9th, 2026 01:31 am
Powered by Dreamwidth Studios