如何使用 Python Ghostscript 的高级接口将一个 .pdf 文件转换为多个 .png 文件?

Posted

技术标签:

【中文标题】如何使用 Python Ghostscript 的高级接口将一个 .pdf 文件转换为多个 .png 文件?【英文标题】:How do you use Python Ghostscript's high-level interface to convert a .pdf file into multiple .png files? 【发布时间】:2020-04-26 23:50:16 【问题描述】:

我正在尝试使用 Python 中的 Ghostscript 将 .pdf 文件转换为多个 .png 文件。这里的其他答案很老,因此这个新线程。

以下代码在 pypi.org 上作为“高级”接口的示例给出,我正在尝试按照下面的示例代码对我的代码进行建模。

import sys
import locale
import ghostscript

args = [
    "ps2pdf", # actual value doesn't matter
    "-dNOPAUSE", "-dBATCH", "-dSAFER",
    "-sDEVICE=pdfwrite",
    "-sOutputFile=" + sys.argv[1],
    "-c", ".setpdfwrite",
    "-f",  sys.argv[2]
    ]

# arguments have to be bytes, encode them
encoding = locale.getpreferredencoding()
args = [a.encode(encoding) for a in args]

ghostscript.Ghostscript(*args)

有人能解释一下这段代码在做什么吗?它可以以某种方式将 .pdf 转换为 .png 文件吗?

我是新手,我真的很困惑。非常感谢!

【问题讨论】:

【参考方案1】:

这显然是在调用 Ghostscript。从它没有产生进程的参数来看,它被链接(动态或静态)到 Ghostscript 库。

args 是 Ghostscript 参数。这些都记录在 Ghostscript 文档中,您可以在网上找到它here。因为它模仿命令行界面,其中第一个参数是调用程序,所以这里的第一个参数没有意义,可以是任何你想要的东西(正如评论所说)。

接下来的三个参数打开 SAFER(这可以防止一些潜在的危险操作,现在无论如何都是默认设置),设置 NOPAUSE 以便处理整个输入而不在页面之间暂停,并设置 BATCH 以便在完成时 Ghostscript 退出而不是返回交互式提示。

然后它选择一个设备。在 Ghostscript(由于 PostScript 语言)中,设备是实际输出的东西。在这种情况下,选择的设备是 pdfwrite 设备,它输出 PDF。

然后是OutputFile,你可能会猜到这是要写入输出的文件的名称(和路径)。

接下来的 3 个参数; -c .setpdfwrite -f 坦率地说是陈旧且毫无意义的。曾经在使用 pdfwrite 设备时推荐过它们(并且使用 pdfwrite 设备),但现在它们没有用处。

最后一个参数当然是输入文件。

当然,您可以使用 Ghostscript 将 PDF 文件渲染为 PNG。您想使用一种 PNG 设备,有几种取决于您想要支持的颜色深度。除非您有一些陌生的要求,否则请使用 png16m。如果您的输入文件包含多页,您需要将 OutputFile 设置为使用 %d,以便每页写入一个文件。

当然,可以在文档中找到有关所有这些的更多详细信息。

【讨论】:

以上是关于如何使用 Python Ghostscript 的高级接口将一个 .pdf 文件转换为多个 .png 文件?的主要内容,如果未能解决你的问题,请参考以下文章

python - 如何从子进程中运行的ghostscript命令中捕获错误

如何在 Python 中更改 Ghostscript 输出文件(在打印机后台处理程序中)

ghostscript 或 python:如何将不同页面大小的 pdf 组合成相同页面大小的 pdf?

无法导入ghostscript

在 Windows 8 上用 Python 导入 Ghostscript

Python Camelot / Ghostscript“错误的架构”错误