如何从PDF文件中去除水印?

Apa*_*che 47 windows pdf pdfcreator documents watermark

我以为这将是一项简单的任务,但结果却相反。

每个页面上的水印都是相同(重叠但透明)的图像。我使用 PDFCreator 0.9.8 自己创建了 PDF 文件(所以这里没有版权问题)。

我已经尝试过我朋友的 Adob​​e Acrobat Pro,但是没有用。它试图删除它,但它不能。我试图删除页眉/页脚等,但水印不会消失。

我怎样才能去除水印?

Den*_*nis 78

对于基于图像的水印,有几种工具可以保证自动删除它们。例如:

所有这些都可以免费试用,但需要许可证才能实际生成所需的输出。

但是,这个特定 PDF 文件(OP 通过电子邮件发送给我)的水印不是在所有页面上重复的单个图像。事实证明,PDFCreator 将其(几乎逐个像素)硬编码到其中的每一个中。这使得水印更难去除(并导致 PDF 文件相当臃肿)。

由于水印实际上是由许多小图像组成,您可以使用 PDF 编辑器(例如Foxit Advanced PDF Editor)删除它们,只需选择它们并按Delete。不幸的是,您必须对每一页重复此操作。

一种耗时较少的解决方案是以编程方式去除水印。我们需要:

脚步

  1. 下载 Pdftk 并将pdftk.exelibiconv2.dll 解压缩到%windir%\System32、路径中的目录或您选择的任何其他位置。

  2. 下载并安装 Notepad++。

  3. PDF 流通常使用DEFLATE算法进行压缩。这节省了空间,但会使 PDF 的来源难以辨认。

    命令

    pdftk original.pdf output uncompressed.pdf uncompress
    
    Run Code Online (Sandbox Code Playgroud)

    解压缩所有流,因此它们可以被文本编辑器修改。

  4. 使用 Notepad++打开uncompressed.pdf以显示水印的结构。

    在这种特定情况下,每个页面都以块开头

    q 9 0 0 9 2997 4118.67 cm
    BI
    /CS/RGB
    /W 1
    /H 1
    /BPC 8
    ID Ÿ®¼
    EI Q
    
    Run Code Online (Sandbox Code Playgroud)

    和近 4,000 个区块一样。此特定块仅设置一个 ( /W 1 /H 1) 水印像素。

    向下滚动直到模式更改显示水印的流长度为 95,906 字节(计算换行符)。在 PDF 文件的每一页上都重复完全相同的流。

  5. Ctrl+H并设置以下内容:

    Find:               q 9 0 0 9 2997 4118\.67 cm.{95881}
    Replace:            (blank)
    Match case:         checked
    Wrap around:        checked
    Regular expression: selected
    . matches newline:  checked
    
    Run Code Online (Sandbox Code Playgroud)

    正则表达式q 9 0 0 9 2997 4118\.67 cm.{95881}匹配上述块( q 9 0 0 9 2997 4118.67 cm)的第一行和所有随后的95,881 个字符,即水印的流。

    单击全部替换可将其从 PDF 文件的所有页面中删除。

  6. 水印现已删除,但 PDF 文件有错误(流的长度不正确)并且未压缩。

    命令

    pdftk uncompressed.pdf output nowatermark.pdf compress
    
    Run Code Online (Sandbox Code Playgroud)

    兼顾两者。

  7. 不再需要uncompressed.pdf。你可以删除它。

结果是没有水印的相同 PDF(大约一半大小)。

  • 除了 `pdftk`,您还可以使用 `qpdf` 来解压缩和压缩 pdf 文件。命令:`qpdf --stream-data=uncompress original.pdf uncompressed.pdf` 和 `qpdf --stream-data=compress uncompressed.pdf nowatermark.pdf` (8认同)
  • 我发现另一个有用的技巧:我很难找出与我的 PDF 中的水印对应的块。所以我所做的只是从 PDF 中提取一个页面,理想情况下是一个只有水印而没有其他内容的页面。仅从这一页,应该更容易找出与水印对应的块。然后返回并为原始 PDF 执行此操作。 (4认同)
  • @hobs IIRC,我阅读了官方 [PDF 参考](http://www.adobe.com/devnet/pdf/pdf_reference_archive.html) 的部分内容来写这个答案。 (2认同)

Law*_*ceC 6

听起来水印实际上是 .PDF 中图像的一部分,而不是由您用来显示 .PDF 的任何内容渲染的单独图像。如果不从 .PDF 中提取图像,通过图像编辑器运行它们,然后手动重建 .PDF,您可能无法删除水印。


小智 5

对于文本水印,编辑 PostScript 版本会容易得多:

$ pdftops 文档.pdf

编辑 document.ps,然后通过以下方式转换回 PDF

$ ps2pdf 文档.ps

  • 如果您知道水印文本是什么,这里有一个单行。`pdftops in.pdf - | sed 's/水印//' | ps2pdf - out.pdf` (2认同)