Как удалить водяной знак из 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 строки вниз.
Мне было легко увидеть, какой объект потока был кодом водяного знака, потому что он любезно включал слово «Водяной знак» :-)
У вас вполне может не быть такого полезного текста, но если вы терпеливы:
Создайте резервную копию исходного несжатого PDF-файла.
Сделайте временную копию несжатого PDF-файла.
Найдите и удалите поток объектов из временной копии.
Сохраните изменения во временной копии.
Откройте временную копию в программе просмотра PDF-файлов.
Проверьте, был ли поток объектов, который вы только что удалили, водяным знаком.
Если это не так, вернитесь к шагу 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
Выход, вам будет предложено сохранить файл
сохрани это