web-dev-qa-db-ja.com

PDFを生成または更新して、暗号化された隠し透かしを含めますか?

バックグラウンド

LaTeXを使用して本を書く。ユーザーが本を購入すると、PDFが自動的に生成されます。

問題

PDFには、人の名前と連絡先情報を含む透かしが必要です。

質問

次の基準を満たすソフトウェアはどれですか。

  • 暗号化された目に見えない透かしをPDFに適用します
  • オープンソース
  • プラットフォームに依存しない(Linux、Windows)
  • 高速(200ページをマークPDF 1秒未満で)
  • バッチ処理(コマンドライン駆動のみ)
  • 共謀-攻撃に強い
  • 壊れにくい(例:PDF-> EPS-> PDFまだ透かしが含まれています)
  • 十分に文書化されています(使用例を示しています)

アイデアとリソース

いくつかの考えと発見:

NLPの問題は、文法エラーが発生する可能性があることです。ステガノグラフィの問題は、画像が画像キャッシュから供給されていることです。そのため、透かしを入れた画像でそのキャッシュを再作成すると、PDF(キャッシュから1つの画像を削除できます)の生成時に遅延が発生します、しかしそれはエレガントな解決策ではありません)。

ありがとうございました!

10
Dave Jarvis

私は数年前に似たようなことをしました。それはあなたのすべての「難しい」基準を満たしていませんでした。それはこのように機能しました:

  • ランダムなPDFページの境界の1つにあるランダムな場所に、ほとんど検出できない2x2ポイントサイズの「クリック可能な」領域を配置しました。偶然に発見される可能性はほとんどありません( PDFとにかく...)にあった他の非常に明らかにクリック可能なホットスポットの負荷。

  • リンクをクリックすると、Webページに移動しますhttp://my.own.site/project/87245e386722ad77b4212dbec4f0e912、いくつかの「正誤表」の箇条書きがあります。 (私はそれについて言及しましたか87245e386722ad77b4212dbec4f0e912人の名前のMD5​​ハッシュ+私がDBテーブルに保存しておいた連絡先データでしたか? :-)

明らかに、これは印刷+スキャン+発生やPDF「再試行」サイクル」から保護するものではありません。また、ある程度の「隠すことによるセキュリティ」にも依存しています。

Ghostscriptを使用して、random-in.pdfのページ1の左下隅にこのようなクリック可能なホットスポットを追加する方法は次のとおりです。

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]" \
 [....]

さらに簡単なのは、データベースにPDFのMD5ハッシュを生成して保持することです。作成するPDF)ごとに一意になります。メタデータ内にUUIDとCreationDateおよびModDateを文書化します。もちろん、これは元のPDFをデジタル形式でのみ追跡することもできます。

6
Kurt Pfeifle

非常に難しいものであり、これがすべての質問に答えられるかどうかはわかりません。

これを実行できる、またはランダム化できるオールインワンソリューションについてはよくわかりません。

しかし、私がこれを任された場合、最も簡単な方法は、フォーマットされたHTMLなどの中間フォーマットでドキュメントを保持することだと思います。

印刷されたCSSファイルなどを使用して、レイアウトを本と同じにし、ある種のスクリプトを使用して、画像やコンテンツなどをランダム化し、サーバー側PDFドキュメントを組み立て直します。

したがって、たとえば、誰かがドキュメントを購入すると、購入スクリプトは保護メカニズムを識別する番号(たとえば、最初の画像、2番目の画像、どこかにあるテキストなど)をランダムに選択し、一意のダウンロードリンクを生成できます。

そのダウンロードリンクが呼び出されると、番号を確認し、操作を実行してpdfにコンパイルしてから、クライアントにダウンロードします。

繰り返しになりますが、これは簡単ではない/簡単ではないことはわかっていますが、簡単なことを求めているわけではなく、これが私が考えることができる最善の方法です。

1
William Hilsum