Я полагаю, что ваша цель состоит в том, чтобы сделать более трудным отбор и копирование текста из PDF. Потому что это единственная достижимая цель, которую вы можете поставить. (Если есть способ увидеть страницы PDF на экране, то есть способ каким-то образом получить доступ к тексту или содержимому изображения, хотя и более сложный, чем просто копировать и вставлять ... Я думаю, вы знаете об этом.)
У вас есть три варианта:
- Преобразуйте свои страницы PDF в полностраничные пиксельные изображения и снова оберните эти изображения в многостраничный PDF.
- Преобразуйте глифы всех встроенных шрифтов в векторные контуры.
- "Зашифруйте" свой 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), используемым ImageMagick при уровне масштабирования 600%. Если вам нужно лучшее разрешение, скажем, 200 PPI, добавьте параметр -density 200
в командную строку:
convert \
-density 200 \
pdf-with-fonts.pdf \
pdf-with-images.pdf
На изображении выше показан снимок (также с уровнем масштабирования 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 минут.
Преимущество контуров в том, что текст страницы остается четким, четким и непиксельным, и вы можете увеличивать текст на любом уровне, не теряя резкости. Вы можете увидеть это на следующем скриншоте:
Недостатком является размер файла. (Кстати, я протестировал тот же метод, конвертируя текст в контуры, с помощью 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. Он по-прежнему не разблокируется для копирования или печати.
Преимущество этого метода заключается в его быстром выполнении и практически идентичном размере файла.
Обойти?
Конечно, так же легко снова удалить «шифрование»:
qpdf --decrypt crypted.pdf decrypted.pdf
4. Резюме
Для быстрых результатов, идентичных размеров файлов и легко удаляемой защиты от «случайного» выделения и копирования текста используйте «защита» /«шифрование» с пустым паролем.
Для получения медленных результатов и потенциально огромных размеров файлов (но не всегда хорошо выглядящих страниц) и немного больше работы для удаления защиты используйте пикселизацию для всех страниц.
Для еще более медленных результатов (но всегда лучше выглядящих страниц), а также для дополнительной работы по удалению защиты используйте метод векторного выделения текста для всего текста.
Всегда помните, что все эти методы не защищают содержимое ваших страниц PDF. Они только делают его более неудобным для извлечения.