【问题标题】:Ghostscript: Convert PDFs to other filetypes without using the filesystemGhostscript:在不使用文件系统的情况下将 PDF 转换为其他文件类型
【发布时间】:2014-04-24 00:24:36
【问题描述】:

我想在 Linux 上使用 C API 到 Ghostscript 将 PDF 转换为其他内容:页面和图像较少的 PDF 就是两个例子。

我的理解是通过使用 gsapi_set_stdio 提供回调函数,我可以从中读取和写入数据。但是从我的实验和阅读来看,情况似乎并非如此。

我这样做的动机是我将大规模处理 PDF,并且不希望我的吞吐量被旋转磁盘阻碍。

我错过了什么吗?

【问题讨论】:

    标签: linux pdf ghostscript


    【解决方案1】:

    stdio API 允许您为 stdin、stdout 和 stderr 提供自己的替换,它不会影响不使用这些的解释器的任何活动。

    pdfwrite 设备广泛使用文件系统来写入临时文件,这些文件在解释时保存 PDF 文件的各个中间部分,然后将这些中间部分重新组合成新的 PDF 文件。临时文件不会写入 stdout 或 stderr。

    没有办法避免这种行为。

    渲染到图像再次使用文件系统,除非您将 stdout 指定为位图的目标,在这种情况下,您可以使用 stdio API 调用将 stdout 重定向到其他地方。如果图像以足够高的分辨率呈现,则 GS 将使用显示列表,并且显示列表将再次存储在不受 stdio 重定向影响的临时文件中。

    【讨论】:

    • 感谢您的信息。我注意到 poppler 确实支持reading a PDF document from memory,但仅支持 GPL。
    • 您可以使用 ram 文件系统 (ramfs) 通过 Ghostscript 将 PDF 加载到内存中,但我非常怀疑这会为您带来很多性能,并且显然会耗尽内存。
    • 另外,Ghostscript 是 AGPL 还是商业的,你需要什么样的许可证?
    • Ghostscript 可以获得许可,链接到 GPL 代码 (afaik) 意味着您的代码也必须是 GPL 的。我可能会走 RAMfs 路线 - 如果有很多随机访问(旋转磁盘上 100 毫秒),我看不出它为什么不能提供性能提升。
    • 是的 Ghostscript 具有商业许可证以及 AGPL。您是正确的,Affero GPL 与常规 GPL 一样,需要您对源代码进行 GPL。请注意,Ghostscript 中的 ramfs 支持是非常新的,如果您想试用,则需要使用最新版本。
    猜你喜欢
    • 2012-10-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2022-07-01
    • 2014-11-20
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多