试图找出如何采取一个memoryStream和返回图像使用幽灵脚本。下面是执行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;
}

发布于 2017-02-08 09:45:29
问题是您所指向的是exe文件而不是dll。当您将'gswin64.exe‘替换为'gsdll64.dll’( 32位verion相同)时,您的代码应该可以工作。
发布于 2017-02-06 21:14:08
好吧,Ghostscript告诉您它不能打开文件'/config:C:\Users\Sean.McNary\ApexRemington.vs\config\applicationhosts.config‘,因为(使用这样一个乱码的文件名并不令人惊讶),它找不到文件。
我猜想您正在使用Ghostscript的某种包装器(这是用C编写的DLL ),因为显然您使用的是C#,如果您要说明在那里使用的是什么,那会有帮助的。
无论您使用什么包装器,它都希望得到一个输入文件名,并将其简单地传递给Ghostscript。虽然可以将数据从内存传递到Ghostscript,并在内存中返回呈现的结果,但您应该知道,如果输入是PDF文件,则不会保存任何内容,因为Ghostscript将在处理临时文件之前将整个输入假脱机到临时文件,因此您需要对PDF文件进行随机访问,因此需要将其写入文件。
您将不得不调试到您的包装程序中,看看它在做什么。
https://stackoverflow.com/questions/42076888
复制相似问题