Как обрезать поля PDF с помощью pdftk и / MediaBox

Я pdftk чтобы распаковать PDF, а затем открыть его в виде текстового файла.
Я хочу отредактировать /MediaBox поле, которое в моем случае

/MediaBox [0 0 612 792]

Я хотел бы уменьшить маржу, например

/MediaBox [100 0 512 792]

к сожалению, это не работает. Я могу изменить 0 на 2 или 9 но я не могу поставить 100 например.

есть идеи почему?

3 ответов


использовать sed заменить любой возникновения

sed 's/MediaBox \[0 0 612 792*/MediaBox \[100 0 512 792]/g'<in.pdf >out.pdf

или podofobox (внутри podofo утилиты)

без распакуйте PDF streams first (при необходимости с pdftk)

podofobox in.pdf out.pdf media 10000 0 51200 79200

Как вы можете видеть, podofobox использует Значения MediaBox умножаются на 100, так как его масштаб является кратным sub, поэтому вам нужно просто добавить два нуля (00) к значениям, которые вы можете прочитать в поле MediaBox


строка 100 имеет еще два числа, чем 0. Когда вы используете текстовый редактор и добавляете символы, это делает файл длиннее. Вот почему замена на 9 или 2 или любую другую одну цифру работает нормально. Хотя текстовый редактор теоретически может использоваться для редактирования pdf, это не просто, и вы должны уважать внутреннюю структуру файла. Таблица xref-это таблица в конце pdf-файла, которая точно сообщает читателю, где находится каждый объект. Он должен быть изменен всякий раз, когда длина или расположение чего-либо меняется.

причина ручного метода выше с помощью pdftk не работает, что вы добавляете два байта в центр файла. Это нарушает xref таблица. Если вы вручную обновите все xrefs, это будет работать, но это потенциально очень утомительно. Используя sed или любой другой инструмент для редактирования текста не решит проблему. podofo тут xref расчет для вас.


есть лучшие способы изменить маржу PDF:

надеюсь, вы нашли ответ на это с момента публикации : -)