Неисправимая ошибка 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;
}
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, поэтому вам нужен произвольный доступ, поэтому он записывается в виде файла.
Вам нужно будет отладить свою оболочку и посмотреть, что она делает.