Создать или обновить PDF, чтобы включить зашифрованный, скрытый водяной знак?

Фон

Используя LaTeX, чтобы написать книгу. Когда пользователь покупает книгу, PDF будет создан автоматически.

проблема

PDF должен иметь водяной знак, который включает имя человека и контактную информацию.

Вопрос

Какое программное обеспечение соответствует следующим критериям:

  • Применяет зашифрованные, невидимые водяные знаки к PDF
  • Открытый исходный код
  • Независимость от платформы (Linux, Windows)
  • Быстро (отмечает 200 страниц PDF менее чем за 1 секунду)
  • Пакетная обработка (исключительно из командной строки)
  • Устойчивый к сговору
  • Не хрупкий (например, PDF -> EPS -> PDF по-прежнему содержит водяной знак)
  • Хорошо задокументировано (показывает пример использования)

Идеи и ресурсы

Некоторые мысли и выводы:

  • Обработка естественного языка (НЛП) водяными знаками.
  • Применить стеганографию на случайно выбранном изображении.
  • http://openstego.sourceforge.net/cmdline.html

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

Спасибо!

2 ответа

Решение

Я сделал нечто подобное несколько лет назад. Это не отвечало всем вашим "жестким" критериям. Это сработало так:

  • Я поместил едва различимую "кликабельную" область размером 2x2 точки в какое-то случайное место на одной из границ случайной страницы PDF. Маловероятно, что он был обнаружен случайно (среди множества других, очевидно, интерактивных горячих точек, которые все равно были в PDF...).

  • Если вы нажмете на ссылку, вы попадете на веб-страницу http://my.own.site/project/87245e386722ad77b4212dbec4f0e912, с некоторыми выдуманными пунктами "опечаток". (Я уже говорил, что 87245e386722ad77b4212dbec4f0e912 хэш MD5 имени человека + контактные данные, которые я хранил в таблице БД?:-)

Очевидно, что это не защищает от печати + сканирования + появления или от цикла "повторной обработки" PDF. И это также зависит от некоторой степени "безопасности по неизвестности".

Вот как вы используете Ghostscript, чтобы добавить такую ​​активируемую точку доступа в левый нижний угол страницы 1 файла random-in.pdf:

gs \
 -o random-out.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -c "[ /Rect [1 1 3 3]" \
 -c "  /Color [1 1 1]" \
 -c "  /Page 1" \
 -c "  /Action <</Subtype /URI" \
 -c "  /URI (http://my.own.site/87245e386722ad77b4212dbec4f0e912)>>" \
 -c "  /Subtype /Link" \
 -c "  /ANN pdfmark" \
 -f random-in.pdf

Чтобы сделать кликабельную область больше и заметнее, измените параметры командной строки, например:

 [....]
 -c "[/Rect [1 1 50 50]" \
 -c "  /Color [1 0 0]" \
 [....]

Еще проще было бы сгенерировать и сохранить MD5-хеш PDF в вашей базе данных. Он будет уникальным для каждого создаваемого вами PDF-документа из-за документов UUID и CreationDate и ModDate внутри его метаданных. Конечно, это также позволяет отслеживать только оригинальные PDF-файлы в цифровом виде...

Очень сложный, и я не уверен, что это ответит на все ваши вопросы.

Я не уверен в едином решении, которое может сделать это, или рандомизировать.

Однако, если бы мне это было поручено, я бы подумал, что самый простой способ - сохранить документ в промежуточном формате, таком как отформатированный HTML или аналогичный.

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

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

Когда вызывается эта ссылка для скачивания, она проверяет номер, выполняет операцию и компилирует в pdf, а затем загружает ее клиенту.

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

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