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

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

Фон

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

Проблема

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

Вопрос

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

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

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

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

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

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

Спасибо!

решение1

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

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

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

Очевидно, что это не защищает от печати+сканирования+ocr-ing или от цикла "перерисовки" PDF. И это также полагается на некоторую степень "безопасности через неизвестность".

Вот как использовать Ghostscript для добавления такой интерактивной области в нижний левый угол первой страницы файла 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 в их цифровой форме...

решение2

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

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

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

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

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

При вызове этой ссылки для загрузки она проверяет номер, выполняет операцию и компилирует в PDF-файл, а затем загружает его клиенту.

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

Связанный контент