- PVSM.RU - https://www.pvsm.ru -

Кунг-фу стиля Linux: PDF для пингвинов

Вначале PostScript представлял собой язык программирования для принтеров. И хотя PostScript-принтеры всё ещё не потеряли актуальности, существует и множество других форматов, в которых можно отправлять данные на печать. Но благодаря PostScript появился Portable Document Format — PDF, который стал невообразимо популярным. Пожалуй, не проходит и дня, чтобы каждый из нас не просмотрел бы какой-нибудь PDF-документ на своём компьютере. Конечно, есть и форматы, конкурирующие с PDF, но им, в сравнении с PDF, принадлежит лишь небольшая доля рынка. Просмотр PDF-файлов в Linux — это не проблема. А как насчёт их редактирования? Как оказалось, это тоже несложно, правда, только если знать о том, как именно это делается.

Кунг-фу стиля Linux: PDF для пингвинов - 1 [1]

Все переводы серии

Кунг-фу стиля Linux: удобная работа с файлами по SSH [2]
Кунг-фу стиля Linux: мониторинг дисковой подсистемы [3]
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep [4]
Кунг-фу стиля Linux: упрощение работы с awk [5]
Кунг-фу стиля Linux: наблюдение за файловой системой [6]
Кунг-фу стиля Linux: наблюдение за файлами [7]
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash [8]
Кунг-фу стиля Linux: великая сила make [9]
Кунг-фу стиля Linux: устранение неполадок в работе incron [10]
Кунг-фу стиля Linux: расшаривание терминала в браузере [11]
Кунг-фу стиля Linux: синхронизация настроек [12]
Кунг-фу стиля Linux: бесплатный VPN по SSH [13]
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы [14]
Кунг-фу стиля Linux: утилита marker и меню для командной строки [15]
Кунг-фу стиля Linux: sudo и поворот двух ключей [16]
Кунг-фу стиля Linux: программное управление окнами [17]
Кунг-фу стиля Linux: организация работы программ после выхода из системы [18]
Кунг-фу стиля Linux: регулярные выражения [19]
Кунг-фу стиля Linux: запуск команд [20]
Кунг-фу стиля Linux: разбираемся с последовательными портами [21]
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня [22]
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории [23]
Кунг-фу стиля Linux: PDF для пингвинов [1]

Графические инструменты

Существует множество инструментов для редактирования PDF-файлов в Linux. Главная проблема тут — качество получаемого результата. Для редактирования PDF-файлов можно воспользоваться, например, LibreOffice Draw, Inkscape или даже GIMP. Эти инструменты, как правило, отлично справляются с простыми задачами, например — когда нужно лишь убрать что-то из документа, перекрыв это белым прямоугольником, или когда надо сделать в документе какое-то примечание. А вот если речь идёт о более сложных изменениях, или о получении документов, элементы которых выверены до последнего пикселя, то эти инструменты для решения таких задач вполне могут и не подойти.

Кунг-фу стиля Linux: PDF для пингвинов - 2

Редактирование PDF-документа в GIMP

Основная сложность тут в том, что большинство подобных инструментов работают с PDF-документами как с изображениями, или, как минимум, как с коллекциями объектов. Например, текстовые колонки, вероятно, будут преобразованы в наборы отдельных строк. Изменение чего-либо, что вызывает переход текста на новую строку, приведёт к необходимости ручного изменения других строк. А иногда то, что выглядит как текст, текстом, на самом деле, не является. Текст может быть представлен изображениями. Это сильно зависит в первую очередь от того, как именно был создан конкретный PDF-файл.

Если вы не против использования онлайн-инструментов, то вам, в деле работы с PDF, может пригодиться PDFEscape [24] — бесплатный и весьма достойный редактор. Среди других вариантов можно отметить Scribus и Okular. Оба эти инструмента, на самом деле, не умеют редактировать файлы, но могут импортировать их в виде изображений, с которыми уже можно работать. Например, в Okular, в режиме предварительного просмотра документов, можно добавлять в документы аннотации, вроде тех, которыми отмечают самое интересное, и элементы, нарисованные от руки.

