首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中引用Ghostscript动态链接库

如何在C#中引用Ghostscript动态链接库
EN

Stack Overflow用户
提问于 2016-12-31 12:42:59
回答 2查看 7.2K关注 0票数 3

我使用C#包装器来使用Ghostscript将PDF转换成图像,但是我似乎不能正确地引用dll。我将DLL存储在bin文件夹中(也不知道这是否是保存它的最佳位置),下面是我的代码:

代码语言:javascript
复制
 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吗?有什么帮助吗?

EN

回答 2

Stack Overflow用户

发布于 2017-01-06 12:37:44

在您的情况下,您应该以这种方式创建鬼脚本dll路径:

代码语言:javascript
复制
string binPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string gsDllPath = Path.Combine(binPath, Environment.Is64BitProcess ? "gsdll64.dll" : "gsdll32.dll");
票数 4
EN

Stack Overflow用户

发布于 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文件,那么您最好通过路径而不是流来使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41408393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档