ghostscript 将 PPT 渲染成 PDF 的问题

Issue with ghostscript rendering PPT into PDF

我一直在用端口监视器(在 HP PCL 6 通用驱动程序上)修改 Ghostscript 以将打印作业转换为 PDF。我已经测试了一些应用程序,例如 Words、Excel、Adobe Reader、Microsoft Edge 等,它们都可以正常工作。 但是在测试Microsoft Powerpoint 2016时,似乎有些图形无法通过Ghostscript正确呈现。

实际幻灯片下方 下面以 PDF 格式从 Ghostscript 输出

我什至使用其他一些 PDF 生成器(例如 BioPDF、CutePDF 以及 Adob​​ePDF)对此进行了测试,它们都会产生与上述相同的输出。

想知道有没有人尝试过并遇到过类似的问题?如果可以,有人可以指出我正确的方向吗??

您所做的不是 PowerPoint 到 PDF 的一步,Ghostscript 也没有呈现 PowerPoint。事实上,如果您正在创建 PDF 文件,Ghostscript 不会(理想情况下)渲染任何东西。

实际情况是您要求 PowerPoint 打印到 canvas,然后将其传递给 PostScript 打印机驱动程序。这会生成发送到端口的 PostScript。您的(和其他人)端口监视器然后将 PostScript 发送到 'Distiller'(在您的情况下是 Ghostscript 和 pdfwrite 设备)。 Distiller 将矢量绘图命令重新格式化为 PDF 格式,并从中构建 PDF 文件。除非被迫,否则它不会渲染(变成位图图像)任何东西。

显然,沿着这条路有几个地方可能会出现问题。鉴于你说 Adob​​e 产品(你提到的其他产品都使用 Ghostscript)有同样的问题,我认为可以安全地假设问题不是 Ghostscript。

这也意味着您没有使用您认为的驱动程序。据我所知,Adobe 无法将 PCL 作为输入媒体处理,Ghostscript 也不能​​。 GhostPCL处理PCL作为输入,但这不是你所说的你正在使用的。

当然,您没有link查看示例文件来演示问题,也没有提供示例命令行,所以这都是假设。

现在,如果您 使用 PCL6 设备,那么问题很可能是由于输出中存在 rasterOps。 Rasterops 是 PCL 成像模型的一部分,它在 PDF 中不存在,是一种透明形式。 PDF 输出设备可以通过三种方式处理此类内容;首先将整个页面内容呈现为图像,其次忽略 rasterOps 对象,第三将 rasterOps 视为不透明。

GhostPCL和pdfwrite设备采用第三种方案。因此,可以想象您的原始内容有一些透明对象,这些对象被 PCL 打印机驱动程序处理为 rasterOps,然后被 GhostPCL 和 pdfwrite 设备呈现为不透明。

如果是这种情况,那么解决方案很简单;不要使用 PCL 打印机驱动程序,使用 PostScript 驱动程序。

如果您 post 将 link 发送到 Ghostscript 的(简单的,例如单页)示例和命令行,那么我可以查看它。请不要将 PowerPoint 发给我,我不能使用它,即使我可以,我的打印设置也不符合你的。我需要将数据发送到 Ghostscript。

[查看文件后编辑]

不要让我听起来像是在讲课,问题是人们在 Google 搜索中找到这些结果,然后基于对正在发生的事情的不了解而尝试应用它们。所以我发现最好在我的回答中清楚地说明正在发生的事情。稍后保存问题:-)

我看到的第一件事是 PCL 确实是 PCL,如果您通过 Ghostscript 尝试 运行ning 它会抛出可怕的错误并退出。所以大概你没有这样做。

PostScript 文件除了巨大的图像外什么都没有,渲染(大概是 600 dpi)包含 2 页,这两页看起来像上面的图像。这就是为什么 PostScript 比 PCL 文件大 20 倍以上的原因。

但是...如果我用 OpenOffice(4.0.0 是我必须提供的)打开 .ppt 文件,我会看到完全相同的东西。恐怕我没有 Microsoft PowerPoint 的副本,但从我在这里看到的内容可以得出两个结论;

首先,至少在使用 OpenOffice 查看时,我得到的 PDF 看起来非常像 PowerPoint。所以你的 PowerPoint 有点 'interesting'。

其次,即使这不是您所期望的,它也是 PostScript 程序中的内容。这意味着 PowerPoint 将幻灯片渲染为位图或 Windows 打印 system/HP 驱动程序。

现在,如果我 运行 PCL 通过 GhostPCL 而不是 Ghostscript(呈现,而不是生成 PDF),那么结果更像我认为你所期待的.但是,当发送到 PDF 文件时,结果很糟糕。这强烈地向我暗示涉及某种形式的透明度,PostScript 根本不支持透明度,而 PCL 通过 rasterOPs 做到这一点。

恐怕这意味着问题出在 PowerPoint、Windows 打印系统或您正在使用的 PostScript 打印机驱动程序中。由于 PCL 至少接近您的预期,我怀疑这意味着 PowerPoint 正在做正确的事情,并且它的打印机驱动程序搞砸了。您似乎正在使用 Windows PostScript 打印机驱动程序。

所以对于这样的文件,您无法 'fix' 这样做,至少不能使用 Ghostscript。您需要 'fix' Windows PostScript 打印机驱动程序,或者可能需要 Windows 打印系统。您可以尝试向 Microsoft 报告错误,大概这些文件在发送到物理 PostScript 打印机时也打印不正确。