因此,我使用的是Matthew Ephraim's GhostscriptSharp,它是我的ASP.Net MVC項目中的非託管Win32 Ghostscript DLL的簡單C#包裝。一些背景:什麼導致Ghostscript返回-100的錯誤?
我想要做的是有一個用戶上傳PDF文件,然後將該文件轉換成一個圖像,然後我可以保存到我選擇的任何目錄(以及做一些其他OOP綁定那個新的圖像到我的網站)。
我決定使用Ephraim先生的包裝類(GhostscriptSharp),因爲它使用起來很簡單,它使我能夠相對乾淨地訪問DLL的API。
爲了測試它,我創建了一個虛擬的C#控制檯應用程序,以確保我可以加載DLL,訪問它,在本地磁盤上傳遞PDF文件,然後讓它將JPG寫入同一本地磁盤。經過一些學習經歷,我獲得了成功。我會把它交給C:\ INPUT.pdf,它會交給我C:\ OUTPUT.jpg。
但是,將我在控制檯應用程序中使用的GhostScriptSharp代碼集成到我的ASP.NET MVC項目中,並將其與P/invoke調用DLL的位置相集成後,Ghostscript將返回int/error代碼-100
,這是一個致命錯誤(在GhostScript源代碼中稱爲E_Fatal
)。我通過HTML表單上傳的文件獲得了相同的結果,並且如果我將它用於我的工作控制檯應用程序中使用的完全相同的硬編碼路徑,則會得到相同的結果。
作爲參考,該引發異常的線在GhostScriptSharp.cs 93-97(這是在CallApi
功能):
int result = InitAPI(gsInstancePtr, args.Length, args);
if (result < 0) {
throw new ExternalException("Ghostscript conversion error", result);
}
顯然拋出異常因爲result
是-100
。
當InitAPI被調用時,實例ptr是一個有效的int
(雖然我不知道GS的實例是否正確),args的長度爲20(是string[]
)有效的GhostScript選項包括正確轉義的輸入文件路徑&)。
長話短說,我做錯了什麼?錯誤代碼-100
看起來像一個全面的,因爲沒有文件說明什麼可能會在這裏出錯。
任何幫助非常感謝,提前謝謝。
一,我聽說如果我用ASP.Net開發服務器運行Web應用程序,它使用我本地用戶的權限運行,我在本地計算機上管理員,這就是文件所在的位置。二,在使用GhostscriptSharp之前,在應用程序的早期階段,我的應用程序會創建PDF和JPG進入的特定目錄,這樣也會表明它具有適當的寫入權限,對嗎? – Mattygabe 2010-12-02 22:10:54
@Mattygabe - 只要你在卡西尼跑步,這就是真的。不知道可能是什麼問題。 – tvanfosson 2010-12-02 22:15:02