Intereting Posts
Почему ядро ​​3.6.2 намного менее энергоэффективно, чем 3.6.1 на Mint 13? Как установить параметры по умолчанию для htop? Менеджер графического архива, который использует / tmp откройте несколько каталогов из терминала в виде вкладок в окне одного файлового менеджера Добавление публичного is_rsa.pub в known_hosts автоматически – как? Проблема с попыткой фильтрации файла dat или csv на основе значений первого столбца с помощью awk? Проблема с установкой Chromium на libgl1-mesa-glx: i386 Как исправить «Нет такой секретной коллекции по пути: /» для gnome-keyring и Arch Linux? Установить переменную среды для всех сценариев входа Шифрование изображений обратной петли без использования петлевого устройства Как вы переименовываете корень? Двойная и тройная замена в bash и zsh Как использовать подстановочные знаки (*) при копировании с помощью scp? Как использовать запрос If-Else в зависимости от дня недели? Правила UFW, позволяющие выполнять определенное поведение

Как просмотреть и отредактировать код файла PDF

Мне было интересно, как просматривать и редактировать код PDF-файла?

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

  2. При редактировании я хотел бы искать /Fit и изменять их в /XYZ , например sed. Но моя команда sed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf кажется, не меняет внешний вид моего PDF-файла, как я ожидал, хотя он не сообщает об ошибке. Мне было интересно, может ли sed действительно работать с файлами PDF, как если бы они были простым текстом?

Контекст моих вопросов можно найти по этому вопросу . Моя ОС – Ubuntu 10.10.

Вы можете использовать sed с бинарными файлами (по крайней мере, GNU sed, некоторые реализации могут иметь проблемы с файлами, содержащими нулевые символы или не заканчивающимися символом новой строки). Но команда, которую вы использовали, заменяет только первое вхождение /Fit в каждой строке, а строки в тексте PDF практически не имеют смысла. Вам нужно заменить все вхождения:

  sed s/\/Fit/\/XYZ/g 

Было бы более надежным только заменить /Fit если за ним не последовало слово составляющее (например, не заменяя /Fitness , я не знаю, содержит ли ваш файл записи /Fit которые могут вызвать проблемы). Вот один из способов:

 perl -pe 's!/Fit\b!/XYZ!g' 

Что касается вашего 1-го вопроса («просмотр исходного кода, но не двоичного»): есть несколько вариантов, которые у вас есть, чтобы сжать внутренние двоичные потоки, которые привязаны ко многим объектам.

Мой любимый инструмент для этого – QPDF , доступный на всех основных платформах ОС. Следующая команда отменяет сжатие всех потоков и всех потоков объектов:

  qpdf --qdf --object-streams=disable orig.pdf expanded.pdf 

Теперь вы можете открыть PDF в любом текстовом редакторе. (Там могут быть некоторые бинарные капли: fe fontfiles и профили ICC, которые не имеют смысла для расширения QPDF).

Чтобы снова сжать expanded.pdf expand.pdf после редактирования, вы можете запустить:

  qpdf expanded.pdf orig2.pdf 

(Осторожно, когда вы вручную редактируете PDF-файлы! Вам нужно знать много о своем внутреннем синтаксисе, чтобы сделать это правильно. Как только вы добавляете или удаляете один байт, вы можете получать сообщения об ошибках от читателей PDF, которые больше не могут откройте его, потому что внутренний ToC PDF-файлов поврежден, что основано на вычислениях смещения байтов. Просто заменив Fit на строки XYZ должно быть хорошо, хотя …)

sed является ориентированным на линию, что делает его недостаточно подходящим для двоичных файлов, которые структурированы как блоки, а не линии.
Вместо этого попробуйте использовать bbe (bbe-.sourceforge.net).

Кроме того, как Emacs (GNU, так и XEmacs) и vim бесплатно открывают PDF-файлы. Конечно, это не очень красиво напечатанный текст, так как это смешанный текст и двоичный код, но этого достаточно для ваших целей редактирования.
Существует плагин Pdftk для vim, который делает все проще, загрузите здесь (zip-файл).
Как вы, наверное, знаете, оба редактора имеют мощные возможности поиска и замены.

Кроме того, конвертирование PDF в режим QDF до того, как упростить редактирование файлов PDF.

Используйте LibreOffice или OpenOffice, чтобы открыть PDF-файл, просмотреть его, заменить, написать новый PDF-файл и т. Д. Я думаю, что вы даже можете использовать его из командной строки или программно, если есть много документов для обработки.

Обратите внимание, что PDF-файлы из некоторых источников, например Scanners, часто содержат страницы как изображения, а не как текст, поэтому вам не повезет с ними для поиска и замены.