Итак, я использую Matthew Ephraim GhostscriptSharp, который является простой оболочкой С# для неуправляемой DLL Ghostscript Win32 в моем проекте ASP.Net MVC, Некоторые предпосылки:
То, что я пытаюсь сделать, - это загрузить файл в формате PDF, а затем преобразовать этот документ в изображение, которое затем я могу сохранить в любой каталог, который я выбираю (а также сделать другой ООП, чтобы связать это новое изображение с мой сайт).
Я решил использовать класс оболочки Mr. Ephraim (GhostscriptSharp), потому что он был достаточно прост для использования, и это дает мне относительно чистый доступ к API DLL.
Чтобы протестировать его, я создал фиктивное консольное приложение С#, чтобы убедиться, что я могу загрузить DLL, получить к нему доступ, передать его PDF файл на локальный диск и затем записать JPG на тот же локальный диск. После нескольких опытов я добился успеха. Я передал бы ему C:\INPUT.pdf, он передал бы мне C:\OUTPUT.jpg.
Однако после интеграции кода GhostScriptSharp, который был у меня в консольном приложении, в проект ASP.NET MVC до такой степени, что я вызывал DLL с помощью P/invoke, Ghostscript возвращается с кодом int/error -100
, который является фатальной ошибкой (называется E_Fatal
в исходном коде GhostScript). Я получаю тот же результат как с файлом, загружаемым через HTML-форму, так и в том случае, если я передам ему те же самые жестко кодированные пути, которые я использовал в своем рабочем консольном приложении.
Для справки, строки, которые генерируется исключение, являются 93-97 в GhostScriptSharp.cs(который находится в функции 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
кажется уловкой, потому что нет документации, в которой говорится, что здесь может быть неправильно.
Любая помощь очень ценится, спасибо заранее.