Как удалить водяной знак из PDF с помощью pdftk?

Мне нужно удалить некоторые глупые водяные знаки электронной почты, которые распространяются на все страницы публичной книги. Я посмотрел справочную страницу pdftk и некоторые примеры, но все еще не могу понять, как удалить водяные знаки. Я ценю ваши намеки.

4 ответа

Решение

Очень простая задача для выполнения:

используйте sed:

 sed -e "s/watermarktextstring/ /g" <input.pdf >unwatermarked.pdf

но, после, обязательно исправьте полученный вывод pdf

pdftk unwatermarked.pdf output fixed.pdf && mv fixed.pdf unwatermarked.pdf

все в одну команду:

 sed -e "s/watermarktextstring/ /g" <input.pdf >unwatermarked.pdf && pdftk unwatermarked.pdf output fixed.pdf && mv fixed.pdf unwatermarked.pdf

текстовые водяные знаки - это не что иное, как текст между двумя тегами внутри сжатого кода PDF

Просто небольшое дополнение к ответу Динго, так как оно не сработало для меня:

Сначала мне пришлось распаковать документ PDF, чтобы найти водяной знак и заменить его на sed, Первый шаг заключается в распаковке документа PDF с использованием pdftk:

pdftk original.pdf output uncompressed.pdf uncompress 

теперь uncompressed.pdf можно использовать как в ответе Динго:

sed -e "s/watermarktextstring/ /" uncompressed.pdf > unwatermarked.pdf

Затем я отремонтировал и снова сжал документ:

pdftk unwatermarked.pdf output fixed.pdf compress

Еще одно дополнение к дополнению Филиппа к ответу Динго...

Водяной знак, который мне нужно было удалить, представлял собой объект потока (который представляет собой многострочный блок кода), а не одну строку, поэтому однострочная команда sed мне не подошла.

Мне пришлось использовать текстовый редактор, чтобы найти и удалить его.

Сначала я использовал решение Филиппа для распаковки PDF-файла.

Затем, открыв несжатый файл .pdf в моем любимом текстовом редакторе, я обнаружил блок текста длиной более 50 строк, который, как я мог видеть, явно был кодом водяного знака.

Водяной знак был включен в документ как объект потока PDF. ** (см. ниже)

Строки, определяющие объект потока, который мне нужно удалить, начинаются со строки, содержащей только:

      <num> 0 obj

где<num>было числом в начале строки, идентифицирующим конкретный объект.

Мне нужно было удалить эту строку и все, начиная с нее, включая первый экземпляр

      endstream
endobj

это следовало за этой строкой obj. т.е. все определение объекта потока.

За строкой endobj следовала следующая<num> 0 objЕще 2 строки вниз.

Мне было легко увидеть, какой объект потока был кодом водяного знака, потому что он любезно включал слово «Водяной знак» :-)

У вас вполне может не быть такого полезного текста, но если вы терпеливы:

  1. Создайте резервную копию исходного несжатого PDF-файла.

  2. Сделайте временную копию несжатого PDF-файла.

  3. Найдите и удалите поток объектов из временной копии.

  4. Сохраните изменения во временной копии.

  5. Откройте временную копию в программе просмотра PDF-файлов.

  6. Проверьте, был ли поток объектов, который вы только что удалили, водяным знаком.

Если это не так, вернитесь к шагу 2, промойте и повторяйте удаление нового объекта каждый раз, пока не удалите объект с водяным знаком.

** Я узнал об объектах потока, в том числе увидел примеры, выполнив поиск по запросу «поток объектов PDF» в Интернете. https://blog.didierstevens.com/2008/05/19/pdf-stream-objects/ содержит отличное резюме и «Главу 1. Синтаксис PDF» из книги «Разработка с помощью PDF» Леонарда Розентола, которую можно просмотреть на Веб-сайт О'Рейли содержит более подробную информацию.

Удалить www.it-ebooks.info,

откройте PDF в notepad++ или textpad

заменить www.it-ebooks.info ничем (пусто)

сохранить файл

Открыть в стандартном Adobe Reader

Выход, вам будет предложено сохранить файл

сохрани это

Другие вопросы по тегам