Створити чи оновити PDF, щоб він включав зашифрований, прихований водяний знак?


10

Фон

Використання LaTeX для написання книги. Коли користувач придбає книгу, PDF буде генеруватися автоматично.

Проблема

PDF повинен мати водяний знак, який містить ім'я та контактну інформацію людини.

Питання

Яке програмне забезпечення відповідає наступним критеріям:

  • Застосовує зашифровані невидимі водяні знаки до PDF
  • Відкрите джерело
  • Незалежна платформа (Linux, Windows)
  • Швидкий (позначає PDF на 200 сторінках за 1 секунду)
  • Пакетна обробка (виключно за допомогою командного рядка)
  • Стійкий до нападу
  • Нестійкий (наприклад, PDF -> EPS -> PDF все ще містить водяний знак)
  • Добре задокументований (показує приклади використання)

Ідеї ​​та ресурси

Деякі думки та висновки:

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

Дякую!


Будь ласка, трохи змініть свій опис вимог, інакше вони будуть незрозумілими. "невизначені водяні знаки" явно не те, чого ви хочете ... в іншому випадку, як би ви самі їх виявили, якщо вам потрібно?
Курт Пфайфл

Трохи незрозуміло, яка саме мета вашої задуманої системи: виявити, чи PDF передається іншому користувачеві, хоча ваша ліцензія забороняє це? Визначте, чи PDF друкується на папері, навіть якщо ваша ліцензія забороняє це? Відстежувати шлях певного PDF через Інтернет та відстежувати його відкриття? Або щось інше?
Курт Пфайфл

@pipitas: Якщо зареєстрована версія PDF-файлу виходить без дозволу в дику природу, я хотів би знати, хто її випустив. Але якщо люди можуть побачити, що PDF має водяний знак, то водяний знак стає набагато простіше обійти.
Дейв Джарвіс

Відповіді:


6

Я робив щось подібне кілька років тому. Він не відповідав усім вашим "жорстким" критеріям. Це спрацювало так:

  • Я розміщував "клікабельну" ділянку розміром 2х2 пункту, що важко виявляється, на якомусь випадковому місці на одному з меж випадкової сторінки PDF. Це не дуже ймовірно, що його виявлять випадково (серед навантажень інших дуже очевидно доступних точок доступу, які все-таки були в PDF-файлі ...).

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

Очевидно, це не захищає від друку + сканування + роботи або від циклу "повторної переробки" у форматі PDF. І вона також покладається на певну ступінь "безпеки через незрозумілість".

Ось як ви використовуєте Ghostscript, щоб додати таку точку доступу, яку можна натиснути, у лівий нижній кут сторінки 1 випадкового введення.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 у вашій базі даних. Це буде uniq для кожного створеного вами PDF через документи UUID та CreationDate та ModDate всередині його метаданих. Звичайно, це також дозволяє лише відслідковувати оригінали PDF-файлів у їх цифровій формі ...


Ви коли-небудь знаходили PDF в природі і відслідковували його за допомогою цієї методики?
Дейв Джарвіс

@Dave Jarvis: Так, я так чи інакше ... Але це була не "серйозна" річ, я не мав реального інтересу до відстеження. Я зробив це лише як доказ концепції, і приблизно через 6 місяців я вимкнув веб-сервер "стеження". Це було для мережевого PDF-сервера, я створив всередині компанії замовника. "Трекер" був подібний до описаного вище, але використовував повну сторінку, на яку можна натискати. Я просто відстежував кількість "хітів" у файлі журналу apache ....
Kurt Pfeifle

Хороша ідея, але зауважте, що запуск GhostScript над таким PDF-файлом може погіршити будь-які зразки зображень, що містяться у ньому, оскільки GhostScript не підтримує їх розпакування (що втрачає інформацію із зображень, стиснених у вхідному форматі у форматі JPEG) і має тенденцію до застосувати стиснення у форматі JPEG до всіх зображень (навіть тих, які вони просто розпакували) ...
SamB

@SamB: Я думаю, ви можете додати -dJPEQ=100 -dQFActor=1.0до командного рядка Ghostscript, щоб переконатися, що ви збережете 100% існуючої якості JPEG. Але ні, я не помітив погіршення якості зображення у своїх файлах, якщо я використовував загальні параметри -dPDFSETTINGS=/prepressпри повторній перегонці будь-яких PDF-файлів за допомогою Ghostscript ....
Kurt Pfeifle,

