用于在 PDF 上搜索和替换文本的命令行工具

j0h*_*j0h 4 command-line pdf libreoffice

我有一个 PDF,在一个相当长的 PDF 文件中,我的名字是一个令人讨厌的水印。我尝试用空格替换 LibreOffice Draw 中的文本,但是虽然我的名字确实显示为文本,但查找和替换功能似乎让我的计算机占用了大量 RAM 和 CPU 时间。

是否有命令行方法可以从 PDF 中删除字符串?嗯……可以sed吗?

des*_*ert 7

由于在许多情况下它只是文本,您通常可以简单地使用sed或实际上任何文本编辑器将其删除- 假设它显示“水印”:

sed 's/watermark//g' in.pdf >out.pdf
Run Code Online (Sandbox Code Playgroud)

如果您的 PDF 文件被压缩,这不起作用,您需要先解压缩它,例如pdftk如何在 Ubuntu 18.04 及更高版本中安装 pdftk?):

pdftk in.pdf output out.pdf uncompress 
Run Code Online (Sandbox Code Playgroud)

如果sed您首选的 PDF 阅读器无法读取 的输出,请尝试使用以下方法修复它pdftk

pdftk out.pdf output out_pdftk.pdf
Run Code Online (Sandbox Code Playgroud)

进一步阅读:如何编辑 PDF?

来源:如何使用 pdftk 从 pdf 中去除水印 • 超级用户


Kur*_*fle 6

接受的答案仅在极少数情况下有效

抱歉,@dessert 给出的答案与一般建议一样错误。它不适用于 PDF 中文本替换的一般情况(有水印与否),并且您必须非常幸运地遇到非常罕见的 PDF 情况,如果它可以工作。(此外,LibreOffice 插入的水印经常被转换为矢量图形或像素图形,即使它们在打印或在屏幕上查看时看起来像文本......但这种情况我不会进一步讨论 - 下面我只处理真实的PDF 中的文本内容。)

原因

原因如下:

  1. 什么似乎是在其在PDF查看器内容的可视化表示ASCII文本,很可能不会是PDF源代码中的ASCII文本。相反,它可能是十六进制编码的。

  2. 此外,一个 ASCII 字符串的各个字符可能会以连续的顺序放置在页面上,但它们很容易单独放置,每个字符都有自己的坐标信息散布在各个字符之间......

  3. 此外,ASCII(和非 ASCII)字符表(“映射”)的十六进制编码是不可预测的,它可能会因字体而异。

因此,在所有这些情况下,您的 sed 命令都不会成功——即使在解压缩 PDF 之后也不会成功。

例子

这是“字符串” Watermark的示例,它如何出现在使用 LibreOffice 创建的 PDF 中:

56.8 726.989 Td /F2 16 Tf[<01>29<0203>-2<0405>6<06>-1<020507>]TJ
Run Code Online (Sandbox Code Playgroud)

我会为你剖析这意味着什么:

  • 56.8 726.989 Td:Td是在页面上移动文本定位的操作符;56.8 726.989是描述该确切位置的 x/y 坐标。

  • /F2 16 Tf:Tf是一个运算符,用于设置某种字体及其大小作为当前活动的字体;在这种情况下,它是用名称标记在别处的字体/F2,其大小应为16pt。

  • [<01>29<0203>-2<0405>6<06>-1<020507>]TJ:TJ是一个显示文本的运算符,同时允许单独的字形定位。根据特定于该 PDF 的“charmap”表和使用的字体,由尖括号括起来的十六进制片段的含义如下:

    • <01>: 这是'W'

    • <0203>: 这是'at'

    • <0405>: 这是'er'

    • <06>: 这是'm'

    • <020507>: 这是'ark'

    在这些十六进制代码段之间的数字(29-26-1)是决定不同的字符的各个间距的修正值。

现在,您向我展示如何使用其他内容替换该“字符串” sed... 请记住,当您处理任意 PDF 时,您事先不知道编码,也不知道位置更正编号。您只能通过在编辑器中打开其源代码并分析其内容来找出答案。

执行摘要

不,没有命令行方法可以可靠地从 PDF 中删除不需要的字符串!

您只能在以下情况下执行此操作...

(a) ...您是一位熟练阅读PDF源代码的PDF专家;

(b) ...您已准备好单独分析有问题的 PDF 文件;

(c) ...您在解压 PDF 源代码后使用文本编辑器修改其内容。

警告:当前标记为“已接受”的答案可能适用于 OP 的特定 PDF。但是,它在一般情况下不起作用。不要认为它宣传的“食谱”是理所当然的!