Ghostscript.net 多线程问题

Posted

技术标签:

【中文标题】Ghostscript.net 多线程问题【英文标题】:Ghostscript.net multiThreaded issue 【发布时间】:2015-06-05 15:19:56 【问题描述】:

我有一个 Sharepoint 应用程序,它使用 Ghostscript.net 包装器将 pdf 文档光栅化为 png。现在我正在使用他们site 中的示例。但我遇到的问题是当我尝试同时转换为 pdf 时。使用此代码一次只能工作一个。但是当我尝试同时转换 2 个 pdf 时,出现错误“调用 'gsapi_new_instance' 时发生错误:-100”。

               using (MemoryStream pdfStream = new MemoryStream(pdfbyte))
            using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer())
            

                rasterizer.Open(pdfStream, version, false);
                for (int i = 1; i <= rasterizer.PageCount; i++)
                

                    using (MemoryStream ms = new MemoryStream())
                    
                        DrawImage img = rasterizer.GetPage(dpi, dpi, i);
                        img.Save(ms, ImageFormat.Png);
                        ms.Close();
                        output = "data:image/png;base64," + Convert.ToBase64String((byte[])ms.ToArray());

                    

                

                rasterizer.Close();

否则,如果我使用rasterizer.Open(pdfStream, version, true);,则会出现错误“算术运算导致溢出”

我应该改用 GhostscriptProcessor 还是 Viewer 实例?有人有这个代码的好例子吗?

【问题讨论】:

【参考方案1】:

所以我弄清楚了问题所在。我必须为 3.5 编译 Ghostscript.net,因为我在 Sharepoint 2010 站点中使用它。当我这样做时,我搞砸了 DynamicNativeLibrary.cs 文件中的这行代码。

string procName = Marshal.PtrToStringAnsi((IntPtr)(byte*)(thunkData) + 2);

当我将其更改为以下内容时,它现在似乎可以正常工作了。

IntPtr a = (IntPtr)(byte*)(thunkData);
string procName = Marshal.PtrToStringAnsi(new IntPtr(a.ToInt64() + 2));

【讨论】:

很高兴知道您找到了答案。我正在使用 Unity 开发 HoloLens 应用程序,VS 中的解决方案说目标框架是 .net 3.5。我可以在 Unity 编辑器中使用 gsdll64 没有问题,但是当我尝试在 UWP 应用程序 (gsdll32) 中导入 Dll 时,它返回一个 dllnotfound 异常。我在想这是因为幽灵脚本 dll 与 UWP 应用程序不兼容?不断研究这个以发现明确的答案。只是希望能和你联系,看看你是怎么做到的。谢谢! 我下载了源代码并将目标框架从 4.x 更改为 3.5。然后我修复了由于 4.x 特定代码而出现的所有错误。我认为这是唯一一个稍微难以修复的问题。 明白了。我最终获得了一个为 WinRT 编译的 gsdll32。不过感谢您的回复! 我忘了补充一点,当我尝试使用 Ghostscript NET 而不是 Ghostscript 时,它返回了大量错误,所以我只好放弃了

以上是关于Ghostscript.net 多线程问题的主要内容,如果未能解决你的问题,请参考以下文章

如何获得有效的 x64 THREADSAFE Ghostscript DLL

Ghostscript.NET 图片文字质量问题

Ghostscript.NET 忽略后记

如何使用 Ghostscript 和 Ghostscript .NET 通过嵌入 IIC 配置文件生成正确的 PDF/A

Ghostscript.net 打印 pdf 页面方向

在 ASP.NET Azure 网站上使用 Ghostscript.Net