如何以编程方式替换 PDF 中的图像(最好使用命令行)

问题描述 投票:0回答:1

我正在寻找一种方法来替换现有 PDF 文件中的图像(设置为模板)。

在一个完美的世界中,我可以在命令行上运行一个命令(linux或windows都可以,我不挑剔),但是,如果需要,我也可以使用脚本语言甚至完整的程序来实现一些东西此时(我有视觉工作室)。

老实说,我不敢相信要在某个地方找到这样的例子是多么困难。

我们运行的是带有 Cygwin 的 Windows,并拥有 Acrobat Pro XI 以及最初创建 PDF 文件的 Illustrator CS6。

本质上,我们正在寻找一种有效的方法来替换我们发送到印刷厂的 PDF 文件的图像。

pdf command-line acrobat
1个回答
0
投票

我成功地使用 pymupdf 进行了类似的操作。详细信息(和其他方法)在https://github.com/pymupdf/PyMuPDF/discussions/924#discussioncomment-7249686.

的线程中

TLDR(复制了我的评论):

加载文档和页面(取自 JorjMcKie 的评论):

doc = fitz.open("input.pdf")
page = doc[pno] # read the page at page number pno
img_list = page.get_images(full=True) # a list of all images on that page

然后:

p = fitz.Pixmap(doc, 6) # or whatever xref id
q = fitz.Pixmap(fitz.Colorspace(fitz.CS_RGB), p)  # can save jpg only in RGB format, this was DeviceCMYK
q.save("6-rgb.jpg")

现在用 Gimp 进行任何修改,然后加载修改后的内容

r = fitz.Pixmap("6-rgb-mod.jpg")
s = fitz.Pixmap(fitz.Colorspace(fitz.CS_CMYK), r)

A现在据称它会像

一样简单
page.replace_image(6, pixmap=s)

但也许我有一个较旧的 pymupdf,它在缺少 doc.is_image 时抛出异常(在较新的源中它是 doc.xref_is_image,所以可能已修复),所以我遵循了 Replace_image 的实现:

new_xref = page.insert_image(page.rect, pixmap=s)
doc.xref_copy(new_xref, 6)
last_contents_xref = page.get_contents()[-1]
doc.update_stream(last_contents_xref, b" ")

最后保存

doc.save("output.pdf", garbage=3, deflate=True)

用mutool检查,旧镜像仍然存在,但没有使用。因此,如果您想节省空间,这可能不是好的/完整的方法。但如果您想快速替换图像,保留其他视觉效果(例如打印),那么就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.