LXF80:Flash и PDF
Lockal (обсуждение | вклад) м (восстановление кавычек в коде AWB) |
Yaleks (обсуждение | вклад) м |
||
Строка 17: | Строка 17: | ||
В случае самостоятельной сборки, для получения всех возможностей предварительно потребуется добавить следующие библиотеки: | В случае самостоятельной сборки, для получения всех возможностей предварительно потребуется добавить следующие библиотеки: | ||
− | * ''' freetype''' — '''http://www.freetype.org''' | + | * '''freetype''' — '''http://www.freetype.org''' |
− | * ''' | + | * '''t1lib''' — '''ftp://sunsite.unc.edu/pub/linux/libs/graphics/''' |
− | * ''' | + | * '''jpeglib''' — '''http://www.ijg.org/files/jpegsrc.v6b.tar.gz''' |
− | * | + | * и библиотеки '''avifile''' — '''http://avifile.sourceforge.net''' |
Если чего-то не хватит, сценарий ''configure ''выдаст соответствующее сообщение; но те, кого не интересует отсутствующий функционал (например, сценарий жалуется на отсутствие ''ungif'', а вы не планируете работать с GIF-файлами), сообщение могут смело проигнорировать. | Если чего-то не хватит, сценарий ''configure ''выдаст соответствующее сообщение; но те, кого не интересует отсутствующий функционал (например, сценарий жалуется на отсутствие ''ungif'', а вы не планируете работать с GIF-файлами), сообщение могут смело проигнорировать. | ||
Строка 124: | Строка 124: | ||
$ swfdump --html file.swf | $ swfdump --html file.swf | ||
− | + | <source lang="html4strict"> | |
− | <OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8- 444553540000" WIDTH="550" HEIGHT="400" | + | <OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" WIDTH="550" HEIGHT="400" |
− | CODEBASE="http://active.macromedia.com/flash5/cabs/ swflash.cab#version=6,0,23,0"> | + | CODEBASE="http://active.macromedia.com/flash5/cabs/swflash.cab#version=6,0,23,0"> |
<PARAM NAME="MOVIE" VALUE="file.swf"> | <PARAM NAME="MOVIE" VALUE="file.swf"> | ||
<PARAM NAME="PLAY" VALUE="true"> | <PARAM NAME="PLAY" VALUE="true"> | ||
Строка 132: | Строка 132: | ||
<PARAM NAME="QUALITY" VALUE="high"> | <PARAM NAME="QUALITY" VALUE="high"> | ||
<EMBED SRC=" file.swf" WIDTH="550" HEIGHT="400" PLAY="true" ALIGN="" LOOP="true" QUALITY="high" | <EMBED SRC=" file.swf" WIDTH="550" HEIGHT="400" PLAY="true" ALIGN="" LOOP="true" QUALITY="high" | ||
− | TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/ getflashplayer"> | + | TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"> |
</EMBED> | </EMBED> | ||
− | + | </OBJECT> | |
− | + | </source> | |
Кроме того, при помощи параметра '''--text''' можно извлечь текстовые поля Flash-файла (подобно ''swfstrings''): | Кроме того, при помощи параметра '''--text''' можно извлечь текстовые поля Flash-файла (подобно ''swfstrings''): | ||
Строка 364: | Строка 364: | ||
'''Утилита a2ps''' | '''Утилита a2ps''' | ||
− | Это более мощная утилита, с помощью которой можно подготовить документ к выводу на печать в формате PostScript или в файл. ''a2ps ''расшифровывается как Any to PostScript («Что угодно — в PostScript»), домашняя страница проекта | + | Это более мощная утилита, с помощью которой можно подготовить документ к выводу на печать в формате PostScript или в файл. ''a2ps ''расшифровывается как Any to PostScript («Что угодно — в PostScript»), домашняя страница проекта '''http://www.inf.enst.fr/~demaille/a2ps/'''. Утилита небольшая, а опций у нее много, о некоторых из них мы поговорим подробнее. Представьте ситуацию: вы, как прогрессивный человек, написали себе «шпору» на экзамен на компьютере, но, естественно, в формате А4 нести ее с собой не совсем удобно. Значит, надо уменьшить шрифт и разбить документ на маленькие части. Именно это и делает следующая команда: |
a2ps --columns=4 --font-size=10 -j -encoding=koi8 shpora. | a2ps --columns=4 --font-size=10 -j -encoding=koi8 shpora. |
Текущая версия на 19:02, 13 июня 2010
|
|
|
[править] Инструменты для работы c Flash и PDF
Говоря о Libre Graphics, нельзя не упомянуть неизменных компаньонов традиционных графических форматов — Flash и PDF. Считается, что для работы с ними необходимо приобретать дорогостоящие коммерческие пакеты, предназначенные только для Windows и Mac OS X. А вот и нет! Большинство «бытовых» задач обработки Flash-роликов и PDF-документов прекрасно решаются свободными инструментами. Рассказывает Сергей Яремчук.
[править] ЧАСТЬ 1. SWFTOOLS — ПАКЕТ ДЛЯ РАБОТЫ С FLASH
Технологии интерактивной web-анимации, основанные на Flash и первоначально разработанные компанией Macromedia, за короткое время завоевали популярность у дизайнеров: они решили немало проблем из области мультимедийного представления информации. При сравнительно небольшом размере Flash позволяет использовать звуковые и графические эффекты, придать сайтам динамичность; а самое главное — специальные программы и модули для работы с Flash на клиентской стороне доступны практически для всех операционных систем и современных web-браузеров. Наиболее популярный инструмент — Macromedia Flash MX. Увы, при всевозможных достоинствах есть у него и существенный недостаток: цена, вынуждающая подумать об альтернативе. На сегодня для операционной системы GNU/Linux разработано большое количество инструментов, позволяющих создавать и работать с Flash.
Познакомимся с одним из них.
Пакет SWFTools
Пакет SWFTools (http://www.quiss.org/swftools) содержит несколько утилит, при помощи которых можно создавать Flash-файлы и манипулировать уже готовыми. Пакет компилируется и работает под Solaris, Linux, FreeBSD, OpenBSD, HP-UX, MacOS X и Windows 98/ME/2000/XP. Распространяется под лицензией GNU GPL.
Установка обычно никаких проблем не вызывает; кроме того, SWFTools включен в большинство дистрибутивов Linux. Например, пользователи ALTLinux могут установить SWFTools при помощи apt-get:
#apt-get install swftools
В случае самостоятельной сборки, для получения всех возможностей предварительно потребуется добавить следующие библиотеки:
- freetype — http://www.freetype.org
- t1lib — ftp://sunsite.unc.edu/pub/linux/libs/graphics/
- jpeglib — http://www.ijg.org/files/jpegsrc.v6b.tar.gz
- и библиотеки avifile — http://avifile.sourceforge.net
Если чего-то не хватит, сценарий configure выдаст соответствующее сообщение; но те, кого не интересует отсутствующий функционал (например, сценарий жалуется на отсутствие ungif, а вы не планируете работать с GIF-файлами), сообщение могут смело проигнорировать.
Конверторы
Это наиболее многочисленная категория утилит, входящая в комплект SWFTools: их целых семь. При помощи любой из них можно преобразовать различные файловые форматы в SWF (Small Web Format). Например, для конвертирования PDF в SWF нужно выполнить команду:
$ pdf2swf manual.pdf manual.swf processing PDF page 4 (612x792:0:0) (move:0:0)
В итоге будет получен SWF-файл, при просмотре которого в web-браузере будут показаны периодически сменяющие друг друга страницы документа. Если не указать имя выходного файла, результат попадет в stdout. При использовании некоторых утилит из состава SWFTools для генерирования графики на web-сервере могут пригодиться опции -C или --cgi, генерирующие дополнительный http-заголовок.
Можно обработать лишь часть документа, указав номера избранных страниц с помощью опции --pages:
$ pdf2swf --pages 1,2,5-10 manual.pdf manual.swf
Чтобы получить SWF из набора PNG-файлов, сохраненных в одном каталоге, используется следующая команда:
$ png2swf *.png -o file.swf
В результирующем ролике каждому PNG-файлу будет отведен отдельный кадр. Предусмотрены дополнительные параметры, например, сжатие (--zlib) — выигрыш достигает 10 % объема результирующего файла (впрочем, PNG и так не самый тяжелый формат); размеры окна (-X и -Y); и, при помощи --rate, количество кадров в секунду (число в диапазоне от 1 до 256). Числа должны подбираться с учетом формулы 1/значение, то есть чем меньше указанное число, тем больше будет выставлен интервал времени либо размер кадра.
$ png2swf -r 1 -X 50 -Y 50 --zlib *.png -o file.swf
Аналогичные опции имеет утилита gif2swf, позволяющая проделать те же процедуры с изображениями в формате GIF:
$ gif2swf -X 100 -Y 100 *.gif -o file.swf
Утилита для работы с JPEG-файлами, jpeg2swf, в работе напоминает предыдущую, но имеет еще две дополнительные опции: --mx — для использования сжатия Flash MX H.263 и --quality для установки качества изображения, в диапазоне от 1 (хуже) до 100 (лучше).
$ jpeg2swf --quality 60 -X 200 -Y 100 *.jpg -o file.swf
При помощи font2swf можно изготовить Flash-файл из файла шрифтов:
$ font2swf arial.ttf -o font.swf
Поддерживаются все распространенные форматы шрифтов: TTF, AFM, PFA, PFB и другие. К сожалению, невозможно указать кодировку, поэтому в результирующем файле локализованные шрифты выводятся неправильно (рис.1).
Следующая утилита — wav2swf. По названию ясно, что она позволяет получить SWF из звуковых файлов в формате WAV. При кодировании используются кодеки LAME. В общем случае вызов утилиты прост:
$ wav2swf -v voice.wav
В результате в текущем каталоге появится файл output.swf, при запуске которого в браузере зазвучит аудио. С помощью дополнительных опций можно изменить битрейт (--bitrate), по умолчанию равный 32, частоту дискретизации (--samplerate), время повторения фрагмента (--loop) и другие параметры. Например:
$ wav2swf -v -loop 5 –definesound voice2.wav -voice.swf
И, наконец, назначение последнего конвертора, avi2swf, тоже понятно — он преобразует AVI в SWF. Для кодирования используется кодек H.263. Принцип работы с утилитой аналогичный:
$ avi2swf file.avi -o output.swf
Для уменьшения размера конечного файла можно поступиться качеством: изменить 80 (значение по умолчанию) на 60, а также выбрать масштаб как 50 % исходного. Вместо кодирования всего файла, ограничимся первыми 100 кадрами:
$ avi2swf --num=100 --scale=50 --quality=60 file.avi -o output.swf
Утилиты для извлечения информации из Flash-файла
Самая простая в использовании утилита — swfstrings, извлекающая текст из swf-файла.:
$ swfstrings filename.swf
В результате на экран выведется текст, содержавшийся в файле. Учитывая количество сопутствующего мусора, вывод лучше будет перенаправить в другой файл:
$ swfstrings filename.swf > text.txt
Утилита swfexstract способна на большее. Она может извлекать все объекты, содержащиеся в swf-файле: отдельные кадры, шрифты и звук. Если вызвать ее без параметров, вы получите список объектов, которые содержит файл:
$ swfextract file.swf Objects in file file: [-i] 190 Shapes: ID(s) 1, 3, 5, 18, 20, 24, 27, 31, 35, 37, 39, 41, 43, 45-47, 51, 52, 54, 56, 58, ... [-i] 46 MovieClips: ID(s) 2, 4, 21, 57, 61, 72, 81, 89, 102, 107, 110, 114, 117, 119, 133, 136, ... [-j] 74 JPEGs: ID(s) 55, 59, 69, 74, 82, 91, 99, 105, 112, 120, 122, 124, 126, 128, 134, 141, ... [-p] 14 PNGs: ID(s) 17, 23, 34, 36, 38, 40, 42, 96, 243, 437, 451, 455, 457, 463 [-F] 10 Fonts: ID(s) 6, 12, 15, 25, 28, 32, 94, 183, 312, 380 [-f] 1 Frame: ID(s) 0 [-m] 1 MP3 Soundstream
Обратите внимание на буквы в квадратных скобках, которые идут в начале каждой строки. Они специфицируют объект извлечения. Например, нужно добыть звук:
$ swfextract -m file.swf NOTICE Writing mp3 data to output.mp3
Как видите, все просто. Вывод в WAV-файл возможен, но его необходимо обязательно указывать вместе с опцией -о.
Попробуем теперь извлечь PNG-изображения, исключая пустые фреймы (--hollow).
$ swfextract --pngs 17,23,34,36,38,40 file.swf --hollow
В результате в текущем каталоге появятся файлы вида pic17.png, pic23.png и т. д. А отдельный фрейм извлекается командой
$ swfextract -P -i 2 file.swf -o frame2.swf
либо
$ swfextract --frame 2 file.swf -o frame2.sw
Утилита swfdump выводит информацию о swf-файле.
Для вывода всей служебной информации наберите:
$ swfdump --full file.swf [HEADER] File version: 6 [HEADER] File size: 3091206 [HEADER] Frame rate: 18.000000 [HEADER] Frame count: 7165 [HEADER] Movie width: 550.00 [HEADER] Movie height: 400.00 [009] 3 SETBACKGROUNDCOLOR (00/00/00) [002] 32 DEFINESHAPE defines id 0001 | fillstyles(01) linestyles(00) | 1 ) SOLID 000000ff | | fill: 00/01 line:00 - moveTo 88.50 15.50 | fill: 00/01 line:00 - lineTo -88.50 15.50 | fill: 00/01 line:00 - lineTo -88.50 -15.50 | fill: 00/01 line:00 - lineTo 88.50 -15.50 | fill: 00/01 line:00 - lineTo 88.50 15.50
При помощи swfdump можно также генерировать HTMLкод, пригодный для непосредственного включения ролика в web-страницу:
$ swfdump --html file.swf
<OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" WIDTH="550" HEIGHT="400" CODEBASE="http://active.macromedia.com/flash5/cabs/swflash.cab#version=6,0,23,0"> <PARAM NAME="MOVIE" VALUE="file.swf"> <PARAM NAME="PLAY" VALUE="true"> <PARAM NAME="LOOP" VALUE="true"> <PARAM NAME="QUALITY" VALUE="high"> <EMBED SRC=" file.swf" WIDTH="550" HEIGHT="400" PLAY="true" ALIGN="" LOOP="true" QUALITY="high" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"> </EMBED> </OBJECT>
Кроме того, при помощи параметра --text можно извлечь текстовые поля Flash-файла (подобно swfstrings):
$ swfdump --text file.swf
Манипулирование данными
Этот раздел представлен всего одной утилитой — swfbbox, при помощи которой можно пересчитать параметры SWFфайла, а заодно уменьшить его размер. Данные о файле можно получить, запустив утилиту без параметров.
$ swfbbox file.swf Original Movie Size: 550.00 x 400.00 :0.00 :0.00
Возможна оптимизация, при помощи опции -О.
$ swfbbox -O file.swf -o optimiz.swf
Признаться, мне редко удавалось оптимизировать SWFфайл больше, чем на 1 %.
Результат оптимизации можно просмотреть, использовав параметр -S.
$ swfbbox -S file.swf { {frame 0} } { {frame 1} {ID5 {0.00 50.00 550.00 50.00 0.00 348.40 550.00 348.40}} {ID7 {76.50 121.60 115.60 121.60 76.50 132.65 115.60 132.65}}
и т. д.
Объединение Flash-файлов
Все описанные утилиты перекодировали файлы в SWF из разных форматов, оптимизировали, извлекали служебную информацию. Теперь осталось только объединить результаты их работы. Для этой цели предназначена утилита swfcombine, позволяющая «склеить» два или более SWF-файла в один. Один из файлов обязательно должен быть определен как главный — master, остальные подключаются по мере необходимости как подчиненные — slaves. Кроме того, при помощи swfcombine можно сжимать либо распаковывать SWF-файлы. В этом случае при использовании одного файла необходима опция --d (--dummy), не требующая указания файла slave. Для сжатия наберите команду:
$ swfcombine -dz file.swf -o file_new.swf
Распаковка происходит аналогично:
$ swfcombine -d file.swf -o file_new.swf
Теперь соединим два файла вместе. В духе Энди Ченнела, попробуем наложить звук на изображение:
$ swfcombine -o combined.swf picture.swf slave=sound.swf
Если количество slave-файлов велико, их можно предварительно объединить, чтобы оценить результат и упростить подбор параметров.
$ swfcombine --cat name1=slavefile1.swf name2=slavefile2.swf -o slave_res.swf
Можно добавить масштабирование (--scale) результирующего файла и количество кадров в секунду (--rate).
И, наконец, последняя утилита — swfc. С ее помощью можно скомпилировать сценарий sc в готовый Flash-ролик. Делается это очень просто (пример скрипта можно найти в подкаталоге doc пакета swftools):
$ swfc fileformat.sc -o file.swf
Инструменты, входящие в состав пакета SWFTools, позволяют выполнить большую часть операций по работе с файлами в формате Flash. Многие опции унифицированы, а значит, пара-тройка экспериментов — и вы уже полностью освоили работу с пакетом.
[править] ЧАСТЬ 2. РАБОТАЕМ С PDF В LINUX
Работаем с PDF в Linux
Работу с большим количеством документов трудно представить без формата PDF, который стал особенно популярен с развитием Интернета и распространением электронной документации. Для создания этих документов пользователи Windows зачастую применяют отнюдь не самые дешевые инструменты. Однако сторонники GNU/Linux могут выполнять практически те же задачи абсолютно бесплатно.
Такие популярные приложения, как настольная издательская система Scribus, GSView, OpenOffice.org и другие, позволяют экспортировать в PDF вновь созданный или открытый документ любого поддерживаемого этими приложениями формата. Кроме того, существуют утилиты, позволяющие выводить документ на псевдопринтер, который также создает PDF-файл. К сожалению, получившийся документ не всегда отвечает всем требованиям, да и подход этот, несмотря на кажущуюся простоту, имеет смысл при работе с небольшим количеством документов. При одновременной обработке нескольких файлов или желании автоматизировать процесс создания документов удобнее использовать специальные утилиты.
Pdftk-инструмент для выполнения ежедневных задач
Порывшись на специализированных сайтах, можно найти десятки утилит для работы с PDF, но первое место по функциональности принадлежит pdftk (http://www.accesspdf.com/pdftk/) Сида Стюарда [Sid Steward]. С его помощью можно легко объединить несколько документов в один; провести обратную операцию, разделив документ по страницам; расшифровать/зашифровать PDF-файл; заполнить данные форм, добавить или удалить вложения; восстановить поврежденные документы; и так далее. Утилита распространяется по лицензии GNU GPL, работает под Windows, Linux, Mac OS X, FreeBSD и Solaris. Для компиляции в различных дистрибутивах Linux или операционных системах в архиве имеются подготовленные Makefile. Например, для сборки под Red Hat/Fedora нужно ввести следующую команду:
$ make -f Makefile.RedHat
Справку об утилите можно получить при помощи pdftk --help. В общем случае, команда запуска выглядит так
pdftk исходный_файл(ы) опции выходной файл пароль
Например, следующей командой можно объединить два файла в третий — outfile.pdf.
$ pdftk in1.pdf in2.pdf cat output outfile.pdf
Можно также использовать следующую конструкцию:
$ pdftk A=in1.pdf B=in2.pdf cat A B output outfile.pdf
Такая запись удобна, если один из входных файлов требует отдельных параметров — например, пароля на раскрытие:
$ pdftk A=secured.pdf B=in2.pdf input_pw A=foopass cat A B output outfile.pdf
При большом количестве файлов удобно пользоваться маской:
$ pdftk *.pdf cat output outfile.pdf
Возможна и обратная операция. «Разложим» example.pdf на файлы с именем Page_<номер страницы>.pdf:
$ pdftk example.pdf burst output Page%03d.pdf
Исходные файлы должны быть в формате PDF, хотя для некоторых операций понадобятся файлы и в других форматах. Например, в файл формата PDF можно добавить вложение, аналогичное вложению в почтовое сообщение:
$ pdftk form.pdf attach_files attachfile.tex output new_file_with_attach.pdf
Количество файлов вложений и их формат не ограничены. По умолчанию, все вложения будут помещены на верхнем уровне документа, но, используя инструкцию to_page, можно указать конкретную страницу:
$ pdftk in.pdf attach_files table1.html to_page 6 output out.pdf
Чтобы, наоборот, извлечь присоединенные файлы — допустим, в подкаталог source, выполните:
$ pdftk attachment.pdf unpack_files output ~/source
Также можно добавить в исходный файл любой фон, который может использоваться в качестве водяного знака. Новый фон должен быть обязательно помещен в файл формата PDF (как это сделать, читайте дальше). Например, добавим к исходному файлу example.pdf фон, содержащийся в файле background.pdf:
$ pdftk example.pdf background background.pdf output result.pdf
При помощи pdftk можно попробовать восстановить испорченный документ (если повреждения не катастрофичны) — здесь каких-либо специальных опций не предусмотрено:
$ pdftk broken.pdf output fixed.pdf
— или сохранить метаданные в файл info.txt:
$ pdftk example.pdf dump_data output info.txt
Последняя возможность, о которой хотелось бы рассказать — заполнение заранее подготовленного файлашаблона данными из специального файла FPF файла или стандартного потока ввода (STDIN):
$ pdftk form.pdf fill_form eg.fdf output edit.pdf
Утилита Indexed PDF Creator
Утилита pdftk предназначена для работы с уже готовыми PDF-файлами, а вот IPDF (Indexed PDF Creator) Стива Слейвена [Steve Slaven] позволяет создавать индексированные PDF-документы из текстовых файлов. Домашняя страница проекта расположена по адресу http://hoopajoo.net/ Для установки потребуется библиотека PDFLib (http://www.pdflib.com/), свободная для личного употребления.
Пользователи дистрибутива ALTLinux могут найти ее в репозитарии Sisyphus. Основное назначение IPDF - помощь в создании безбумажного производства с использованием простых текстовых файлов, которые можно в любую минуту превратить в документ, поддерживающий индексацию и поиск. При запуске без аргументов утилита ожидает данных из STDIN и направляет результат в стандартный поток вывода (STDOUT).
При создании нового документа доступен ряд параметров — рассмотрим, например, параметры настройки. Создадим файл report.pdf из исходного report.txt:
$ ipdf report.txt -o report.pdf
Просто, правда? Теперь установим размер документа А2, портретную ориентацию и шрифт Times-Roman с кеглем 12:
$ ipdf report.txt -o report.pdf -m A2-p -F Times-Roman -f 12
Установим размер верхнего (-T) и левого (-L) полей документов и максимальное количество строк (-l).
$ ipdf report.txt -o report.pdf -T 25 –L 25 –l 50
Если надо, добавьте информацию об авторе и заголовок документа:
$ ipdf report.txt -o report.pdf -a Jaremchuk -t "Report Document"
Документ можно украсить фоновым изображением, например, логотипом фирмы (в качестве фона пока поддерживаются только файлы в формате TIFF):
$ ipdf report.txt -o report.pdf -b background.tiff
При постоянном использовании какого-либо параметра можно записать его в конфигурационный файл /etc/ipdf.conf или ~/.ipdf.conf. Любой из параметров допускает текущее переопределение через командную строку.
Например:
page_mode А3-p font_size 12 font_face Courier top_margin 40 left_margin 40 chars_per_line 135 lines_per_page 66 author Jaremchuk
А теперь — самое интересное. В настоящее время Indexed PDF Creator поддерживает три типа индексирования то есть создания закладок в PDF документе: абсолютное (-I), относительное (-i) и использующее регулярные выражения (-x). Одновременно разрешается использовать не более одного типа индексирования.
Абсолютная индексация применяется, когда заранее известно количество страниц. Параметр выглядит так:
-I СТРАНИЦА:СТРОКА[:СТАРТ:СТОП:МУЛЬТИИНДЕКС: ПОЗИЦИЯ]
Например, чтобы сделать индекс в 1-й, 2-й и 3-й странице, по 2-й строке, даем такую команду:
$ ipdf -o report.pdf -I 1:2 -I 2:2 -I 3:2 report.txt
Относительная индексация применяется, когда известно имя полей, но количество страниц различно. Формат ее следующий:
-i СТРОКА[:СТАРТ:СТРОП:МУЛЬТИИНДЕКС:ПОЗИЦИЯ]
Например, создадим индекс для 1-й и 3-й строки, в первой использовав символы от 11 до 20 (рис.2):
$ ipdf -o report.pdf -i 1:11:20 -i 3 report.txt
И, наконец, при помощи регулярных выражений можно автоматически создать индексы, по любым правилам.
$ ipdf -mletter-p -f12 -l65 -x '^Page??' -o result.pdf
Пакет GhostScript
В пакет GhostScript (http://www.cs.wisc.edu/~ghost/) входит большое количество утилит, при помощи которых можно выполнить практически все необходимые операции по работе с форматами PostScript и PDF. GhostScript можно вызвать, набрав gs в окне терминала. Возможна интерактивная работа с утилитой, когда все команды вводятся по мере необходимости, а также командная. Например, просто набрав gs file.ps, вы можете просмотреть указанный файл, а добавив опцию -sDEVICE=<devname> - преобразовать его в другой формат или подготовить для выдачи на принтер определенной марки. С помощью опции -sOutputFile= можно указать имя выходного файла. Вот так файл PostScript конвертируется в рисунок с расширением bmp:
gs -sDEVICE=bmp16m -sOutputFile=test.bmp test.ps.
А теперь создадим файл filename.pdf из исходного PostScript-файла filename.ps:
$ gs -q -dNOPAUSE -sDEVICE=pdfwrite - sOutputFile="filename.pdf" "filename.ps"
Для преобразования PS в PDF в состав пакета входит специальный скрипт ps2pdf. Используется он незатейливо:
$ ps2pdf input.ps output.pdf
Скрипт ps2pdf поддерживает все параметры gs.
Например, dCompatibility позволяет создать PDF-файл, совместимый с требуемой версией PDF. Для создания документа, совместимого с версией 1.4, используем следующую команду:
$ ps2pdf -dCompatibilityLevel=1.4 input.ps output.pdf
Для удобства можно воспользоваться отдельными скриптами, генерирующими PDF-файл заданной версии. Вот, например, конвертирование PS в PDF 1.4:
$ ps2pdf14 input.ps output.pdf
GhostScript поддерживает около 75 опций, и рассмотреть их все в пределах одной статьи не представляется возможным. Например, при помощи -dOptimize можно создать оптимизированный документ, при запросе отдельных страниц которого сервер будет выдавать пользователю именно требуемую страницу, а не весь файл целиком.
$ ps2pdf -dOptimize=true report.ps report.pdf
Можно применить компрессию, а заодно позволить использовать более качественные шрифты:
$ ps2pdf -dUseFlateCompression=true EmbedAllFonts=true report.ps report.pdf
Текст в PS/PDF при помощи enscript
Небольшая утилита GNU enscript (http://people.ssh.fi/mtr/genscript/) позволит с легкостью получить из обычного текстового файла PostScript или PDF. Делается это так:
$ enscript filename.txt –output=filename.ps
Утилита позволяет задать шрифт (по умолчанию используется Courier 10 pt), установить перенос слов и другие параметры. Например, установим перенос слов, шрифт в выходном документе изменим на Times-Roman кеглем 12 и организуем вывод информации на страницу в две колонки:
$ enscript -2 --fontTimes-Roman12 --word-wrap -output=filename.ps filename.txt
Утилита a2ps
Это более мощная утилита, с помощью которой можно подготовить документ к выводу на печать в формате PostScript или в файл. a2ps расшифровывается как Any to PostScript («Что угодно — в PostScript»), домашняя страница проекта http://www.inf.enst.fr/~demaille/a2ps/. Утилита небольшая, а опций у нее много, о некоторых из них мы поговорим подробнее. Представьте ситуацию: вы, как прогрессивный человек, написали себе «шпору» на экзамен на компьютере, но, естественно, в формате А4 нести ее с собой не совсем удобно. Значит, надо уменьшить шрифт и разбить документ на маленькие части. Именно это и делает следующая команда:
a2ps --columns=4 --font-size=10 -j -encoding=koi8 shpora. txt -o shpora.ps
Мы установили количество колонок текста равным четырем, кегль шрифта — 10, параметр -j означает рамку вокруг текста. Еще указаны необходимая кодировка, исходный файл и, с помощью флага -о, выходной. На вход можно подать практически все что угодно, хотя при использовании опции -Z или -delegate файлы делегируются другому приложению для предварительной обработки. Выходной формат — только PostScript, но как превратить его в PDF, вы уже знаете. При помощи a2ps можно также распечатать результат на принтере результат. Например, выведем содержимое и оглавление каталога, на принтер prnt1:
$ a2ps -P prnt1 --toc work/*
При выводе результата работы команды обратите внимание на строки вида.
[manual.pdf (pdf, делегирован pdf2ps): страниц: 35, листов: 18 [pdftoipe-20051114.tar.gz (gzip, делегирован gzip-a2ps): завершился с ошибкой. [16_04.tar.bz2 (bzip2, делегирован bzip2-a2ps): завершился с ошибкой. Проигнорировано] [lone.txt (простой): страниц: 3, листов: 2
В них показано, какие из приложений должны использоваться для делегирования файла. Если на момент запуска такое приложение в системе отсутствует, то вывод будет завершен с ошибкой. Обычные текстовые файлы, как видите, не требуют внешнего приложения. Попробуем преобразовать файл test.pdf в книжный формат и сохранить результат в book.ps:
# a2ps --book --delegate=on test.pdf -o book.ps [test.pdf (pdf, делегирован pdf2ps): страниц: 11, листов: 11 [Всего: страниц: 11, листов: 11] сохранен в файл 'book.ps
При помощи a2ps можно вывести содержимое файлов просто на экран.
$ a2ps -P display sample.ps sample.html
А можно обработать почтовый ящик и сохранить результат в файле mail.ps, по 4 страницы на листе:
$ a2ps -=mail -4 mailbox -o mail.ps
Параметров много; все указывать не обязательно. Просмотреть настройки по умолчанию можно при помощи команды:
$ a2ps --list=defaults
Конвертер pstoedit
Теперь решим обратную проблему. С помощью утилиты pstoedit (http://www.pstoedit.net/) можно конвертировать файлы из форматов PostScript или PDF в любой из более чем 30 других векторных форматов: Flash, CAD, LaTeX, Sketch, Mathematica, Kontour, ImageMagick (а значит, еще и во все форматы поддерживаемые этим пакетом), формат любого устройства GhostScript, LightWave 3D, апплетов Java 1/2, Adobe Illustrator, WMF и Enhanced Windows Meta Files (EMF) и многих других. Список поддерживаемых форматов можно получить, набрав pstoedit -help. Кроме того, на сайте доступны дополнительные shareware-модули, позволяющие работать с некоторыми другими форматами.
Несмотря на большое разнообразие опций, освоиться с работой довольно просто. Например, конвертируем файл PostScript в PDF:
$ pstoedit -f pdf inputfile.ps outfile.pdf
Используемый в этом случае драйвер обеспечивает только самые простые операции, связанные с конвертированием текста; рисунки не передаются. Поэтому для серьезных документов рекомендуется использовать опцию -f gs:pdfwrite.
$ pstoedit -f gs:pdfwrite inputfile.ps outfile.pdf
А вот конвертирование в формат MetaPost:
$ pstoedit -f mpost test.ps test.mp
Аналогично производится конвертирование в любой другой формат. Некоторые драйвера поддерживают дополнительные опции, которые необходимо задавать в виде -f «format:-option1 -option2». Кроме того, доступны и все опции, необходимые при конвертировании. Например, установим в новом документе шрифт Times (по умолчанию используется Courier) и конвертируем только первую страницу документа:
$ pstoedit -page 1 -df Times -f gs:pdfwrite inputfile.ps outfile.pdf
При помощи опции split можно разложить многостраничный документ на страницы. В имени выходного файла обязательно должно стоять %d, которое будет заменено соответствующим номером:
$ pstoedit -split -df Times -f gs:pdfwrite inputfile.ps out%d.pdf
Следующая команда установит размер страницы исходного документа равным А3.
$ pstoedit -pagesize а3 -f gs:pdfwrite inputfile.ps outfile.pdf
Изображения в PDF
Хотя описанные выше утилиты умеют конвертировать файлы изображений в формат PDF, легче будет воспользоваться специальными утилитами. В первую очередь это не развивавшийся с 2004 года PDFKreator (http://www.kraus.tk/projects/pdfkreator/) (рис. 3), позволяющий создать PDF-документ из графических файлов в форматах JPEG, PNG, BMP, TIFF и GIF.
Существует также небольшая написанная на С утилита img2pdf (http://pobox.com/~newt/greg_software.html), с помощью которой можно получить PDF-файл из рисунков в форматах PNG, TIFF и JPEG. Пользоваться img2pdf очень просто:
$ img2pdf *.tiff
В результате из всех файлов с расширением TIFF, находящихся в текущем каталоге, будет создан PDF-файл output.pdf. Возможности указать другое имя не предусмотрено. Поэтому при повторном использовании необходимо убедиться, что ранее созданный файл не пропадет. Кроме того, по умолчанию генерируются страницы размера Letter. Чтобы на выходе получить формат A4 (других не предусмотрено), необходимо перекомпилировать img2pdf, предварительно заменив в 108-й строке:
currPage = panda_newpage(outputdoc, panda_pagesize_ usletter);
аргумент panda_pagesize_usletter на panda_ pagesize_a4. При необходимости использования обеих версий удобно сохранить их под разными именами, например, img2pdf_letter и img2pdfa4.
Столь же удобен в применении скрипт makepdf.sh, создающий PDF-файлы из файлов изображений, который можно найти на сайте http://download.novell.com/. По умолчанию поддерживаeтся PNG; чтобы использовать другой формат, достаточно изменить переменную imagetype. К примеру, JPG устанавливается так.
imagetype="jpg"
Для преобразования используется ImageMagic и pdftk, так что они должны быть установлены в системе.
Как видите, с PDF-документами в Linux можно делать практически все. И не надо платить большие деньги — все это и многое другое доступно совершенно бесплатно.