7

Я хочу сделать противоположное OCR, я не хочу превращать изображения в текст, я хочу превратить весь текст в PDF в изображение, чтобы его нельзя было случайно выбрать и скопировать.

В Acrobat Pro это хорошо, но мне бы очень хотелось, чтобы я мог использовать что-то из командной строки Linux, так как у меня есть много этих PDF-файлов, и они в настоящее время находятся на веб-сайте. Если бы я мог внести это изменение на месте на сервере, это сэкономило бы мне часы загрузки, обработки, обработки в Acrobat, повторной загрузки, которая должна выполняться через интерфейс моей CMS, что очень медленно.

Так что если есть какой-нибудь инструмент PDF, который может сделать это легко, я могу использовать его из терминала, что было бы здорово.

3 ответа3

7

Я полагаю, что ваша цель состоит в том, чтобы сделать более трудным отбор и копирование текста из PDF. Потому что это единственная достижимая цель, которую вы можете поставить. (Если есть способ увидеть страницы PDF на экране, то есть способ каким-то образом получить доступ к тексту или содержимому изображения, хотя и более сложный, чем просто копировать и вставлять ... Я думаю, вы знаете об этом.)

У вас есть три варианта:

  1. Преобразуйте свои страницы PDF в полностраничные пиксельные изображения и снова оберните эти изображения в многостраничный PDF.
  2. Преобразуйте глифы всех встроенных шрифтов в векторные контуры.
  3. "Зашифруйте" свой PDF с помощью пароля пользователя.

Каждый из этих трех методов очень прост в применении, если использовать правильный инструмент. :-)

Для каждого из этих методов вы можете использовать инструмент свободного и открытого программного обеспечения в командной строке. (Каждый из этих инструментов доступен для Linux, Mac OSX, Unix или Windows.)

Более подробное обсуждение каждого метода приведено ниже.

1. Создание полностраничных пиксельных изображений (с помощью convert ImageMagick)

Вы можете использовать команду convert ImageMagick просто так:

 convert              \
   pdf-with-fonts.pdf \
   pdf-with-images.pdf

ImageMagick может напрямую работать только с растровыми изображениями, но не с любым другим форматом. Поскольку он не может обрабатывать PDF-файлы напрямую, он автоматически использует Ghostscript в качестве своего делегата. Следовательно, Ghostscript также должен быть установлен! Ghostscript создаст растровые изображения, необходимые для ввода в ImageMagick.

Вы можете наблюдать за процессом ImageMagick, используя Ghostscript в качестве фонового процесса, добавив ключ -verbose в командную строку.

По умолчанию convert будет использовать разрешение 72ppi. Это может быть недостаточно для хорошего чтения (но будет намного сложнее обойти вашу «защиту», применив программное обеспечение OCR к выходу).

Пиксельная страница PDF с 72 PPI при 600% увеличении

На изображении выше показан снимок экрана с пиксельной страницей PDF, созданной с разрешением по умолчанию (72 PPI), используемым ImageMagick при уровне масштабирования 600%. Если вам нужно лучшее разрешение, скажем, 200 PPI, добавьте параметр -density 200 в командную строку:

 convert              \
  -density 200        \
   pdf-with-fonts.pdf \
   pdf-with-images.pdf

Пиксельная страница PDF с 200 PPI при 600% увеличении

На изображении выше показан снимок (также с уровнем масштабирования 600%) страницы PDF в пикселях, созданной ImageMagick с более высоким разрешением 200 PPI.

Обратите внимание, что когда я тестировал указанную выше команду с разрешением по умолчанию 72 PPI, 219-страничный PDF со всем текстом и размером 1 МБ приводил к выходному файлу размером 23 МБ. Генерация заняла около 2 минут на MacBook. PDF 200ppi показал 110 МБайт и занял 11 минут, чтобы быть готовым ...

Обойти?

Пикселизацию страниц легко обойти, если разрешение достаточно хорошее: оптическое распознавание текста будет работать просто отлично. При низком разрешении он все еще может быть читаем (и угадан) для людей, но машинам трудно получить хорошие результаты распознавания.

2. Преобразовать все символы в векторные контуры (используя Ghostscript)

Вы можете использовать новейшую и самую последнюю версию Ghostscript. Это версия v9.15. Проверьте установленную версию с помощью gs -version .

Последняя версия v9.15 включает в себя новый параметр командной строки, --dNoOutputFonts. Этот параметр преобразует все формы глифов в контуры и удалит все встроенные шрифты:

gs                        \
 -o pdf-with-outlines.pdf \
 -sDEVICE=pdfwrite        \
  pdf-with-fonts.pdf

В моем тесте тот же самый PDF-файл на 219 страниц (размером 1 МБ) был преобразован в выходной файл размером 186 МБ, что заняло 6 минут.

Преимущество контуров в том, что текст страницы остается четким, четким и непиксельным, и вы можете увеличивать текст на любом уровне, не теряя резкости. Вы можете увидеть это на следующем скриншоте:

Векторизованный текст на странице PDF при увеличении 600%

