
背景
使用 LaTeX 寫書。當使用者購買該書時,將自動產生PDF。
問題
PDF 應包含浮水印,其中包含人員姓名和聯絡資訊。
問題
哪些軟體符合以下標準:
- 將加密的、不可見的浮水印套用到 PDF
- 開源
- 獨立於平台(Linux、Windows)
- 快速(在 1 秒內標記 200 頁 PDF)
- 批次(僅命令列驅動)
- 抗共謀攻擊
- 非脆弱(例如,PDF -> EPS -> PDF 仍包含浮水印)
- 有據可查(顯示範例用法)
想法與資源
一些想法和發現:
- 自然語言處理 (NLP) 浮水印。
- 對隨機選擇的圖像應用隱寫術。
- http://openstego.sourceforge.net/cmdline.html
NLP 的問題是可能會引入語法錯誤。隱寫術的問題在於圖像源自圖像緩存,因此使用帶有浮水印的圖像重新創建該緩存會在生成PDF 時產生延遲(我可以只從緩存中刪除一張圖像,但這不是一個優雅的解決方案) 。
謝謝你!
答案1
幾年前我也做過類似的事。它不符合您所有的“硬”標準。它的工作原理是這樣的:
我在隨機 PDF 頁面邊界之一的某個隨機位置放置了一個幾乎無法檢測到的 2x2 點大小的「可點擊」區域。它不太可能是偶然發現的(無論如何,在 PDF 中還有其他非常明顯可點擊的熱點中...)。
如果您單擊該鏈接,它將帶您進入一個網頁
http://my.own.site/project/87245e386722ad77b4212dbec4f0e912
,其中包含一些虛構的“勘誤表”要點。 (我有沒有提到這87245e386722ad77b4212dbec4f0e912
是我保存在資料庫表中的人名 + 聯絡資料的 MD5 雜湊值?:-)
顯然,這並不能防止列印+掃描+OCR 或 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 雜湊值並將其保存在資料庫中。由於文件 UUID 以及其元資料中的 CreationDate 和 ModDate,您建立的每個 PDF 都具有唯一性。當然,這也只允許追蹤數位形式的原始 PDF...
答案2
非常困難,我不確定這是否能回答您所有的問題。
我不確定是否有一種一體式解決方案可以做到這一點或隨機化。
但是,如果我承擔此任務,我認為最簡單的方法是將文件保留為中間格式,例如格式化 HTML 或類似格式。
使用列印 CSS 檔案或類似文件,您可以獲得與書籍相同的佈局,並使用某種腳本來隨機化圖片、內容或任何內容,以及將文件組裝回來的伺服器端 PDF 元件。
那麼-例如,當有人購買該文件時,您的購買腳本可以隨機選擇一個標識保護機制的數字(例如第一張圖片、第二張圖片、某處的文字等),然後產生唯一的下載鏈接。
當該下載連結被呼叫時,它會檢查號碼,執行操作並編譯為 pdf,然後將其下載到客戶端。
再說一次,我知道這並不容易/直接,但你並不是要求一些容易的事情,這是我能想到的最好的方法。