是什么导致Ghostscript返回-100的错误?

Mat*_*abe 16 c# asp.net-mvc ghostscript ghostscriptsharp

所以,我使用的是Matthew Ephraim的GhostscriptSharp,它是我ASP.Net MVC项目中非托管Win32 Ghostscript DLL的简单C#包装器.一些背景:

我试图做的是让用户上传PDF,然后将该文档转换为图像,然后我可以保存到我选择的任何目录中(以及做一些其他OOP以将新图像绑定到我的网站) .

我决定使用Ephraim先生的包装类(GhostscriptSharp)因为它很简单易用,它让我可以相对干净地访问DLL的API.

为了测试它,我创建了一个虚拟的C#控制台应用程序,以确保我可以加载DLL,访问它,将PDF文件交给本地磁盘,然后让它将JPG写入同一本地磁盘.经过一些学习经历,我获得了成功.我会把它交给C:\ INPUT.pdf,它会递给我C:\ OUTPUT.jpg.

但是,在将我在控制台应用程序中使用的GhostScriptSharp代码集成到我的ASP.NET MVC项目到我用P/invoke调用DLL的位置之后,Ghostscript返回了int/error代码-100,这是致命的错误(E_Fatal在GhostScript源代码中调用).我通过HTML表单上传的文件得到了相同的结果,如果我把它与我在工作控制台应用程序中使用的完全相同的硬编码路径.

作为参考,抛出异常的行在GhostScriptSharp.cs中是93-97(在CallApi函数中):

int result = InitAPI(gsInstancePtr, args.Length, args);

if (result < 0) {
  throw new ExternalException("Ghostscript conversion error", result);
}
Run Code Online (Sandbox Code Playgroud)

显然,抛出异常,因为result-100.

当调用InitAPI时,实例ptr是有效的int(虽然我不知道GS的实例是否正确),args的长度为20(是string[])有效的GhostScript选项(包括正确转义的路径)到我的输入和输出文件).

长话短说,我做错了什么?错误代码-100似乎是一个全能,因为没有文档说明这里可能出错的地方.

非常感谢任何帮助,谢谢你提前.

Mar*_*man 11

-100错误是GhostScript中的一般"致命错误".

要检查的一些事项:

1)权限(al操作需要文件访问)

2)范围,您要将GS bin文件夹添加到PATH变量

3)考虑不直接从asp.net调用GhostScript,GS可能非常占用CPU,而是在单独的服务中处理文件

我还创建了一个包装器,给我发了一封电子邮件(个人资料上的地址),我会发给你.它允许一个人传入GS bin文件夹,这有助于.


Mat*_*abe 4

所以,最终导致了一个 ID10T 错误,在这个特定的实例中,它让我脱轨了。

在 Matthew Ephraim 的 GhostscriptSharp 代码中,他使用了几个枚举来定义为 Ghostscript 设置的选项,其中两个特别是 和GhostscriptDevices枚举GhostscriptPageSizes。问题是,Resharper(Jetbrains Visual Studio 插件)的编写方式具有命名 Enum 成员的默认规则。我没有多想,就修复了所有这些定义,以取悦 Resharper,因为他们没有意识到这些定义是直接传递给 Ghostscript 的,所以不是获取a7GS-sPAPERSIZE而是获取A7,而对于-sDEVICE它则是获取Jpeg而不是jpeg

目前,权限对我来说不是问题,但这只是因为我在 Visual Studio 中运行 Cassini Web 开发测试服务器。

感谢@MarkRedman 和@tvanfosson 提供的有用建议!