GhostScript unrecoverable error: undefined file name
GhostScript unrecoverable error: undefined file name
试图找出如何使用 Ghost 脚本获取 memoryStream 和 return 图像。这是代码以及执行 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;
}
好吧,Ghostscript 告诉你它无法打开文件 '/config:C:\Users\Sean.McNary\ApexRemington\.vs\config\applicationhosts.config' 因为(这并不完全不足为奇如此乱码的文件名),它找不到文件。
我假设您正在使用某种围绕 Ghostscript 的包装器(这是一个用 C 编写的 DLL),因为您显然使用的是 C#,如果您要说明您在那里使用的是什么,将会有所帮助。
它 'looks like' 无论您使用什么包装器,它都希望得到一个输入文件名,然后将其简单地传递给 Ghostscript。虽然可以将数据从内存传递到 Ghostscript,并在内存中返回渲染结果,但您应该知道,如果输入是 PDF 文件,则您不会保存任何内容,因为 Ghostscript 会将整个输入假脱机到处理之前的临时文件你必须四处寻找一个PDF文件,所以你需要随机访问,因此它被写成一个文件。
您将不得不调试您的包装器并查看它在做什么。
问题是您指向的是 exe 文件而不是 dll。当您将 'gswin64.exe' 替换为 'gsdll64.dll'(32 位版本相同)时,您的代码应该可以工作。
试图找出如何使用 Ghost 脚本获取 memoryStream 和 return 图像。这是代码以及执行 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;
}
好吧,Ghostscript 告诉你它无法打开文件 '/config:C:\Users\Sean.McNary\ApexRemington\.vs\config\applicationhosts.config' 因为(这并不完全不足为奇如此乱码的文件名),它找不到文件。
我假设您正在使用某种围绕 Ghostscript 的包装器(这是一个用 C 编写的 DLL),因为您显然使用的是 C#,如果您要说明您在那里使用的是什么,将会有所帮助。
它 'looks like' 无论您使用什么包装器,它都希望得到一个输入文件名,然后将其简单地传递给 Ghostscript。虽然可以将数据从内存传递到 Ghostscript,并在内存中返回渲染结果,但您应该知道,如果输入是 PDF 文件,则您不会保存任何内容,因为 Ghostscript 会将整个输入假脱机到处理之前的临时文件你必须四处寻找一个PDF文件,所以你需要随机访问,因此它被写成一个文件。
您将不得不调试您的包装器并查看它在做什么。
问题是您指向的是 exe 文件而不是 dll。当您将 'gswin64.exe' 替换为 'gsdll64.dll'(32 位版本相同)时,您的代码应该可以工作。