Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов
Графические инструменты
Существует множество инструментов для редактирования PDF-файлов в Linux. Главная проблема тут — качество получаемого результата. Для редактирования PDF-файлов можно воспользоваться, например, LibreOffice Draw, Inkscape или даже GIMP. Эти инструменты, как правило, отлично справляются с простыми задачами, например — когда нужно лишь убрать что-то из документа, перекрыв это белым прямоугольником, или когда надо сделать в документе какое-то примечание. А вот если речь идёт о более сложных изменениях, или о получении документов, элементы которых выверены до последнего пикселя, то эти инструменты для решения таких задач вполне могут и не подойти.
Редактирование PDF-документа в GIMP
Основная сложность тут в том, что большинство подобных инструментов работают с PDF-документами как с изображениями, или, как минимум, как с коллекциями объектов. Например, текстовые колонки, вероятно, будут преобразованы в наборы отдельных строк. Изменение чего-либо, что вызывает переход текста на новую строку, приведёт к необходимости ручного изменения других строк. А иногда то, что выглядит как текст, текстом, на самом деле, не является. Текст может быть представлен изображениями. Это сильно зависит в первую очередь от того, как именно был создан конкретный PDF-файл.
Если вы не против использования онлайн-инструментов, то вам, в деле работы с PDF, может пригодиться PDFEscape — бесплатный и весьма достойный редактор. Среди других вариантов можно отметить Scribus и Okular. Оба эти инструмента, на самом деле, не умеют редактировать файлы, но могут импортировать их в виде изображений, с которыми уже можно работать. Например, в Okular, в режиме предварительного просмотра документов, можно добавлять в документы аннотации, вроде тех, которыми отмечают самое интересное, и элементы, нарисованные от руки.
Неудивительно то, что emacs умеет выводить PDF-файлы при запуске под X. Можно использовать Control+C Control+C для переключения на просмотр текстового представления файла. В конце концов, большинство PDF-файлов представляют собой файлы, содержащие текст, а emacs поддерживает даже работу с бинарными файлами. Поэтому, если вы не против поработать с внутренним содержимым PDF-файлов, которое очень похоже на PostScript, вы можете редактировать PDF-файлы в emacs или в каком-нибудь другом текстовом редакторе.
Существует несколько специализированных платных PDF-редакторов и как минимум один опенсорсный редактор такого рода. Но, конечно, как и для решения большинства задач в 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�����\0�� �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�\0�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�}�ْ{<\0ZW�:�Ȅ�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-файлы. Он может оптимизировать эти файлы в расчёте на их размещение в интернете или в расчёте на редактирование текста. Он умеет выполнять простые операции вроде удаления страниц или объединения фрагментов нескольких файлов. Вы можете взглянуть на документацию по нему. В вышеприведённом примере мы воспользовались режимом QDF для создания совершенно нормального PDF-файла, все объекты которого размещены в соответствии с их порядковыми номерами, в котором используется обычный для Unix способ завершения строк. Такие свойства выходных файлов упрощают их редактирование в обычных текстовых редакторах, но, как мы уже видели, это, всё равно, не такая уж и простая задача. Например, довольно-таки сложно удалить объект целиком, но если избавиться ото всех его упоминаний, то можно, воспользовавшись fix-qdf
, воссоздать нормальный QDF-файл.Ещё один способ выполнения простых правок PDF-документов предусматривает использование PDFtk Server (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, который позволяет преобразовывать материалы, оформленные с помощью одних языков разметки, в материалы, оформленные с помощью других способов описания документов. В частности, речь идёт о возможности преобразования практически всего чего угодно в PDF.
Ещё можно использовать различные комбинации ps2pdf (вместе с инструментом для генерирования PostScript-данных),
pdf2text
(этот инструмент входит в состав пакета poppler-utils) или Ghostscript для создания PDF-файлов или для извлечения из них текстовых данных. Надо сказать, что Ghostscript — это весьма мощный инструмент, среди возможностей которого можно отметить преобразование PDF-файлов в различные графические форматы. Это может пригодиться, если нужно, например, выводить их на веб-страницах в виде изображений.Инструменты для решения особых задач печати документов и другие инструменты
Иногда нужно модифицировать PDF-файл в расчёте на то, что он будет определённым образом выведен на печать. Мы уже говорили, например, о том, как совмещать нечётные и чётные страницы документов, но есть и другие способы подготовки документов к печати:
- pdfxup — инструмент, задействующий возможности pdflatex и Ghostscript для размещения нескольких PDF-страниц (например — двух) на одной печатной странице.
-
pdfjam
— использует LaTeX для размещения документов на страницах разных размеров или для вывода нескольких страниц документа на одной печатной странице. -
pdfposter
— умеет создавать печатные изображения огромных размеров на нескольких страницах, беря за основу одну страницу.
Если вы предпочитаете инструменты с графическим интерфейсом — можете взглянуть на PDFsam Basic. А если вас интересует ПО для работы с PDF, написанное на Java — обратите внимание на Multivalent.
Итоги
В Linux существует множество способов решения одних и тех же повседневных задач. Это справедливо и для задач, связанных с PDF-документами. Но иногда самое сложное заключается не в том, чтобы решить задачу, а в том, чтобы найти инструмент, который идеально подходит под требования и стиль работы пользователя.
Чем вы пользуетесь для редактирования PDF-файлов в Linux?
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов
Комментарии (26)
baldr
02.08.2021 17:09+7Работаю на фрилансе. У меня не так уж много каких-то своих правил, но есть одно важное: если в задаче нужно парсить pdf - БЕГИ!
Невидимые блоки текста. Перекрывающиеся блоки текста. Текст, который выглядит горизонтальным, но блоки букв вертикальные. Текст картинками. Чего я уже только там не видел, а результат заказчику нужен, поскольку уже (по-глупости) согласился.
Писать в pdf - немного проще. Из html можно сгенерировать более-менее отформатированный документ. Ну, конечно, стили там не такие как в браузере и внезапно может все поехать из-за слишком длинного поля..
Но открывается везде, да.
tmin10
03.08.2021 12:50Для текста и таблиц, наверное, OCR использовать проще. Пытался парсить банковские выписки в pdf, на выходе какая-то каша обычными методами.
yurybx
03.08.2021 15:44-1Пропарсите, пожалуйста документы по ссылке. Спасибо.
baldr
03.08.2021 20:17Во-первых, насколько я помню, документы для IRS (да, с ними я тоже работал) изначально идут в виде форм. Из PDF форм данные можно вытащить хоть через `PyPDF`. Ну и вообще хоть какие-то решения для "IRS PDF parse" но гуглятся.
А во-вторых - не буду.
yurybx
04.08.2021 16:46Это был сарказм. Вангую, рано или поздно кому-нибудь прилетит задача сделать парсер документов в формате видеоролика. Типа, у Васи нету сканера, нет времени, а документов много. Что делает Вася: берёт смартфон и снимает на видео каждый документ по-очереди (ведь так быстрее, чем фоткать). И отправляет видео-файл в бухгалтерию. А бухгалтер должен закинуть видео-файл в парсер, который импортирует информацию из всех отснятых документов. Надеюсь, Вам не будут сниться кошмары после прочтения этого комментария :)
baldr
04.08.2021 19:49На самом деле не такая уж и сложная задача. Здесь нам уже не важно что это pdf - это просто распознавание документов с фото. Видео нарезаем на фреймы, переводим в ч/б, поворачиваем и распознаем символы. Процент ошибок будет высоким, ну а вы как хотели.. Помнится, учавствовал в проекте по распознаванию чеков из магазинов - примерно то же самое.
Google translate уже давно переводит на лету с камеры, всяких AR-приложений тоже полно..
ciubotaru
02.08.2021 17:47Чем вы пользуетесь для редактирования PDF-файлов в Linux?
Inkscape. Инструмент, конечно, не идеальный, но и не уровня "закрыть белым прямоугольником", как то утверждает автор.
OnYourLips
02.08.2021 19:37А каким образом? Мне при открытии PDF он на выбор предлагает два вида импорта, а как файл просто на редактирование открыть — я не понял.
kudar
02.08.2021 20:47Естественным образом — никак. Inkscape конвертирует pdf в вектор (может быть даже не весь pdf, а отдельную страничку), его можно изменить, а потом сохранить как pdf, или еще что-то. Потом надо склеивать отдельные странички.
ciubotaru
03.08.2021 03:45Насколько я понимаю, формат pdf вообще не предназначен для редактирования и нативных редакторов не существует по определению. Так что да, Inkscape импортирует pdf (причём по странице за раз) и пытается представить его в удобном для редактирования виде. Векторную графику конвертирует на ура, растровые изображения оставляет как есть, а вот с текстовыми блоками беда...
OnYourLips
03.08.2021 03:46Да, не предназначен для нормального редактирования, но умеренно это можно делать в акробате. Для многих задач этого вполне хватает.
dzok
04.08.2021 14:36PDF создавался как формат для печати, для того чтоб на разных устройствах видимый результат был всегда одинаков. Редактировать его - бред, редактируется исходник и только он.
red_andr
02.08.2021 21:06задаться целью изменить слово «convention»
Причём просто так изменить всё равно не выйдет. Придётся ещё корректировать таблицу ссылок на объекты, так как смещения изменятся. Ну только если не менять это слово на другое такой же длины.
thegriglat
03.08.2021 01:00Мораль -- не делайте бинарных форматов
unsignedchar
03.08.2021 07:29+3Мораль: если вам нужно редактировать write only бинарный формат - значит, ваша жизнь в какой то момент свернула не туда.
quwy
04.08.2021 21:37Ну да, ну да. И видео/аудио давайте тоже в текстовых файалах хранить, а то вдруг нужно будет подредактировать, а ничего кроме vim нет.
remzalp
03.08.2021 07:31Inkscape вполне успешно импортит страницу из PDF в вектор и даже может сохранять в PDF.
Правда при правке некоторых текстовых блоков начинается магия, но для штучного удаления фрагментов - чудесно.
be9em0t
03.08.2021 12:02+3"Редактировать PDF несложно". Ну, по статье видно что 'редактировать' - понятие широкое.
Кстати, я все еще не уверен который из адобовских уродов причинил больше вреда - флэш или PDF. А вы как думаете?
ProgMiner
05.08.2021 19:47Тем не менее, в вопросах печати и передачи форматированного текста (когда важно то, как свёрстан документ) – ему нет равных.
Да и тот же флеш сильно двинул веб вперёд, хотя, может, и не в том направлении, в котором некоторым хотелось бы. Печально только то, что теперь мало чем можно его открыть, при том, что иногда попадаются старые SWF, созданные ещё во времена величия флеша.
Savevur
03.08.2021 15:32Чем вы пользуетесь для редактирования PDF-файлов в Linux?
Qoppa PDF Studio - Редактирование одной строки, блоками не видит.
Вопрос, как снять защиту от сохранения в Linux? Причем даже в том случае, когда я сам файл не редактировал, а только сделал свои непечатаемые пометки и выделение текста цветом, все равно защита не дает сохранить.
speakingfish
03.08.2021 18:00+2Очень странно. В статье про PDF ни разу не упомянут самый интенсивно развивающийся проект, связанный с PDF: Apache PDFBox
027
04.08.2021 14:16+2В ответ на набившую оскомину мантру «PDF не предназначен для редактирования, в вашей консерватории что-то не так!»
Для меня основная проблема этого чудовищного формата для распечатки на бумажку не редактирование, а банальное копирование текста. Зачастую в буфере рваный перемешанный текст.
Вторая проблема — чтение на смартфоне. Немасштабируемый текст, приходится елозить по увеличенной картинке, сплошное мучение, а не чтение.
dlinyj
Спасибо за перевод, очень актуальная информация. Достаточно часто приходится работать с PDF в Linux.
igor_carenko
Да, очень актуально. Что-то мелкое поправить в чертеже, или перевести пару страниц datasheet'а / инструкции. В основном пользуюсь Inkscape или LibreOffice Draw.
Из "проблемных" случаев:
иногда оба редактора вместо текстовых надписей при импорте вообще ничего не отображают;
попадаются файлы со странной кодировкой (привет 1251).
Пробовал для упомянутых случаев средства из статьи - не помогают :'(
pdfedit не удалось собрать (хочет qt3, который тоже не собрался)В виде растра Inkscape всегда нормально импортирует (как и GIMP). Но хотелось бы вектор...
И тут случайно попался на глаза pdf2svg - ну хоть как-то! Мой файл pdf преобразовался в svg корректно. По сути делает то же, что и "pdftocairo input.pdf -svg"
Заметил 2 специфических момента:
в векторную графику (в контуры, не текст!) преобразовывает всё (в т.ч. и текст);
иногда пропускает растровые картинки, оставляет пустое место;
P.S. Спасибо автору перевода за подталкивание к очередному поиску :)
P.P.S. из статьи пригодился pdftk - очень удобно вырезать отдельную страницу.
igor_carenko
Ошибся. Inkscape при "Импорте Poppler/Cairo" делает то же самое, импортирует весь pdf в векторные элементы.
Я не додумался их разгруппировать после импорта, думал, что импортируется растровая картинка, как в GIMP