Неудивительно то, что emacs умеет выводить PDF-файлы при запуске под X. Можно использовать Control+C Control+C для переключения на просмотр текстового представления файла. В конце концов, большинство PDF-файлов представляют собой файлы, содержащие текст, а emacs поддерживает даже работу с бинарными файлами. Поэтому, если вы не против поработать с внутренним содержимым PDF-файлов, которое очень похоже на PostScript, вы можете редактировать PDF-файлы в emacs или в каком-нибудь другом текстовом редакторе.

Существует несколько специализированных платных PDF-редакторов и как минимум один опенсорсный редактор [25] такого рода. Но, конечно, как и для решения большинства задач в Linux, для редактирования PDF-файлов можно пользоваться инструментами командной строки.

Маскировка текста

Проблема работы с PDF-файлами, представленными в виде обычного текста, заключается в том, что, даже при просмотре их emacs, текстовые данные в таких файлах часто сжаты и, в результате, нечитаемы. Например, буквы, из которых состоят слова, могут быть разделены кодом, форматирующим их, или другими данными. Поэтому поискать некий текст в подобных файлах, вполне возможно, не получится.

PDF-файлы можно конвертировать в формат, при использовании которого сжатие не слишком сильно портит текст, но это — тоже не панацея. Например, если открыть следующий фрагмент кода статьи про любительскую радиосвязь и задаться целью изменить слово «convention», то сложно будет понять даже то, где именно находится это слово. Но оно, тем не менее, где-то здесь:

3 0 obj << /Length 14770 /Filter /FlateDecode >> stream

