Неисправимая ошибка GhostScript: неопределенное имя файла

Попытка выяснить, как взять memoryStream и вернуть изображения с помощью Ghost Script. Вот код, а также ошибка, которую я получаю после запуска rasterizer.Open:

 public static System.Drawing.Image PDFToImage(MemoryStream inputMS)
    {
        GhostscriptRasterizer rasterizer = null;
        GhostscriptVersionInfo version = null;
        if (Environment.Is64BitProcess)
           version = new GhostscriptVersionInfo(
                new Version(0, 0, 0), @"C:\Program Files\gs\gs9.20\bin\gswin64.exe",
                string.Empty, GhostscriptLicense.GPL);
        else
            version = new GhostscriptVersionInfo( 
                new Version(0, 0, 0), @"C:\Program Files (x86)\gs\gs9.20\bin\gswin32.exe",
                string.Empty, GhostscriptLicense.GPL);

        int dpi = 96;
        System.Drawing.Image img = null;

        using (rasterizer = new GhostscriptRasterizer())
        {
            rasterizer.Open(inputMS, version, true);

            for (int i = 1; i <= rasterizer.PageCount; i++)
            {

                using (MemoryStream ms = new MemoryStream())
                {
                    img = rasterizer.GetPage(dpi, dpi, i);
                    img.Save(ms, ImageFormat.Jpeg);
                    ms.Close();
                }

            }
            rasterizer.Close();
        }
        return img;
    }

GhostScriptConsole

2 ответа

Решение

Проблема в том, что вы указываете на исполняемый файл вместо DLL. Когда вы заменяете "gswin64.exe" на "gsdll64.dll" (то же самое для 32-битной версии), ваш код должен работать.

Ну, Ghostscript говорит вам, что он не может открыть файл '/config:C:\Users\Sean.McNary\ApexRemington\.vs\config\applicationhosts.config', потому что (что неудивительно с таким искаженным именем файла), он не могу найти файл.

Я предполагаю, что вы используете какую-то оболочку вокруг Ghostscript (которая представляет собой DLL, написанную на C), потому что вы, очевидно, используете C#, было бы полезно, если бы вы указали, что вы там используете.

Похоже, какой бы оболочкой вы ни пользовались, она ожидает ввода имени файла и просто передает ее в Ghostscript. Хотя можно передавать данные из памяти в Ghostscript и возвращать результат рендеринга в память, вы должны знать, что если вход представляет собой файл PDF, вы ничего не сохраняете, потому что Ghostscript будет буферизовать весь ввод в временный файл перед его обработкой Вам нужно искать файл PDF, поэтому вам нужен произвольный доступ, поэтому он записывается в виде файла.

Вам нужно будет отладить свою оболочку и посмотреть, что она делает.

Другие вопросы по тегам