我一直在使用端口监视器(在HP PCL 6 Universal驱动程序上)修改Ghostscript,以将打印作业转换为PDF。我已经测试了一些应用程序,如Words,Excel,Adobe Reader,Microsoft Edge等,它们都正常工作。 但是,在测试Microsoft Powerpoint 2016时,似乎有些图形无法通过Ghostscript正确呈现。
我甚至使用其他一些PDF生成器测试了这一点,例如BioPDF,CutePDF以及AdobePDF,它们都会产生与上面相同的输出。
只是想知道有没有人尝试过并且之前遇到过类似的问题?若有,有人能指出我正确的方向吗?
答案 0 :(得分:2)
您正在做的事情不是一步PowerPoint到PDF和Ghostscript没有渲染PowerPoint。事实上,如果你正在创建一个PDF文件,Ghostscript并不是(理想情况下)渲染。
实际发生的是您要求PowerPoint打印到画布,然后将其传递给PostScript打印机驱动程序。这会产生发送到端口的PostScript。您(和其他人)Port Monitor然后将PostScript发送给' Distiller' (在你的情况下是Ghostscript和pdfwrite设备)。 Distiller将矢量绘图命令重新格式化为PDF格式,并从中构建PDF文件。除非被强制使用,否则它不会渲染(变成位图图像)。
显然,在这条路上有几个地方可能会出现问题。鉴于你说Adobe产品(你提到的其他人使用Ghostscript)有同样的问题,我认为可以安全地假设问题< strong> isn&#39; Ghostscript。
这也意味着您没有使用您认为自己的驱动程序。就我所知,Adobe无法将PCL作为输入媒体处理,Ghostscript也无法处理。 GhostPCL 将处理PCL作为输入,但这不是您所说的。
当然,您还没有链接到示例文件来演示问题,也没有提供示例命令行,所以这都是假设。
现在,如果 使用PCL6设备,那么问题很可能是由于输出中存在rasterOps。 Rasterops是PCL成像模型的一部分,它在PDF中不存在,是一种透明形式。有三种方法可以处理PDF输出设备的内容;首先将整个页面内容渲染为图像,然后忽略rasterOps对象,第三次将rasterOps视为不透明。
GhostPCL和pdfwrite设备采用第三种方式。因此,可以想象您的原始内容具有一些透明对象,这些对象由PCL打印机驱动程序作为rasterOps处理,然后由GhostPCL和pdfwrite设备呈现为不透明。
如果情况如此,那么解决方案很简单;如果没有使用PCL打印机驱动程序,请使用PostScript打印机。
如果你发布一个链接到(简单的,例如单页)你发送到Ghostscript的内容和命令行的例子,那么我可以看看它。请不要将PowerPoint发送给我,我无法使用它,即使可以,我的打印设置也不会与您的打印设置相匹配。我需要将数据发送到Ghostscript。
[查看文件后编辑]
听起来不像我讲课,问题是人们会在Google搜索中找到这些结果,然后根据对发生的事情的不了解来尝试应用它们。所以我发现最好在我的答案中清楚地知道发生了什么。它稍后会保存问题: - )
我看到的第一件事是PCL确实是PCL,如果你尝试通过Ghostscript运行,它会抛出可怕的错误并退出。所以大概你不是那样做的。
PostScript文件除了巨大的图像之外什么也没有,渲染(大概是600 dpi)包含2页,这两页看起来就像你上面的图像。这就是PostScript比PCL文件大20倍的原因。
但....如果我用OpenOffice打开.ppt文件(4.0.0是我必须提供的),我看到的完全相同。我不担心,我有一份Microsoft PowerPoint的副本,但从我看到的有两个结论;
首先,我看到的PDF看起来非常像使用OpenOffice查看时的PowerPoint。所以有一些有趣的东西&#39;关于你的PowerPoint。
其次,即使这不是你所期望的,它也是PostScript程序中的内容。这意味着PowerPoint将幻灯片渲染为位图或Windows打印系统/ HP驱动程序。
现在,如果我通过GhostPCL而不是Ghostscript运行PCL(渲染,而不是生成PDF),那么结果就像我认为的那样。但是,当发送到PDF文件时,结果很糟糕。这强烈告诉我,涉及到某种形式的透明度,PostScript根本不支持透明度,PCL通过rasterOP来完成。
我担心这意味着问题出在PowerPoint,Windows打印系统或您正在使用的PostScript打印机驱动程序中。由于PCL至少接近您的预期,我怀疑这意味着PowerPoint正在做正确的事情,而且它的打印机驱动程序搞乱了。您似乎正在使用Windows PostScript打印机驱动程序。
因此,您无法修复&#39;对于像这样的文件,至少不使用Ghostscript。您需要修复&#39; Windows PostScript打印机驱动程序,或可能是Windows打印系统。您可以尝试向Microsoft报告错误,可能是这些文件在发送到物理PostScript打印机时打印错误。