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

10

Фон

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

проблема

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

Вопрос

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

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

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

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

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

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

Спасибо!

Дейв Джарвис
источник
Пожалуйста, измените ваше описание требований немного, иначе они неясны. «необнаружимые водяные знаки» явно не то, что вы хотите ... в противном случае, как бы вы сами обнаружили их, если бы вам это было нужно?
Курт Пфайфл
Немного неясно, какова цель вашей задуманной системы: определить, передан ли PDF другому пользователю, даже если ваша лицензия запрещает это? Определить, напечатан ли PDF на бумаге, хотя ваша лицензия запрещает это? Отслеживать путь конкретного PDF через Интернет и отслеживать, когда он открывается? Или что-то другое?
Курт Пфайфл
@pipitas: Если зарегистрированная версия PDF будет выпущена без разрешения, то я бы хотела узнать, кто ее выпустил. Но если люди увидят, что в PDF есть водяной знак, тогда водяной знак становится намного легче обойти.
Дейв Джарвис

Ответы:

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-файлы в цифровом виде ...

Курт Пфайфл
источник
Вы когда-нибудь находили PDF в дикой природе и прослеживали его, используя эту технику?
Дэйв Джарвис
@ Дэйв Джарвис: Да, я сделал, в некотором роде ... Но это не было "серьезно", у меня не было никакого реального интереса к отслеживанию. Я сделал это только для проверки концепции, и примерно через 6 месяцев я отключил «отслеживающий» веб-сервер. Это было для сетевого PDF-сервера, который я настроил внутри компании клиента. «Трекер» был похож на тот, что описан выше, но использовал полноразмерную кликабельную область. Я только что отследил количество «хитов» в лог-файле Apache ....
Курт Пфайфл
Хорошая идея, но обратите внимание, что запуск GhostScript над PDF-файлом может привести к ухудшению качества любых сэмплированных изображений, которые он содержит, поскольку GhostScript не поддерживает их не распаковку (что приводит к потере информации из изображений, сжатых во входном формате в стиле JPEG) и имеет тенденцию к применить сжатие в стиле JPEG ко всем изображениям (даже к тем, которые были распакованы) ...
SamB
@SamB: Я думаю, что вы можете добавить -dJPEQ=100 -dQFActor=1.0в командную строку Ghostscript, чтобы убедиться, что вы будете поддерживать 100% качества JPEG. Но нет, я не заметил какого-либо ухудшения качества изображения в моих файлах, если использовал общую настройку -dPDFSETTINGS=/prepressпри перегонке любых PDF-файлов с помощью Ghostscript ....
Курт Пфайфл,
[продолжение] И нет, для изображений из Ghostscript предлагается не только сжатие JPEG - вы можете использовать -dColorImageFilter=/FlateEncode(это ZIP без потерь), чтобы переопределить стандартное =/DCTEncode(это JPEG с потерями) в старых версиях GS. Так как GS v7.21 по умолчанию =/FlateEncodeвсе равно ... То же, что и для цвета, верно для -dGrayImageFilter=...( -dMonoImageFilter=...использует /CCITTFaxEncodeпо умолчанию.)
Kurt Pfeifle
1

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

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

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

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

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

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

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

Уильям Хилсум
источник
@ Дэйв Джарвис - я полностью понимаю, что вы пытаетесь сделать ... как я уже сказал, я не уверен, что лучшее решение, но то, что я сказал, должно, по крайней мере, сработать ... просто далеко не просто.
Уильям Хилсум
@ Дэйв Джарвис - Я пытался сказать / донести до меня, что я никогда не видел все в одном / простом способе делать то, что вы хотите, но с помощью PHP / ASP.Net проще писать сценарии / вызывать сторонних разработчиков. компоненты. Я думаю, что если у вас есть весь документ в HTML, отформатированный правильно / точно, было бы очень легко использовать компонент PDF для преобразования .... Например, допустим, что на странице 31 есть 100 страниц и изображение, вы могут быть страницы 1-30 в виде PDF и страницы 32-100 в виде PDF, страница 31 будет сгенерирована и отформатирована в формате html (в стиле остальной части книги), затем вы можете использовать 1/2
Уильям Хилсум
Компонент PDF, который получит первый PDF-файл, закроет HTML-страницу, получит второй PDF-файл и создаст новый PDF-файл, объединяющий все это. Сгенерированная страница может вызывать сценарии, может выполнять стеганографию (не уверен в глаголе!) Или что-либо еще, что вы хотите ... Есть много (бесплатно и платно) компонентов PDF - это, например, один ... componentone.com/SuperProducts / PDF Надеюсь, это немного прояснит то, что я пытаюсь донести - просто очень сложно объяснить. 2/2
Уильям Хилсум
@ Дэйв Джарвис - да, не совсем ... Как я уже сказал, это очень сложно объяснить ... Некоторые компоненты PDF удивительны наряду со стилями CSS / печати. Например, посмотрите на Moodle. Можно полностью отформатировать веб-страницу и сделать распечатку похожей на книгу / следовать стилю. Затем вы можете использовать PDF-компонент, чтобы экспортировать / сохранять точно так же, как он должен выглядеть в конечном результате. Вы можете легко сгенерировать нужное вам изображение, получить текст и собрать его (без проблем для конечного пользователя) в один файл PDF. Я просто упоминаю web / php / asp.net, так как считаю, что это самый простой способ получить то, что вы хотите.
Уильям Хилсум
@ Дэйв Джарвис: Полагаю, вы не используете pdfTeX? (Или вы больше беспокоились о том, что пользователи выполняют преобразование pdf-> ps-> pdf и деградируют образцы изображений в процессе?). Во всяком случае, ps-> Преобразование PDF делает обычно деградируют изображения, так как GhostScript не достаточно умно , чтобы сохранить изображения JPEG стиля в сжатом виде, и , как правило, автоматически применить сжатие JPEG-стиль для любых изображений , возникающих на входе. (Очевидно, что Distiller можно поручить оставлять изображения в стиле JPEG в покое, но есть ли у кого-нибудь это на самом деле?)
SamB