因此,我使用的是Matthew Ephraim's GhostscriptSharp,它是我的ASP.Net MVC项目中的非托管Win32 Ghostscript DLL的简单C#包装。一些背景:什么导致Ghostscript返回-100的错误?
我想要做的是有一个用户上传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
,这是一个致命错误(在GhostScript源代码中称为E_Fatal
)。我通过HTML表单上传的文件获得了相同的结果,并且如果我将它用于我的工作控制台应用程序中使用的完全相同的硬编码路径,则会得到相同的结果。
作为参考,该引发异常的线在GhostScriptSharp.cs 93-97(这是在CallApi
功能):
int result = InitAPI(gsInstancePtr, args.Length, args);
if (result < 0) {
throw new ExternalException("Ghostscript conversion error", result);
}
显然抛出异常因为result
是-100
。
当InitAPI被调用时,实例ptr是一个有效的int
(虽然我不知道GS的实例是否正确),args的长度为20(是string[]
)有效的GhostScript选项包括正确转义的输入文件路径&)。
长话短说,我做错了什么?错误代码-100
看起来像一个全面的,因为没有文件说明什么可能会在这里出错。
任何帮助非常感谢,提前谢谢。
一,我听说如果我用ASP.Net开发服务器运行Web应用程序,它使用我本地用户的权限运行,我在本地计算机上管理员,这就是文件所在的位置。二,在使用GhostscriptSharp之前,在应用程序的早期阶段,我的应用程序会创建PDF和JPG进入的特定目录,这样也会表明它具有适当的写入权限,对吗? – Mattygabe 2010-12-02 22:10:54
@Mattygabe - 只要你在卡西尼跑步,这就是真的。不知道可能是什么问题。 – tvanfosson 2010-12-02 22:15:02