[продовження] І ні, для зображень з Ghostscript пропонується не тільки стиснення JPEG - ви можете використовувати -dColorImageFilter=/FlateEncode(що не має втрат ZIP), щоб змінити типовий =/DCTEncode(який є втраченим JPEG) у старих версіях GS. Оскільки GS v7.21 за замовчуванням все =/FlateEncodeодно ... Те саме, що і для кольору, справедливо для -dGrayImageFilter=...( -dMonoImageFilter=...використовується /CCITTFaxEncodeза замовчуванням.)
Kurt Pfeifle

1

Дуже важко, і я не впевнений, що це взагалі відповість на всі ваші запитання.

Я не впевнений у рішенні "все в одному", яке може це зробити, або рандомизувати.

Однак, якби я поставив перед цим завдання, я думаю, що найпростіший спосіб - зберегти документ у проміжному форматі, такому як відформатований HTML або подібний.

Використовуючи CSS-файл для друку або подібний, ви можете отримати макет, який буде ідентичним книзі, і використовувати якийсь сценарій для рандомізації зображення, вмісту чи будь-чого та компонент PDF на стороні сервера, який збирає документ назад.

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

Коли це посилання для завантаження викликається, він перевіряє номер, виконує операцію і збирається в pdf, а потім завантажує його в клієнт.

Знову ж таки, я знаю, що це буде непросто / прямо вперед, але ви не просите про щось легке, і це найкращий спосіб, який я можу придумати.


@Dave Jarvis - Я повністю розумію, що ти намагаєшся зробити ... як я вже сказав, я не впевнений, що найкраще рішення, але те, що я сказав, має принаймні працювати ... просто далеко не просто.
Вільям Гілсум

@Dave Jarvis - Те, що я намагався сказати / перетнути, - це те, що я ніколи не бачив все в один / простий спосіб робити те, що ти хочеш, але за допомогою PHP / ASP.Net простіше писати сценарії / дзвонити третій стороні компоненти. Я думаю, що якщо у вас весь документ у форматі HTML правильно / точно, було б дуже легко використовувати компонент PDF для перетворення .... Наприклад, скажімо, що на сторінці 31 стоїть 100 сторінок і зображення. можуть бути сторінки 1-30 як PDF, а сторінки 32-100 як PDF, сторінка 31 буде генерована та відформатована у HTML (у стилі решти книги), тоді ви можете використовувати 1/2
William Hilsum

компонент pdf, який отримає перший PDF, приховає HTML-сторінку, отримає другий PDF та створить новий pdf, поєднуючи все це. Створена сторінка може викликати сценарії, виконувати стеганографію (не впевнені у дієслові!) Або все, що завгодно ... Є багато (безкоштовно і платити) компонентів PDF - це один, наприклад, ... komponeone.com/SuperProducts / PDF Я сподіваюся, що це робить трохи зрозумілішим те, що я намагаюся натрапити - просто дуже важко пояснити. 2/2
Вільям Гілсум

@Dave Jarvis - так, не зовсім так ... Як я вже сказав, важко пояснити .... Деякі компоненти PDF дивовижні разом із стилями CSS / print. Наприклад, подивіться на Moodle. Можна повністю відформатувати веб-сторінку і зробити друк схожим на книгу / слідувати стилю. Потім ви можете використовувати компонент PDF для експорту / збереження ТОЧНО, як це має виглядати кінцевий результат. Ви можете легко генерувати потрібний вам малюнок і мати текст, а також збирати його (без проблем до кінцевого користувача) як єдиний PDF-файл. Я просто згадую web / php / asp.net, оскільки вважаю, що це найпростіший спосіб дістатися до того, що ви хочете.
Вільям Гілсум

@Dave Jarvis: Я думаю, ви не використовуєте pdfTeX, тоді? (Або вас більше хвилювали користувачі, які роблять pdf-> ps-> pdf-конверсію та деградують зразкові зображення в процесі?). У всякому разі, ps-> Перетворення PDF робить зазвичай деградують зображення, так як GhostScript мало розумно , щоб зберегти зображення JPEG стилю в стислому вигляді, і , як правило, автоматично застосувати стиснення JPEG-стиль для будь-яких зображень , що виникають на вході. (Дистилеру, мабуть, можна доручити залишати зображення у форматі JPEG у спокої, але чи хтось насправді має таке?)
SamB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.