生成或更新 PDF 以包含加密的隐藏水印?

生成或更新 PDF 以包含加密的隐藏水印?

背景

使用 LaTeX 编写一本书。当用户购买该书时,将自动生成 PDF。

问题

PDF 应该带有包含此人的姓名和联系信息的水印。

问题

哪些软件符合以下标准:

  • 将加密的、不可见的水印应用于 PDF
  • 开源
  • 独立于平台(Linux、Windows)
  • 快速(1 秒内即可标记 200 页的 PDF)
  • 批处理(仅由命令行驱动)
  • 抗合谋攻击
  • 非脆弱性(例如,PDF -> EPS -> PDF 仍然包含水印)
  • 记录详实(展示示例用法)

想法与资源

一些想法和发现:

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,然后将其下载到客户端。

再说一次,我知道这不会容易/直接,但你要求的并不是容易的事情,而这是我能想到的最好的方法。

相关内容