因此,我正在使用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 code -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);
}
显然抛出异常是因为result
is -100
。
调用 InitAPI 时,实例 ptr 是有效的int
(尽管我不知道 GS 的实例是否正确), argsstring[]
的有效 GhostScript 选项的长度为 20(是 a )(包括正确转义的路径到我的输入和输出文件)。
长话短说,我做错了什么?错误代码-100
似乎是一个包罗万象的东西,因为没有文档说明这里可能出现的问题。
任何帮助都非常感谢,在此先感谢您。