Инструмент командной строки, чтобы искать и заменить текст на PDF

У меня есть PDF, который имеет мое имя как неприятный водяной знак через довольно длинный файл PDF. Я пытался заменить текст в LibreOffice, Тянут с пробелами, но в то время как мое имя действительно появляется как текст, находка и заменяет функцию, кажется, заправляет мой компьютер, берущий значительную RAM и процессорное время, чтобы сделать.

Существует ли командная строка способ удалить строки из PDF? Хм... может sed это?

4
задан 25 December 2018 в 20:05

2 ответа

Поскольку во многих случаях это - просто текст, можно часто удалять его просто с sed или на самом деле любой текстовый редактор – скажем, это говорит “водяной знак”:

sed 's/watermark//g' in.pdf >out.pdf

Если Ваш файл PDF сжат, это не работает, необходимо распаковать его сначала, например, с pdftk (Как я могу установить pdftk в Ubuntu 18.04 и позже?):

pdftk in.pdf output out.pdf uncompress 

Если sedвывод не читаем с Вашим предпочтительным читателем PDF, попытайтесь восстановить его с pdftk:

pdftk out.pdf output out_pdftk.pdf

Дальнейшее чтение: Как отредактировать PDFs?

Источник: Как удалить водяной знак из PDF с помощью pdftk • Суперпользователь

7
ответ дан 23 November 2019 в 11:42

Принятый ответ будет работать только в редких случаях

Извините, ответ, данный @dessert, является так неправильным, как это могло быть как общие рекомендации. Это не будет работать на общий случай текстовой замены в PDFs (водяные знаки или не), и необходимо будет быть очень удачливыми для очень редких случаев PDFs, с которым Вы встречаетесь, было это, будет работать. (Кроме того, водяные знаки, вставленные LibreOffice часто, преобразовываются в векторную графику или растровую графику, даже если они появляются как текст при печати или просмотре на экране...., но этот случай, который я не буду обсуждать дальше - ниже, я имею дело только с реальным текстовым содержанием в PDF.)

Причины

Причины этого - они:

  1. Что, кажется, текст ASCII в визуальном представлении его содержания в средстве просмотра PDF, очень вероятно не будет текст ASCII в исходном коде PDF. Вместо этого это может быть закодированное шестнадцатеричное число.

  2. Кроме того, отдельные символы строки ASCII могли бы быть помещены на странице в последовательном порядке, но они могут легко быть размещены индивидуально с каждым имеющим его собственную координатную информацию, опрыснутую промежуточный отдельные символы...

  3. Кроме того, шестнадцатеричное кодирование ASCII (и неASCII) таблица символов ("отображение") не будет предсказуема, и это может измениться от шрифта до шрифта.

Следовательно во всех этих случаях Ваша команда sed не успешно выполнится - даже после распаковки PDF.

Пример

Вот пример для "строкового" Водяного знака, как это может появиться в PDF, созданном с LibreOffice:

56.8 726.989 Td /F2 16 Tf[<01>29<0203>-2<0405>6<06>-1<020507>]TJ

Я разделю для Вас, что это означает:

  • 56.8 726.989 Td: Td оператор состоит в том, чтобы переместить текстовое расположение на странице; 56.8 726.989 x-/y-coordinates должны описать что точное положение.

  • /F2 16 Tf: Tf оператор состоит в том, чтобы установить определенный шрифт, а также его размер как в настоящее время активный; в этом случае это - шрифт, отмеченный в другом месте с именем /F2 и его размер должен быть 16 pt.

  • [<01>29<0203>-2<0405>6<06>-1<020507>]TJ: TJ оператор состоит в том, чтобы показать текст, одновременно допуская отдельное расположение глифа. Значение шестнадцатеричных отрывков, включенных угловыми скобками, следующее, согласно 'charmap' таблице, специфичной для того PDF и используемого шрифта:

    • <01>: это 'W'.

    • <0203>: это 'at'.

    • <0405>: это 'er'.

    • <06>: это 'm'.

    • <020507>: это 'ark'.

    Числа, промежуточные эти шестнадцатеричные отрывки (29, -2, 6 и -1) значения исправления, которые определяют отдельные интервалы различных символов.

Теперь Вы показываете мне, как Вы заменили бы ту "строку" чем-то еще при помощи sed... Помните, Вы не знаете кодирование заранее, ни числа исправления размещения, когда Вы имеете дело с произвольным PDF. Можно только узнать путем открытия его исходного кода в редакторе и анализа его содержания.

Резюме

Нет, нет никакой командной строки способа надежно удалить нежелательные строки из PDF!

Можно только сделать это если...

(a)... Вы - эксперт PDF, который квалифицирован для чтения исходного кода PDF;

(b)... Вы готовы проанализировать рассматриваемый файл PDF индивидуально;

(c)... Вы используете текстовый редактор для изменения его содержания после распаковки исходного кода PDF.

ПРЕДУПРЕЖДЕНИЕ: ответ, в настоящее время отмечаемый, как 'принято', возможно, работал на определенный PDF OP. Однако это не будет работать в общем случае. Не берите "рецепт", о котором это помещает объявление предоставленный!

4
ответ дан 23 November 2019 в 11:42

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

Похожие вопросы: