The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Использование psutils - пакета для работы с PostScript файлами (pdf postscript print)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: pdf, postscript, print,  (найти похожие документы)
From: Артем Носов aka ChiP <chip-set at mail.ru> Date: Mon, 28 Aug 2004 14:31:37 +0000 (UTC) Subject: Использование psutils - пакета для работы с PostScript файлами Оригинал: http://linuxshop.ru/unix4all/?cid=&id=426 Содержание: * 1. Предыстория * 2. Установка * 2.1 в Gentoo * 2.2 в FreeBSD 3. Использование 4. Приложение 5. Послесловие 1. Предыстория -------------- Думаю, каждый непротив сэкономить свои честно заработанные деревянные. Во всех новостях пестрят заголовки, что использование *nix экономит компаниям миллионы и они все ватагами, а то и полчищами, перебираются на open-source. На обычного же российского обывателя причины, приводящие к столь сильному ажиотажу в мировых холдингах, не экстраполируются или иначе не распространяются :). Лишь по одной причине - наши привыкли к халяве и воровству в сфере IT технологий. Уже предвижу полеты тухлых помидоров и выкрикы "лестных" высказываний ;-) ... Безусловно, из круга читателей статей подобного юнихово-направленного жанра такие единицы, но оглянитесь вокруг! Возможно, по этой причине - отсутсвию статей подобного жанра,- но на самом деле совсем по другой :), и появилась заметка, демонстрирующая РЕАЛЬНУЮ экономию тех самых кромных. Идея в ней далеко не нова и легко применима для продуктов других фирм и операционных систем. А именно, речь пойдет об экономии листов чистой бумаги при распечатке электронной литературы: книг, статей, новостей, электронных писем, др. - в виде брошюр. "В нагрузку", на халяву :-), мы получаем дополнительные возможности - простоту навигации по распечатанному набору, схожесть с книжным вариантом (особенно, если дополнить красивой обложкой), приятность демонстрации на публике (в частности, на выставках, в виде проспектов). Нет! Я не собираюсь заставлять Вас дополнять кол-во страниц до числа кратного 4-м, а потом разбивать их на группы. За нас это сделает пакет psutils, речь о котором и пойдет в статье. Да, последнее - в статье Вы не найдете настройки принтера, так что если эта процедура еще не выполнена на Вашей системе обратитесь к соотвествуюей документации. 2. Установка psutils -------------------- Установку я рассмотрю для 2-х наиболее используемых мной систем: Gentoo и FreeBSD. Обе процедуры будут основаны на использвании портов/портажей. Если же Вы используете пакетный дистрибутив, попробуйте поискать пакет с соотвествующим именем для Вашего пакетного менеджера или просто воспользуйтесь архивом исходных текстов, который может быть найден на http://www.tardis.ed.ac.uk/~ajcd/psutils . 2.1 Установка в Gentoo ---------------------- Для скачки необходимых архивов исходных текстов выполним: emerge -f app-text/psutils и для последующей установки: emerge app-text/psutils Безусловно первый шаг можно опустить. Но предложенный вариант кажется мне более подходящим, т.к. не дает простаивать соединению (помните? мы пытаемся сэкономить :) при компиляции какой-либо зависимости пакета. 2.2 Установка в FreeBSD ----------------------- Для скачки выполним: cd /usr/ports/print/psutils-a4 && make fetch-recursive Можно выбратьports/print/psutils-letter, но на Российских просторах я не вижу в этом особого смысла. И завершим все сборкой и установкой пакета: make install clean 3. Использование ---------------- Итак, подошел самый интересный этап - апробирования. Давайте, попробуем распечатать какой-нибудь PDF документ.Первое, что нам потребуется это сконвертировать документ в PostScript формат,на манипулирование которым расчитан ныне установленный нами пакет psutils.Одним из вариантов может быть использование входящей в пакет ghostscriptпрограммы pdf2ps: pdf2ps examples.pdf В результате в том же каталоге появится файл examples.ps, который можно использовать для дальнейших манипуляций. Но из-за очень! низкого качества получаемого документа, я этот способ не рекомендую. А предлагаю воспользоваться замечательным пакетом xpdf. Для его установки в Gentoo: emerge -f app-text/xpdf && emerge app-text/xpdf в FreeBSD: cd /usr/ports/graphics/xpdf && make fetch-recursive install clean И запускаем его следующей командой: xpdf -ps example.psexample.pdf После того как он запустится, жмем "Печать документа" (или сочетанием горячих клавиш: Ctrl+p). В окрывшемся диалогом окне выбираем "Печать в файл" (Print to file) и смело жмем кнопку Print. Процедура распечатки (в действительности конвертации) может занять некоторой промежуток времени, особенно если количество страниц в документе переваливает за тысячу, как в предпоследнем стандарте на язык C++ :). Теперь все готово к получению долгожданного результата: psbook example.ps | psnup -l -p4 -2 > book.ps Давайте разберемся, что же означает эта загадочная команда. Левая ее часть (psbook) дополняет содержащиеся в документе страницы пустыми листами. Так чтобы общее количество страниц стало кратным 4-м, после чего "раскладывает" их в определенном поряке. Так, например, для документа содержащего 6-ть страниц, это будет следующая последовательность: [*] [1] [2] [*] [6] [3] [4] [5] где [*] - добавленные пустые листы. Сказанное легко проверить запустив psbook в отдельности: psbook example.ps > output.ps Для ранее рассматриваемого документа в 6-ть страниц будет выдано на экран: [*] [1] [2] [*] [6] [3] [4] [5] Wrote 8 pages, 219089 bytes Следущей стадией обработки нашего PostScript файла является размещение нескольких страниц на одном "физическом" листе. Для этого как раз результат psbook передается по конвейеру (|) на вход psnup,который в свою очередь размещает 2-е последовательные страницы передаемого PostScript файла на одной выходной (на это указывает опция -2, попробуйте заменить ее на -3 и посмотреть на результат :). Назначение других параметровpsnup состоит в: -l # вертикальное размещение листа. -pa4 # размер выходного листа. Допустимыми размерами (форматами) могут быть: a3, a4, a5, b5, letter, legal, tabloid, statement, executive, folio, quarto, 10x14. Как видите, все очень элегантно и просто. Однако, прежде чем приступить к распечатке, хочу отметить, что в принтер желательно вставить ОДИН лист. Данное действие временное, но на данном этапе необходимое, т.к. печатаемые листы будут идти последовательно и после распечатки каждой нечетной стороны потребуется печать на ее противоположной стороне. Итак, давайте же попробуем распечатать полученный нами файл: lpr book.ps Во избежание появления временного файла можно использовать psbook example.ps | psnup -l -pa4 -2 | lpr Думаю, вы сразу заметили некоторое неудобство при использовании данного метода, т.к. приходится постоянно находиться у принтера и последовательно переворачивать/вставлять страницы. Давайте попробуем избавиться от этого недостатка. И в этом нам вновь помогут разработчики psutils, заботливо включившие утилиту pstops в поставку psutils. Итак, для того чтобы распечатать нечетные страницы: psbook example.ps | psnup -l -pa4 -2 | pstops "2:0(1in,0in)" | lpr и, перевернув все листы, распечать четные страницы: psbook example.ps | psnup -l -pa4 -2 | pspstops "2:-1(1in,0in)" | lpr Думаю этого достаточно, чтобы разогреть Ваш интерес к брошюрированию :). Некоторые интересные моменты вы также можете найти в приложении. Я же хочу немного заострить внимание и на других не менее полезных утилитах, поставляемых в пакете psutils. Так четвертой, по востребованности, выступает команда psselect, позволяющая отбирать отдельные страницы или диапазон страниц из PostScript файла. Для распечатки 47 страницы мы могли бы выполнить: psselect -p47 example.ps | lpr А следующая команда выбирает первые 12-цать, 103-ую, с 23 по 28 и 3-ую страницу и записывает их в файл output.ps в перечисленной последовательности: psselect -p1-12,103,23-28,3 example.ps output.ps Есть возможность отсчета страниц начиная с конца документа. Для этого номер страницы необходим предварить знаком _ (подчеркивания). Так для выбора 3-х последних страниц можно использовать: psselect -p_3-_1 example.ps output.ps или psselect -p_3- example.ps output.ps Если второй индекс для аргумента -p опущен, как в привиденном выше примере, то подразумевается конец документа, для первого соотвественно начало документа. Одной из привлекательных возможностей psselect является выборка четных и нечетных страниц. Так ранее описанную команду для распечатки нечетных станиц psbook example.ps | psnup -l -pa4 -2 | pstops "2:0(1in,0in)" | lpr можно заменить более простой: psbook example.ps | psnup -l -pa4 -2 | psselect -o | lpr Для распечатки четных страниц достаточно заменить парамет -o у psselect на -e, т.е. psselect -e. Редко, но бывают случаи, когда необходимый документ доступен только в letter формате или каком-либо другом отличном от A4. В этом случае незаменимой может стать команда: psresize -pa4 letter.ps pa4.ps Которая преобразует входной файл letter.ps в letter-формате в выходной pa4.ps, изменив размер листа на A4. Последней из не рассмотренных мною, но не последней поставляемой с пакетом psutils, является psmerge. Ее использование дает нам возможность скливать 2-а и более PostScript файла в один. Правда с одной существенной оговоркой: все входные PostScript файлы должны быть созданы одной программой. Синтаксис ее использования аналогичен описанным ранее утилитам: psmerge -o output.ps example1.ps example2.ps example3.ps Объединит в файл с именем output.ps 3-и входных файла example1.ps, .. , example3.ps. Все! На этом рассмотрение пакета psutils считаю завершенным. Конечно, некоторые моменты остались не освещенными, но им, без сомнения, уделено внимание на соотвествующих страницах справочных руководств. 4. Приложение ------------- Вкратце опишу ситуации, с которыми мне приходилось встречаться при распечатке брошюр из различных приложений. Ранее описанный способ конвертации PDF в PostScript может быть осуществлен почти любым просмотровщиком PDF файлов. Так, например, аналогичную процедуру мне успешно удалось произвести на Acrobat'e 5-ой версии и Gpdf. Распечатка man страниц выливается в красивую последовательность: man -t gethostbyname_r | psbook | psnup -l -pa4 -2 | lpr Для вывода в PostScript файл из многих приложений (например, браузеров, word-редакторов) достаточно выбрать из "диалога печати" контретного приложения пункт - "Печать в файл" (Print to file) и указать имя файла. При использовании замечательного "редактора" LyX, помимо "Печати вфайл", можно воспользоваться возможностью экспорта в различные форматы. Все ситуация описать невозможно, но выход всегда есть :) Обычно он располагается там же, где и вход ;) 5. Послесловие -------------- Подводя итоги, хочу сказать, что использование данной утилиты позволило сэкономить мне за 8-мь месяцев ~1000 рублей. Расход у меня получается в районе одной пачки в месяц при печати брошюрами. Произведя элементарные математические операции, и условившись, что пачка бумаги стоит 100 руб., получим: при использовании брошюр: 8 месяцев*100 руб * 1 пачку = 800 руб. при 2-х сторонней печати: 8 месяцев * 100 руб * 2 пачки = 1600 руб. при односторонней печати: 8 месяцев * 100 руб * 4 пачки = 3200 руб. Результаты говорят сами за себя :). Однако, некоторые виды бумаг накладывают свои ограничения на "представление" информации, которую они будут содержать. Так, например, описанный метод не подойдет для курсовых/дипломных работ, договоров и других ценных бумаг, деловой переписки.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, netzmb (?), 14:12, 20/01/2010 [ответить]  
  • +/
    Если установлен app-text/poppler-utils, то можно воспользоваться утилитой pdftops, которая конвертирует pdf в ps из командной строки и с приемлемым качеством (в отличии от pdf2ps)

    PS: а также у неё присутствует гораздо больше опций, чем в pdf2ps

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру