10

Фон

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

проблема

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

Вопрос

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

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

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

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

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

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

Спасибо!

2 ответа2

6

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

  • Я поместил едва различимую "кликабельную" область размером 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-файлы в цифровом виде ...

1

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

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

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

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

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

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

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

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