GhostScript 不可恢复的错误:未定义的文件名
Posted
技术标签:
【中文标题】GhostScript 不可恢复的错误:未定义的文件名【英文标题】:GhostScript unrecoverable error: undefined file name 【发布时间】:2017-02-06 20:40:39 【问题描述】:试图弄清楚如何使用 Ghost 脚本获取 memoryStream 并返回图像。这是执行 rasterizer.Open 后出现的代码和错误:
public static System.Drawing.Image PDFToImage(MemoryStream inputMS)
GhostscriptRasterizer rasterizer = null;
GhostscriptVersionInfo version = null;
if (Environment.Is64BitProcess)
version = new GhostscriptVersionInfo(
new Version(0, 0, 0), @"C:\Program Files\gs\gs9.20\bin\gswin64.exe",
string.Empty, GhostscriptLicense.GPL);
else
version = new GhostscriptVersionInfo(
new Version(0, 0, 0), @"C:\Program Files (x86)\gs\gs9.20\bin\gswin32.exe",
string.Empty, GhostscriptLicense.GPL);
int dpi = 96;
System.Drawing.Image img = null;
using (rasterizer = new GhostscriptRasterizer())
rasterizer.Open(inputMS, version, true);
for (int i = 1; i <= rasterizer.PageCount; i++)
using (MemoryStream ms = new MemoryStream())
img = rasterizer.GetPage(dpi, dpi, i);
img.Save(ms, ImageFormat.Jpeg);
ms.Close();
rasterizer.Close();
return img;
【问题讨论】:
【参考方案1】:问题是您指向的是 exe 文件而不是 dll。当您将“gswin64.exe”替换为“gsdll64.dll”(32 位版本相同)时,您的代码应该可以工作。
【讨论】:
感谢 Habjan 的回复。它现在确实将 PDF 转换为图像!【参考方案2】:好吧,Ghostscript 告诉您它无法打开文件 '/config:C:\Users\Sean.McNary\ApexRemington\.vs\config\applicationhosts.config' 因为(对于这样一个乱码文件名并不完全不足为奇),它找不到文件。
我认为您在 Ghostscript(这是一个用 C 编写的 DLL)周围使用了某种包装器,因为您显然使用的是 C#,如果您要说明您在其中使用的内容会有所帮助。
无论您使用什么包装器,它都“看起来像”,它期望得到一个输入文件名,然后简单地将其传递给 Ghostscript。虽然可以将数据从内存传递到 Ghostscript,并将渲染结果返回到内存中,但您应该注意,如果输入是 PDF 文件,您不会保存任何内容,因为 Ghostscript 会将整个输入假脱机到一个处理之前的临时文件您必须在 PDF 文件中四处寻找,因此您需要随机访问,因此将其写为文件。
你将不得不调试你的包装器,看看它在做什么。
【讨论】:
嘿@KenS。我正在使用 GhostScript.NET。我想要完成的是传入这个 PDF 的内存流,并返回一个图像。然后我想将这个图像转换回一个流,我将把它添加到一个流队列中,并打印所有的流。我不只是将 PDF 直接转换为流并执行 stream.enqueue(PDF) 的原因是因为当我这样做时,我得到一个 GDI+ 通用错误。流的原始队列是图像。如果您知道更好的方法来做到这一点,那么我完全赞成。 您应该将 Ghostscript.net 标签添加到您的问题中,这样作者可能会注意到并发表评论。我不是 C# 程序员,所以我不知道你真正想要实现什么,恐怕我不明白你的解释:-(我的主要观点是在内存中传递一个 PDF 文件只意味着Ghostscript 将其作为临时文件写入,它不会为您节省任何时间。如果您正在考虑将 PDF 文件打印到打印机,Ghostscript 已经可以使用 mswinpr2 设备执行此操作,可能会更好,因为它会在打印机分辨率。 Ghostscript.NET 不适用于 ghostscript exe。您应该将其指向 ghostscript dll。以上是关于GhostScript 不可恢复的错误:未定义的文件名的主要内容,如果未能解决你的问题,请参考以下文章
手动编码 Postscript 时,Ghostscript 会产生未定义的错误
使用反应成帧器类型'()=> void'的打字稿错误不可分配给类型'未定义'
尝试在 Macintosh 上构建 Ghostscript 9.0.1 时出错
VMware Workstation 不可恢复错误: (vcpu-1) Exception 0xc0000005 (access violation) has occurred终极解决方案