2015-06-05 43 views
1

我有一個Sharepoint應用程序,它使用Ghostscript.net包裝器將pdf文檔柵格化爲png。現在我正在使用site中的示例。但我遇到的問題是,當我嘗試同時轉換爲pdf文件時。使用此代碼一次只能使用一個。但是,當我嘗試同時轉換2個pdf時,出現錯誤「調用'gsapi_new_instance'時出現錯誤:-100」。Ghostscript.net多線程問題

   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或瀏覽器實例,而不是?有沒有人有這個代碼的好例子?

回答

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)); 
+0

很高興知道你找到了你的答案。我正在開發一個使用Unity的HoloLens應用程序,VS中的解決方案表示目標框架是.net 3.5。我可以在Unity Editor中使用gsdll64,但是當我嘗試在UWP應用程序(gsdll32)中導入Dll時,它會返回dllnotfound異常。我在想這是因爲ghost script dll與UWP應用程序不兼容? 不斷研究這個發現確定的答案。只希望與您聯繫,看看您是如何做到的。謝謝! – jtth

+0

我下載了源代碼並將目標框架從4.x改爲3.5。然後我修復了由於4.x特定代碼而出現的所有錯誤。我認爲這是唯一難以解決的問題。 – RobbZ

+0

Gotcha。我最終獲得了爲WinRT編譯的gsdll32。感謝您的回覆! – jtth