如何使用 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?