2010-04-01 31 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

相关问题