bash - 我可以从命令行批量删除 pdf 中的链接吗?

标签 bash shell pdf uri qpdf

我正在下载一些 pdf 格式的报纸(供后代使用)。一个标题很痛苦,它在 pdf 本身中包含 URI 链接,如果您不小心单击这些链接,它会打开一个浏览器选项卡,指向一个 500 秒的页面。在台式电脑上还不错,但如果有人用平板电脑阅读它,那就麻烦了。每个问题都有大约 200 个这样的链接。

对于不同的标题,它就像使用 QPDF 一样简单,就像这样:

qpdf --qdf --object-streams=disable file temp-file

这会将临时版本置于 postscript 模式或其他模式,我能够用这样的东西来破坏链接:

s/obj\n<<\n(  \/A <<\n    \/S \/URI.+?)>>\nendobj/"obj\n<<\n" . " " x length($1). ">>\nendobj"/sge

这仍然有效。但是,15 兆的原始 pdf 现在变成了 108 兆的“固定”pdf。我可以接受一些臃肿,但 720% 有点荒谬(我认为其他标题更像是 10%)。每当我在谷歌上搜索如何执行此操作时,我都会得到 Acrobat Reader 的结果,以及如何在 20 个菜单中单击以执行此操作……没有人使用 Adob​​e 产品想要自动化这些东西吗?一个典型的问题有 180 到 300 个链接,分布在 45-150 页(星期日版)。

是否有任何工具可以做到这一点? qpdf 是否有任何巧妙的论据可以使这更合理?

PS 是的,我知道只用空格覆盖 URI 很麻烦,但我从来没有弄清楚如何完全删除对象,因为它们的引用也必须删除。

最佳答案

您可以使用 cpdf 的社区版执行此操作:https://community.coherentpdf.com/

要删除 PDF 中的所有链接(好吧,用空链接替换它们):

cpdf -replace-dict-entry /URI cpdfmanual.pdf -replace-dict-entry-value '""' -o out.pdf

这不会删除注释 - 它只是确保点击它们不会去任何地方。它保留了注释,但带有一个空链接。当然,您也可以替换为有效的 URL:

cpdf -replace-dict-entry /URI cpdfmanual.pdf -replace-dict-entry-value '"https://www.google.com/"' -o out.pdf

(您也可以使用 -replace-dict-entry-search 仅替换某些 URL - 请参阅手册。)

或者,如果您只想删除所有注释(链接和非链接):

cpdf -remove-annotations in.pdf -o out.pdf

关于bash - 我可以从命令行批量删除 pdf 中的链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73596596/

相关文章:

bash - 我无法在 docker bash 终端中执行 netcat 命令?

java - 使用应用程序发送多个 shell 命令

shell - 在 shell 脚本中检查 $HOSTNAME 的 if 语句

java - 在Java中重命名多个文件时如何使用不同的前缀?

java - 调整字符宽度后嵌入 PDFont

php - 使用 Composer 的 TCPDF hello world 示例

arrays - Bash 脚本数组到 csv

string - 为什么 $'\0' 或 $'\x0' 是一个空字符串?应该是空字符,不是吗?

bash - 如何在 Bash 脚本中使用 Expect

linux - 如何警告在 KornShell 脚本中使用未设置的变量。