Мне было интересно, как просмотреть и редактировать код файла PDF?
При просмотре я не хочу видеть двоичный формат, поэтому я думаю, что
hexdump
это не то, что я хочу. Я пыталсяgedit
, но никакой метод кодирования не может быть использован для декодирования содержимого PDF.Редактируя, я хотел бы найти
/Fit
и изменить их/XYZ
, например, на sed. Но моя команда,sed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf
похоже, не меняет внешний вид моего PDF, как я ожидал, хотя и не сообщает об ошибке. Мне было интересно,sed
может ли на самом деле работать с файлами PDF, как если бы они были простым текстом?
Контекст моих вопросов можно узнать из этого вопроса . Моя ОС - Ubuntu 10.10.
!
,\b
иg
значит? Можно ли это сделать без perl только с помощью sed?g
означает заменить все вхождения в каждой строке, как в sed, так и в perl.!
является разделителем; Вы можете выбрать (почти) любой символ в качестве разделителя дляs
команды (это относится как к sed, так и к perl).\b
означает границу слова; он существует в perl, но не в sed.Относительно вашего первого вопроса («просмотр исходного кода, но не двоичного кода»): у вас есть несколько вариантов, чтобы распаковать внутренние двоичные потоки, которые прикреплены ко многим объектам.
Мой любимый инструмент для этого - QPDF , доступный на всех основных платформах ОС. Следующая команда распаковывает все потоки и все потоки объектов:
Теперь вы можете открыть свой PDF в любом текстовом редакторе. (Там все еще могут быть некоторые двоичные объекты: например, файлы шрифтов и профили ICC, которые не имеют смысла расширять QPDF).
Для того, чтобы повторно сжать
expanded.pdf
снова после редактирования, вы можете запустить:(Осторожно при ручном редактировании PDF-файлов! Вам нужно много знать об их внутреннем синтаксисе, чтобы сделать это правильно. Как только вы добавите или удалите один байт, вы можете получить сообщения об ошибках от читателей PDF, которые больше не смогут откройте его, потому что внутренний ToC PDF-файлов поврежден, что основано на вычислениях смещения байтов. Просто замена
Fit
наXYZ
строки должна проходить нормально, хотя ...)источник
fix-qdf
программы, которая является частью qpdf. Вы все еще должны быть немного осторожны, хотя. См. Qpdf.sourceforge.net/files/qpdf-manual.html#ref.qdffix-qdf
. Следовательно, если вы хотите заменить строку на строку другой длины, это возможно, но вам нужно использоватьfix-qdf
инструмент. Я бы сказал, что это полезное дополнение к ответу.sed
ориентирован на строки, что делает его не очень подходящим для двоичных файлов, которые структурированы как блоки, а не как строки.Попробуйте использовать bbe (bbe-.sourceforge.net).
Кроме того, Emacs (GNU и XEmacs) и vim без проблем открывают PDF-файлы. Конечно, это не очень красиво напечатано, так как это смешанный текст и двоичный файл, но этого достаточно для ваших целей редактирования.
Существует плагин Pdftk для Vim, который делает все проще, скачать здесь (ZIP-файл).
Как вы, наверное, знаете, оба вышеуказанных редактора имеют мощные возможности поиска и замены.
Кроме того, преобразование PDF в режим QDF до этого делает редактирование PDF-файлов действительно простым.
источник
sed
помощью-b
переключателя. если это сработает, я добавлю это к своему ответу.-b
, это специфично для Cygwin.Используйте LibreOffice или OpenOffice, чтобы открыть PDF-файл, просмотреть его, заменить, написать новый PDF-файл и т. Д. Я думаю, что вы даже можете использовать его из командной строки или программно, если нужно обработать много документов.
Обратите внимание, что PDF-файлы из некоторых источников, например, сканеров, часто содержат страницы в виде изображений, а не в виде текста, поэтому вам не повезет с ними при использовании поиска и замены.
источник