Вопрос

Итак, я использую Matthew Ephraim's GhostscriptScriptSharp, который является простым C # оберткой для неуправляемого Ghostscript DLL Win32 в моем проекте ASP.NET MVC. Несколько фон:

То, что я пытаюсь сделать, у него есть пользователь загрузка PDF, а затем преобразовать этот документ в изображение, которое я могу затем сохранить, в любой каталог, который я выбираю (а также другой OOP, чтобы привязать это новое изображение на мой сайт) Отказ

Я решил использовать класс Wrapper г-на Эфраим (GhostscriptSharp), потому что он был достаточно простым для использования, и он дает мне относительно чистый доступ к API DLL.

Чтобы проверить его, я создал приложение Console Bummy C #, чтобы убедиться, что я смогу загрузить DLL, доступа к ней, переведите его PDF-файл на локальном диске, а затем записать jpg к тому же локальному диску. После нескольких опытов обучения у меня был успех. Я бы передал его c: input.pdf, это будет передавать мне c: adduct.jpg.

Однако после интеграции кода GhostscriptSharp, в котором я имел в приложении консоли в моем проекте MVC MVC ASP.NET до такой степени, что я вызывал 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 Похоже, что улов все, потому что нет документации, которая гласит, что может идти неправильно здесь.

Любая помощь очень ценится, заранее спасибо.

Это было полезно?

Решение 3

Итак, оказался ошибкой ID10T, которая сгорала меня здесь в этом конкретном экземпляре.

В CodeScriptScriptScriptScriptScriptScriptScriptScriptScriptscriptScarp, он использует пару евро, чтобы определить параметры, изложенные для Ghostscript, и два, в частности, были GhostscriptDevices а также GhostscriptPageSizes enums. Проблема в том, что они написаны Resharper (плагин Visual Studio Jetbrains) имеет правила по умолчанию для именования членов Enum. Не думая, я исправил все эти определения, чтобы понравиться, не осознавая, что они передаются непосредственно к призраку, поэтому вместо того, чтобы получить a7 для -sPAPERSIZE GS становился A7, и для -sDEVICE Это было получено Jpeg вместо jpeg.

Пока разрешения не было проблемой на моем концом, но только потому, что запустите тестовый сервер Cassini Web DEV в Visual Studio.

Благодаря @markdeman и @tvanfosson за их полезные предложения!

Другие советы

Ошибка -100 - это общая «фатальная ошибка» в ghostscript.

Несколько вещей, чтобы проверить:

1) Разрешения (AL Операции требуют доступа к файлу)

2) Область применения, вы хотите добавить папку Bin GS в переменные пути

3) Рассмотрим не вызывать Ghostscript непосредственно из ASP.NET, GS может быть очень процессором интенсивным, скорее процессы в отдельном сервисе

Я также создал обертку, пришлите мне электронное письмо (адрес в профиле), и я отправлю его вам. Это позволяет пропустить в папке GS Bin, которая помогает.

Скорее всего, процесс, выполняющий процесс веб-приложения, не имеет разрешения на запись в каталоги, которые вы используете. Я бы предложил создать какой-то конкретный каталог для приложения для использования и локального идентификатора, используемого для запуска пула приложений, затем дайте этому идентификатору привилегии для чтения / записи каталога, который вы создали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top