从 PDF 文件中批量删除注释

And*_*rew 20 pdf batch ghostscript

如何轻松地从文件夹中的所有 PDF 中删除所有评论和注释(使用 Foxit Reader 添加)?

Uli*_*erg 11

我刚刚遇到了这个问题,这里给出的答案都不适合我。什么的工作是rewritepdf从Ubuntu的软件包工具libcam-pdf-perl

rewritepdf -C in.pdf out.pdf
Run Code Online (Sandbox Code Playgroud)

将其包装到一个小脚本中以从目录中的所有 pdf 文件中删除注释现在很容易:

for i in *.pdf; do rewritepdf -C '$i' '$i'.new; done
Run Code Online (Sandbox Code Playgroud)

像往常一样,您可以libcam-pdf-perl通过软件中心或使用sudo apt install libcam-pdf-perl


小智 5

如果您使用的是 Unix 系统:

cd <directory containing PDFs>
find . -type f -name '*.pdf' -exec perl -pi -e 's:/Annots \[[^]]+\]::g' {} +
Run Code Online (Sandbox Code Playgroud)

这是一个/Annots从 PDF中删除所有命令(绘制注释的命令)的 hack 。它将注释对象留在那里(您可以使用文本编辑器打开 PDF 并搜索它们),只是没有绘制它们。


rie*_*333 5

还没有对其进行大量测试,但以下似乎有效。它删除所有注释,除了内部文档链接(这里的答案似乎都没有这样做)。该脚本依赖于pdfrw python 库。

#!/usr/bin/python

import sys, pdfrw

try:
    in_path = sys.argv[1]
    out = sys.argv[2]
except:
    print("Usage:\tannotclean IN.pdf OUT.pdf")
    exit(0)

reader = pdfrw.PdfReader(in_path)

for p in reader.pages:
    if p.Annots:
        # See PDF reference, Sec. 12.5.6 for all annotation types
        p.Annots = [a for a in p.Annots if a.Subtype == "/Link"]

pdfrw.PdfWriter(out, trailer=reader).write()
Run Code Online (Sandbox Code Playgroud)

用法:

  1. 在某个地方保存为脚本(我假设在你的PATH),例如/usr/local/bin/annotclean
  2. annotclean in.pdf cleaned.pdf
  3. (可选)批量处理:
# fish shell syntax
for p in **pdf # pdfs from current directory and subdirectories
    annotclean $p $p.new
    mv $p.new $p # overwrite the old
end 
Run Code Online (Sandbox Code Playgroud)


Kur*_*fle 2

认为您可以通过“重新编译”PDF 来最轻松地做到这一点。转写的意思是:先将文件转换为PostScript,然后再将PostScript转换回PDF。通常重炸是不受欢迎的,因为通常你会失去质量和一些内容。在您的情况下,您想要丢失内容。可以使用Ghostscript来完成重新煎炸(以及附带的帮助批处理文件 -gs900w32.exe如果您使用的是 Windows,请下载),所以在这里,您可以使用 2 个简单的命令:

pdf2ps.bat input.pdf output.ps
ps2pdf.bat output.ps input_refried.pdf
Run Code Online (Sandbox Code Playgroud)

  • 如果注释确实添加到 PDF 内容中,则只能手动删除。实际的 PDF 注释是分开的。 (2认同)