2010-04-01 57 views
1

我有幾個存儲在字節數組集合的pdf文件的二進制文件。Abcpdf拋出System.ExecutionEngineException

我的目標是使用abcpdf將它們連接成單個.pdf文件,然後將新創建的文件流式傳輸到ASP.Net網站頁面上的Response對象。

一直在做這樣的:

BEGIN LOOP ...

'Create a new Doc 
Dim doc As Doc = New Doc 

'Read the binary of the current PDF 
doc.Read(bytes) 

'Append to the master merged PDF doc 
_mergedPDFDoc.Append(Doc) 

END LOOP

正在工作的時間細95%。然而,現在然後,創建一個新的Doc對象會拋出一個System.ExecutionEngineException並導致CLR崩潰。它似乎沒有涉及大量的pdf(有時會發生w /只有2),或與大尺寸的pdf。這似乎幾乎是完全隨機的。

這是在abcpdf中描述(不是很好)在這裏Item 6.24已知的bug。我遇到了a helpful SO post,它建議對abcpdf Doc對象使用Using塊。

所以,現在我這樣做:

Using doc As New Doc 
     'Read the binary of the current PDF 
     doc.Read(bytes) 
     'Append to the master merged PDF doc 
     _mergedPDFDoc.Append(doc) 
    End Using 

而且我還沒有看到這個問題再次發生呢,並已作爲最敲着一個測試版,我可以得到它。

有沒有人有類似的經驗,這個錯誤?這是否解決了它?

+0

FWIW我不知道如何解決這個錯誤,或者如果'使用'將繼續停止它,但我使用iTextSharp PDF庫幾乎是相同的事情,並沒有任何問題(並且我添加100個文檔在一起) – CResults 2010-04-03 08:45:07

回答

3

當CLR出現內部錯誤時,會拋出ExecutionEngineExceptions,因此這是Microsoft要解決的問題之一。

因此,在使用或try-catch塊中包裝代碼不太可行。

webSupergoo網站上提到的與.NET 3.5 SP1相關的問題以及如何將安全屬性應用於程序集。我發現在調試網頁時出現這個錯誤,並懷疑這個問題也與ASP.NET動態編譯有關。

ABCpdf版本7.010和更高版本解決此問題。爲一個愚蠢的問題道歉,但你有沒有嘗試最新版本?

您可以檢查哪些ABCpdf的版本目前正在使用PDFSettings工具安裝,通過Windows開始菜單>程序位於> ABCpdf 7.0 .NET

如果更新ABCpdf是不是一種選擇,那麼你可能需要考慮卸載.NET 3.5 SP1。

+0

感謝您的迴應。我確實在webSupergoo網站上看到了該項目。不幸的是,我無法控制升級。奇怪的是,仍然沒有看到問題再次發生,儘管我同意你的看法,沒有理由認爲使用塊應該有所幫助。我猜這只是運氣好嗎? – 2010-05-10 13:23:12

相關問題