H�|Wɒ�8��+p$gJ,�c��v�cS�Ҍc��J�$���ZV������� �CTR�������r��[�}�7}����|��������I5u���`M�>�/��?l�.8�@��gBzq�r!#�%� AE�� �˜ ᥉��x!$��X8^%$��A�D�B���(���b�[H �>����#��{a���e0$^H&|/����U1$^��#��/�G�Us��/»/�� <i�'qC���$xe�«X�x22�������G��F�Lp]Mnm�$] #TI��G�q�l��'3;!���!+�ȷ�{䕀���

��b��Qja����Q i� GRn��g;L����x�Zܿ㌳�n�2�R& :«x�r�ky�[JPK��/���S��i��������]r�F�p����k�� |���

QI�mx>1��1�Q��y)ХǺ�Z�U.^�](pN��dx����;�֬;d�_�{˪�cYa��.t�s�}�ْ{<ZW�:�Ȅ�Oɴ��cS�UzluP�֨o}ި��Uqf��o��V��bT%mj|��t����;v�{s�Rj˺���

Удачных поисков! Но этот беспорядок можно конвертировать в несжатый текст:

qpdf -qdf input.pdf output.txt

Выходной файл, на самом деле, несмотря на то, что я дал ему расширение .txt, будет PDF-файлом. Но в нём текст распакован. И хотя то, что получится, тоже далеко от идеала, теперь мы, по крайней мере, сможем найти в тексте то, что нужно изменить:

1.2632 -1.1242 TD
0.0739 Tc
0.1263 Tw
(One potentially confusing Stamp)Tj
-1.2632 -1.1368 TD
0.026 Tc
0.1248 Tw
[(con)38.6(v)20.7(ention is that the I/O pin numbers)]TJ
0 -1.1242 TD
0.0262 Tc
0.0072 Tw
[<646f6e90>13.6(t correspond to the IC pin numbers.)]TJ
T*

И, опять же, желаю удачи в поиске, например, того же слова «convention». Но то, что получилось теперь, всё же, лучше, чем первый вариант. А метаданные можно найти даже в необработанном файле, где имеются строки вроде /Author и /Title.

Волшебство командной строки

Существует такой инструмент — qpdf, который умеет конвертировать PDF-файлы в другие PDF-файлы. Он может оптимизировать эти файлы в расчёте на их размещение в интернете или в расчёте на редактирование текста. Он умеет выполнять простые операции вроде удаления страниц или объединения фрагментов нескольких файлов. Вы можете взглянуть на документацию [26] по нему. В вышеприведённом примере мы воспользовались режимом QDF для создания совершенно нормального PDF-файла, все объекты которого размещены в соответствии с их порядковыми номерами, в котором используется обычный для Unix способ завершения строк. Такие свойства выходных файлов упрощают их редактирование в обычных текстовых редакторах, но, как мы уже видели, это, всё равно, не такая уж и простая задача. Например, довольно-таки сложно удалить объект целиком, но если избавиться ото всех его упоминаний, то можно, воспользовавшись fix-qdf, воссоздать нормальный QDF-файл.

Ещё один способ выполнения простых правок PDF-документов предусматривает использование PDFtk Server [27] (PDFtk, без «Server», это графический набор инструментов для Windows). С помощью PDFtk можно объединять или разделять документы, поворачивать страницы и решать много других распространённых задач. Например — вот как объединить все материалы двух файлов:

pdftk in1.pdf in2.pdf cat output output.pdf

Можно сделать то же самое, но пропустив, скажем, страницу №9:

pdftk in1.pdf in2.pdf cat 1-8 10-end output output.pdf

Ещё можно перемешивать страницы объединённых документов, располагая их в нужном порядке:

pdftk A=in1.pdf B=in2.pdf shuffle A B output output.pdf

Путешествие из текста в PDF и обратно

Если нужно, пользуясь инструментами командной строки, преобразовать текст в PDF, решить эту задачу можно разными способами. Например, существует отличный инструмент Pandoc [28], который позволяет преобразовывать материалы, оформленные с помощью одних языков разметки, в материалы, оформленные с помощью других способов описания документов. В частности, речь идёт о возможности преобразования практически всего чего угодно в PDF.

Ещё можно использовать различные комбинации ps2pdf [29] (вместе с инструментом для генерирования PostScript-данных), pdf2text (этот инструмент входит в состав пакета poppler-utils [30]) или Ghostscript [31] для создания PDF-файлов или для извлечения из них текстовых данных. Надо сказать, что Ghostscript — это весьма мощный инструмент, среди возможностей которого можно отметить преобразование PDF-файлов в различные графические форматы. Это может пригодиться, если нужно, например, выводить их на веб-страницах в виде изображений.

Инструменты для решения особых задач печати документов и другие инструменты

Иногда нужно модифицировать PDF-файл в расчёте на то, что он будет определённым образом выведен на печать. Мы уже говорили, например, о том, как совмещать нечётные и чётные страницы документов, но есть и другие способы подготовки документов к печати:

  • pdfxup [32] — инструмент, задействующий возможности pdflatex и Ghostscript для размещения нескольких PDF-страниц (например — двух) на одной печатной странице.
  • pdfjam — использует LaTeX для размещения документов на страницах разных размеров или для вывода нескольких страниц документа на одной печатной странице.
  • pdfposter — умеет создавать печатные изображения огромных размеров на нескольких страницах, беря за основу одну страницу.

Если вы предпочитаете инструменты с графическим интерфейсом — можете взглянуть на PDFsam Basic [33]. А если вас интересует ПО для работы с PDF, написанное на Java — обратите внимание на Multivalent [34].

Итоги

В Linux существует множество способов решения одних и тех же повседневных задач. Это справедливо и для задач, связанных с PDF-документами. Но иногда самое сложное заключается не в том, чтобы решить задачу, а в том, чтобы найти инструмент, который идеально подходит под требования и стиль работы пользователя.

Чем вы пользуетесь для редактирования PDF-файлов в Linux?

Все переводы серии

Кунг-фу стиля Linux: удобная работа с файлами по SSH [2]
Кунг-фу стиля Linux: мониторинг дисковой подсистемы [3]
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep [4]
Кунг-фу стиля Linux: упрощение работы с awk [5]
Кунг-фу стиля Linux: наблюдение за файловой системой [6]
Кунг-фу стиля Linux: наблюдение за файлами [7]
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash [8]
Кунг-фу стиля Linux: великая сила make [9]
Кунг-фу стиля Linux: устранение неполадок в работе incron [10]
Кунг-фу стиля Linux: расшаривание терминала в браузере [11]
Кунг-фу стиля Linux: синхронизация настроек [12]
Кунг-фу стиля Linux: бесплатный VPN по SSH [13]
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы [14]
Кунг-фу стиля Linux: утилита marker и меню для командной строки [15]
Кунг-фу стиля Linux: sudo и поворот двух ключей [16]
Кунг-фу стиля Linux: программное управление окнами [17]
Кунг-фу стиля Linux: организация работы программ после выхода из системы [18]
Кунг-фу стиля Linux: регулярные выражения [19]
Кунг-фу стиля Linux: запуск команд [20]
Кунг-фу стиля Linux: разбираемся с последовательными портами [21]
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня [22]
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории [23]
Кунг-фу стиля Linux: PDF для пингвинов [1]

Автор:
ru_vds

Источник [35]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/366685

Ссылки в тексте:

[1] Image: https://habr.com/ru/company/ruvds/blog/567158/

[2] Кунг-фу стиля Linux: удобная работа с файлами по SSH: https://habr.com/ru/company/ruvds/blog/520752/

[3] Кунг-фу стиля Linux: мониторинг дисковой подсистемы: https://habr.com/ru/company/ruvds/blog/527238/

[4] Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep: https://habr.com/ru/company/ruvds/blog/527242/

[5] Кунг-фу стиля Linux: упрощение работы с awk: https://habr.com/ru/company/ruvds/blog/527244/

[6] Кунг-фу стиля Linux: наблюдение за файловой системой: https://habr.com/ru/company/ruvds/blog/528422/

[7] Кунг-фу стиля Linux: наблюдение за файлами: https://habr.com/ru/company/ruvds/blog/528430/

[8] Кунг-фу стиля Linux: удобный доступ к справке при работе с bash: https://habr.com/ru/company/ruvds/blog/528432/

[9] Кунг-фу стиля Linux: великая сила make: https://habr.com/ru/company/ruvds/blog/528434/

[10] Кунг-фу стиля Linux: устранение неполадок в работе incron: https://habr.com/ru/company/ruvds/blog/529828/

[11] Кунг-фу стиля Linux: расшаривание терминала в браузере: https://habr.com/ru/company/ruvds/blog/529836/

[12] Кунг-фу стиля Linux: синхронизация настроек: https://habr.com/ru/company/ruvds/blog/531088/

[13] Кунг-фу стиля Linux: бесплатный VPN по SSH: https://habr.com/ru/company/ruvds/blog/530944/

[14] Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы: https://habr.com/ru/company/ruvds/blog/529838/

[15] Кунг-фу стиля Linux: утилита marker и меню для командной строки: https://habr.com/ru/company/ruvds/blog/529840/

[16] Кунг-фу стиля Linux: sudo и поворот двух ключей: https://habr.com/ru/company/ruvds/blog/532334/

[17] Кунг-фу стиля Linux: программное управление окнами: https://habr.com/ru/company/ruvds/blog/532342/

[18] Кунг-фу стиля Linux: организация работы программ после выхода из системы: https://habr.com/ru/company/ruvds/blog/533336/

[19] Кунг-фу стиля Linux: регулярные выражения: https://habr.com/ru/company/ruvds/blog/533334/

[20] Кунг-фу стиля Linux: запуск команд: https://habr.com/ru/company/ruvds/blog/536958/

[21] Кунг-фу стиля Linux: разбираемся с последовательными портами: https://habr.com/ru/company/ruvds/blog/544512/

[22] Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня: https://habr.com/ru/company/ruvds/blog/568302/

[23] Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории: https://habr.com/ru/company/ruvds/blog/568308/

[24] PDFEscape: https://www.pdfescape.com/

[25] редактор: https://sourceforge.net/projects/pdfedit/

[26] документацию: http://qpdf.sourceforge.net/files/qpdf-manual.html

[27] PDFtk Server: https://www.pdflabs.com/tools/pdftk-server/

[28] Pandoc: https://pandoc.org/MANUAL.html

[29] ps2pdf: https://web.mit.edu/ghostscript/www/Ps2pdf.htm

[30] poppler-utils: https://poppler.freedesktop.org/

[31] Ghostscript: https://www.ghostscript.com/

[32] pdfxup: http://manpages.ubuntu.com/manpages/bionic/man1/pdfxup.1.html

[33] PDFsam Basic: https://pdfsam.org/pdfsam-basic/

[34] Multivalent: http://multivalent.sourceforge.net

[35] Источник: https://habr.com/ru/post/567158/?utm_source=habrahabr&utm_medium=rss&utm_campaign=567158