Exception AccessViolationException Durante o Processamento de Formulário (c0000005)

This article was translated from English: Does it need improvement?
Translated
View the article in English

Ao processar formulários PDF, o IronPDF pode lançar um AccessViolationException nativo intermitente (código c0000005) que não se reproduz de forma confiável, mesmo no mesmo arquivo de entrada. Ele aparece mais frequentemente quando você acessa PdfDocument.Form e durante PdfDocument.Flatten e PdfDocument.Merge.

AccessViolationException (0xc0000005)
bad conversion while widening narrow string

A falha vem da interação entre manipuladores de campos de formulário nativos e o tempo de vida de objeto gerenciado. Se o PdfDocument for coletado como lixo ou descartado enquanto operações de formulário nativas ainda estão em andamento, a camada nativa acessa a memória que já foi liberada, o que produz a violação de acesso.

Os repetidos avisos de "má conversão ao alargar string estreita", juntamente com avisos sobre a remoção de anotações de campos de formulário durante o achatamento, são um sintoma separado e benigno. Eles vêm da decodificação de strings de campos AcroForm internos e metadados que contêm caracteres japoneses ou multibyte em um determinado PDF. Eles não indicam um problema com suporte geral a japonês ou Unicode, nem com caminhos de arquivo UNC em japonês.

Solução

1. Mantenha o Documento Vivo durante Toda a Operação

Recomendado: mantenha o PdfDocument em escopo durante toda a duração do processamento de formulário. Envolva-o em um bloco Using para que seu tempo de vida seja explícito, então chame GC.KeepAlive(doc) após o loop de campos de formulário, antes que o documento seja descartado.

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
VB .NET

O GC.KeepAlive(doc) impede que o tempo de execução colete o documento enquanto operações de formulário nativas ainda estão em execução, fechando a janela em que o código nativo pode acessar memória liberada.

2. Remova Chamadas Manuais de GC.Collect()

Exclua quaisquer chamadas GC.Collect() durante o processamento de PDF e formulário. Forçar a coleta no meio da operação pode desencadear exatamente o problema de tempo de vida que causa a falha.

3. Alvo Somente x64

Defina explicitamente o alvo da plataforma do projeto para x64, e certifique-se de que Preferir 32 bits está desativado. Executar como x64 evita as limitações de um processo de 32 bits durante o trabalho com formulários nativos.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 20,296,129 | Versão: 2026.7 recém-lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronPdf
executar um exemplo Veja seu HTML se transformar em um PDF.