如何使用 Imagemagick 替换单个 PDF 页面?

Posted

技术标签:

【中文标题】如何使用 Imagemagick 替换单个 PDF 页面?【英文标题】:How can I replace a single PDF page using Imagemagick? 【发布时间】:2021-02-19 17:57:30 【问题描述】:

我有一个多页的 PDF 文档,我想要一个文档版本,其中一个页面在中间,并带有扫描副本,因为我需要在文档中进行物理签名。如何使用 ImageMagick 做到这一点?我知道 ImageMagick 不一定是这项工作的最佳工具。但是,生成的 PDF 不需要是高质量或高保真副本,因此应该足以满足我的需求。

作为一个具体示例,我有一个 9 页 my-file.pdf,我想创建一个 PDF 副本,其中第 8 页替换为 page-8.png。看起来我应该能够使用convert 工具实现这个目标,尽管语法是什么还不是很明显。我怎样才能实现这个目标?

如果我只想将新页面附加到文件末尾,我知道我可以执行以下操作:

convert my-file.pdf page-8.png output-file.pdf

但是,这最终是原始页面 1-9,然后是新页面 8。我真正想要的是用新页面 8 替换原始页面 8。我想要的输出是:

[original pages 1 - 7],[new page 8],[original page 9]

【问题讨论】:

Close discussion 【参考方案1】:

正如问题和评论中所指出的,Imagemagick 不是这个任务的好工具,因为它光栅化了 PDF 的输出。避免这种情况的替代解决方案是使用pdftk 替换页面。虽然插入的页面仍然是图像,但被替换的页面不会被光栅化。

首先,使用具有此功能的应用程序将扫描的页面保存为 PDF。然后,使用 pdftk cat 操作合并 PDF:

pdftk A=my-file.pdf B=page-8.pdf cat A1-7 B A9 output output-file.pdf

【讨论】:

【参考方案2】:

可以使用括号语法和从零开始的索引来指定特定页面或页面范围。例如,[8] 将引用第九页,[0-6] 将引用前七页。使用它,可以实现替换第 8 页的 PDF 副本,如下所示:

convert my-file.pdf[0-6] page-8.png my-file.pdf[8] output-file.pdf

【讨论】:

Imagemagick 不保留矢量数据。输出将全部栅格化。它不会是所有的矢量页面,除了一个被替换的页面。输出中的所有页面都将被光栅化。如果这无关紧要,那么这个解决方案就可以了。

以上是关于如何使用 Imagemagick 替换单个 PDF 页面?的主要内容,如果未能解决你的问题,请参考以下文章

使用 imagemagick 将剪切/裁剪标记添加到 pdf

ImageMagick PNG到给定尺寸的PDF

如何在 C# 中使用 imageMagick

imagemagick 将 RGB PNG 转换为 CMYK PDF

如何在 Imagemagick 中禁用颜色转换

Imagemagick、雪豹和 PDF 转换