我有一个 pdf 文件,每页都有一些文本,我想删除它们。
该文本与正则表达式匹配,我认为它出现在pdf的一个块中。
我已经使用 pdfedit 通过 GUI 选择和删除文本,但我正在寻找一种从终端执行此操作的方法。
答案1
你可以试试pdftk,但由于(我认为)字体问题,它只能在一小部分时间内起作用。
它的工作原理是这样的:首先你需要解压缩pdf文件,
pdftk myfile.pdf output unc.pdf uncompress
然后你用
sed 's/oldstring/newstring/g' < unc.pdf > mod_unc.pdf
最后你用
pdftk mod_unc.pdf output myfile_modified.pdf compress
我对这个命令的成功率并不高,有时候它会起作用,有时候则不起作用,这取决于它自己的意愿。
答案2
在 Windows(可能是虚拟机)上,您可以安装 PDF-XChange Editorhttps://www.tracker-software.com/product/downloads/enduser/pdf-xchange-editor
在免费版本中可以删除文本(但不能添加文本)而不添加水印(软件的水印,甚至软件也会告诉您)。
我不得不删除一些文本,因此sed
太耗时/费力,并且sed
无法处理变音符号。
答案3
inkscape 1.2 增加了对 (导入/导出) 的支持多页PDF 加上其良好的 pdf 对象支持,它完成了工作
答案4
要使用命令行删除 PDF 中的现有文本,您必须试图用空值或空格替换字符,以便将文本 XY 位置保持在其自包含的行中(PDF 中通常没有换行)。
如果字节数发生变化,则文件很可能会被破坏,因为它取决于字节偏移量的索引。此外,许多文本都是压缩的,因此不容易以纯文本形式找到。
由于上述所有原因,需要使用可以“修复”编辑后字节数的应用程序来解压缩字体。
因此 qpdf 采用 QDF 模式并修复了 QDF是经常提到的“去”答案。
对于添加文本,还存在其他问题。例如,已包含的字体字符可能不包含其字体中的所有字符子集。因此,新文本需要确保使用自己的字体。最简单的方法是在空白页上所需的 XY 位置上写新文本,然后用新字体包含的字符覆盖原始页面。
在将现有文本替换为空格字符后,使用 qpdf 也可以实现这一点。
如果 qpdf 方法效果不佳,您需要升级到完全由命令驱动的编辑器,例如 PyMuPDF 或基于 Java 的脚本编辑器,例如 Apache PDFBox。