表单处理期间的AccessViolationException (c0000005)
在处理PDF表单时,IronPDF可能会抛出间歇性的本机PdfDocument.Merge期间出现。
AccessViolationException (0xc0000005)
bad conversion while widening narrow string
崩溃来自于本机表单字段句柄与托管对象生命周期之间的交互。如果PdfDocument在本机表单操作仍在进行时被垃圾回收或处置,本机层会访问已被释放的内存,从而导致访问冲突。
反复出现的"加宽窄字符串时转换错误"警告,以及在平坦化过程中关于移除表单字段注释的警告,是单独且无害的症状。 它们来自于解码内部AcroForm字段字符串和包含日语或多字节字符的元数据。 它们并不意味着日语或Unicode支持有问题,也不意味着日语UNC文件路径有问题。
解决方案
1. 在整个操作过程中保持文档活跃
推荐:在整个表单处理期间,将PdfDocument保留在作用域内。 将其包装在GC.KeepAlive(doc)。
Using doc As IronPdf.PdfDocument = IronPdf.PdfDocument.FromFile(tempPdfPath)
For Each field In doc.Form
' Your form field processing here
Next
GC.KeepAlive(doc)
End Using
Using doc As IronPdf.PdfDocument = IronPdf.PdfDocument.FromFile(tempPdfPath)
For Each field In doc.Form
' Your form field processing here
Next
GC.KeepAlive(doc)
End Using
GC.KeepAlive(doc)防止在本机表单操作仍在运行时运行时收集文档,关闭本机代码可能命中释放内存的窗口。
2. 删除手动GC.Collect()调用
在PDF和表单处理中删除任何GC.Collect()调用。 强制在操作中间进行收集可能会触发导致崩溃的确切生命周期问题。
3. 仅以x64为目标
明确将项目平台目标设置为x64,并确保首选32位被禁用。 以x64运行避免了在本机表单工作期间的32位进程的约束。

