我使用C#包装器来使用Ghostscript将PDF转换成图像,但是我似乎不能正确地引用dll。我将DLL存储在bin文件夹中(也不知道这是否是保存它的最佳位置),下面是我的代码:
byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
Ghostscript.NET.Rasterizer.GhostscriptRasterizer rasterizer = null;
Ghostscript.NET.GhostscriptVersionInfo vesion = new Ghostscript.NET.GhostscriptVersionInfo(new Version(0, 0, 0), path + @"\gsdll64.dll", string.Empty, Ghostscript.NET.GhostscriptLicense.GPL);
Stream inStream = new MemoryStream(fileData);
MemoryStream outStream = new MemoryStream();
List<Image> imageList = new List<Image>();
using (rasterizer = new Ghostscript.NET.Rasterizer.GhostscriptRasterizer())
{
rasterizer.Open(inStream, vesion, false);
for (int i = 1; i <= rasterizer.PageCount; i++)
{
//string pageFilePath = Path.Combine(outputPath, Path.GetFileNameWithoutExtension(file) + "-p" + i.ToString() + ".jpg");
int dpi = 200;
Image img = rasterizer.GetPage(dpi, dpi, i);
img.Save(outStream, ImageFormat.Jpeg);
Image img = new Image
{
imgByteArray = outStream.ToArray()
};
imageList.Add(image);
}
rasterizer.Close();
}我正在获取Ghostscript本地库无法找到错误。这是我走的路

我认为这与DLLPath字符串中的double /和‘DLLPath有关。我也应该指定LipPath吗?有什么帮助吗?
发布于 2017-01-06 12:37:44
在您的情况下,您应该以这种方式创建鬼脚本dll路径:
string binPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string gsDllPath = Path.Combine(binPath, Environment.Is64BitProcess ? "gsdll64.dll" : "gsdll32.dll");发布于 2018-11-25 04:58:03
尽管这并不能直接回答这个问题,但我认为这是值得一提的,因为我在使用2016年发布的Ghostscript.NET 1.2.1版本的OP代码时遇到了问题。这是我找到的解决办法:
在源代码中,Ghostscript.NET\Helpers\StreamHelper.cs:171
n = output.Read(buffer, 0, buffer.Length);
真的应该是
n = input.Read(buffer, 0, buffer.Length);
如果您打开一个流而不是路径,而不修改上面提到的代码,您将得到空结果,因为输入流没有被复制。
深入阅读代码,会发现输入流被写入临时文件,然后再读入内存。如果开始使用的是磁盘上的rasterizer.Open文件,那么您最好通过路径而不是流来使用它。
https://stackoverflow.com/questions/41408393
复制相似问题