Ghostscript.net многопоточная проблема

У меня есть приложение Sharepoint, которое использует оболочку Ghostscript.net для растеризации PDF-документов в PNG. Прямо сейчас я использую пример с их сайта. Но проблема у меня возникает, когда я пытаюсь одновременно конвертировать в pdfs. Использование этого кода работает только по одному за раз. Но я получаю сообщение об ошибке "Произошла ошибка при обращении к" gsapi_new_instance ": -100", когда я пытаюсь конвертировать 2 файла PDF одновременно.

               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 ответ

Поэтому я понял, в чем проблема. Мне пришлось скомпилировать Ghostscript.net для 3.5, потому что я использую его на сайте 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));
Другие вопросы по тегам