Недостатком является размер файла. (Кстати, я протестировал тот же метод, конвертируя текст в контуры, с помощью Adobe Acrobat Pro XI, и в результате размер файла составил 61 МБ, что заняло 15 минут).

Обойти?

Эту меру легко обойти: OCR будет работать просто отлично.

3. Защитите PDF, зашифровав его (используя qpdf)

Что не так хорошо известно, так это то, что вы можете «защитить» или («зашифровать») PDF-файл с пустыми паролями (пароли «пользователя» и «владельца»). Это позволяет всем программам чтения / просмотра PDF открывать файл без запроса пароля, а только при появлении диалогового окна с паролем при попытке скопировать текст со страницы или при печати файла.

QPDF имеет довольно хорошую поддержку для этого:

qpdf                    \
  --encrypt  ""  ""  40 \
  --print=n             \
  --modify=n            \
  --extract=n           \
  --                    \
    uncrypted.pdf       \
    crypted.pdf

Что означают все эти параметры команды?

  • --encrypt "" "" 40:
       При этом пароли (пользователь и владелец) устанавливаются в пустую строку, а длина ключа - в 40 бит.

  • --print=n:
       Это отключает печать PDF.

  • --modify=n:
       Это отключает модификацию PDF.

  • --extract=n:
       Это отключает извлечение текста и изображений из PDF.

  • --:
       Это необходимо, чтобы сигнализировать об окончании параметров шифрования.

В QPDF доступно больше (и разных) подробных опций, если вы используете длину ключа 128 или 256 бит. Другие доступные опции включают --modify=[annotate|form|assembly] которая позволяет заполнять формы, добавлять аннотации или собирать документ с другими PDF-файлами (в то же время все еще не разрешая копировать или вставлять или печатать).

Эта команда

 qpdf --show-encryption crypt.pdf 

Покажет подробную информацию о настройках шифрования любого файла. Пример:

 extract for accessibility: not allowed
 extract for any purpose: not allowed
 print low resolution: not allowed
 print high resolution: not allowed
 modify document assembly: not allowed
 modify forms: allowed
 modify annotations: allowed
 modify other: not allowed
 modify anything: not allowed

«Защищенный» PDF с одним выбранным словом.Слева внизу: копирование запрещено.Внизу справа: печать запрещена.

Кстати: оставить пароль пустым в двух диалоговых окнах, показанных выше, не поможет (большинство? или все? не проверял ...) Просмотрщики PDF. Он по-прежнему не разблокируется для копирования или печати.

Преимущество этого метода заключается в его быстром выполнении и практически идентичном размере файла.

Обойти?

Конечно, так же легко снова удалить «шифрование»:

qpdf --decrypt crypted.pdf decrypted.pdf

4. Резюме

Для быстрых результатов, идентичных размеров файлов и легко удаляемой защиты от «случайного» выделения и копирования текста используйте «защита» /«шифрование» с пустым паролем.

Для получения медленных результатов и потенциально огромных размеров файлов (но не всегда хорошо выглядящих страниц) и немного больше работы для удаления защиты используйте пикселизацию для всех страниц.

Для еще более медленных результатов (но всегда лучше выглядящих страниц), а также для дополнительной работы по удалению защиты используйте метод векторного выделения текста для всего текста.

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

6

Похоже, вам лучше всего использовать ImageMagick для преобразования PDF-файлов в изображения любого типа из командной строки. Этот сайт предоставляет некоторые подробные сведения о том, как использовать PHP с ImageMagick для автоматизации этой задачи. Но на самом фундаментальном уровне этот сайт объясняет основы этого из командной строки терминала:

convert my_great_file.pdf my_great_file.png

Чтобы изменить формат вывода с PNG на JPEG, просто измените расширение файла с целевым именем файла следующим образом:

convert my_great_file.pdf my_great_file.jpg

Хитрость в вашем случае заключается в том, что вам нужно убедиться, что на вашем хостинге установлена программа ImageMagick. И если нет, то будут ли они готовы установить его. По моему опыту, ImageMagick является настолько часто используемым инструментом, что он должен быть там. Единственный потенциальный «уловка» - установка не была сделана со встроенной поддержкой PDF. Но это для вас, чтобы выяснить и иметь дело с.

Кроме того, если вы создаете отдельные файлы изображений из PDF-файла, достаточно легко создать новый PDF-файл только с такими файлами изображений:

convert *.jpg my_new_great_file.pdf

Кроме того, кажется, что convert может выполнять прямое преобразование PDF в PDF с растеризацией конечного продукта, просто выполнив это:

convert my_great_file.pdf my_new_great_file.pdf

Это дало бы PDF с растеризованным выводом с разрешением 72 dpi. При необходимости вы можете изменить это, используя опцию -density например:

convert -density 144 my_great_file.pdf my_new_great_file.pdf

Что позволит создать новый PDF-файл, состоящий из растровых изображений с разрешением 144 т / д.

3

Вы можете использовать pdftk:

pdftk input.pdf output protected.pdf owner_pw "secret" allow ScreenReaders

Это устанавливает пароль, отключая ModifyContents и CopyContents, но разрешая ScreenReaders.

Что-то, что не зависит от Java, будет qpdf, но у меня нет точного синтаксиса под рукой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .