HTML Başlıklar/Altbilgiler ile InsertPdf Sonrasında AccessViolationException

Curtis Chau
Curtis Chau
Updated: 12 Haziran 2026

Başka bir belgeden sayfalar birleştirilmek üzere InsertPdf kullanıldıktan sonra PdfDocument üzerinde AddHtmlHeadersAndFooters çağrıldığında AccessViolationException atılır. Hata Debug derlemelerinde veya bir hata ayıklayıcı bağlıyken oluşmaz.

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at IronPdf.PdfDocument.AddHtmlHeadersAndFooters(...)
Text

Release derlemelerinde, .NET JIT optimizer, çöp toplayıcının, bu nesnelerin yönetilen kod tarafından yeniden başvurulmayacağını kanıtladığında, yönetilen nesneleri sözdizimsel kapsamları bitmeden önce geri almasına izin verir. IronPDF'nin yerel Chrome katmanı hala okumaktayken InsertPdf ile iletilen bir PdfDocument toplanabilir. Sonraki AddHtmlHeadersAndFooters çağrısı, ardından serbest bırakılmış hafızaya erişir ve bu erişim ihlaline neden olur.

Çözümler

Seçenek 1: InsertPdf Öncesinde Başlıklar ve Altbilgiler Uygulayın (Önerilen)

İşlemleri, herhangi bir sayfa eklenmeden önce başlıkların ve altbilgilerin temel belgeye yazılacağı şekilde yeniden sıralayın:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right; font-size:10px'>Page {page} of {total-pages}</div>"
};

var basePdf = renderer.RenderHtmlAsPdf(baseHtml);

basePdf.AddHtmlHeadersAndFooters(renderer.RenderingOptions);

var supplementPdf = PdfDocument.FromFile("supplement.pdf");
basePdf.InsertPdf(supplementPdf, 0);

basePdf.SaveAs("output.pdf");

Seçenek 2: Erken Toplamayı Önlemek için GC.KeepAlive Kullanın

İşlem sırası değiştirilemiyorsa, kaynak PdfDocument 'in yönetilen ömrünü AddHtmlHeadersAndFooters çağrısının ötesine genişletin:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:right; font-size:10px'>Page {page} of {total-pages}</div>"
};

var basePdf = renderer.RenderHtmlAsPdf(baseHtml);
var supplementPdf = PdfDocument.FromFile("supplement.pdf");

basePdf.InsertPdf(supplementPdf, 0);
basePdf.AddHtmlHeadersAndFooters(renderer.RenderingOptions);

GC.KeepAlive(supplementPdf);

basePdf.SaveAs("output.pdf");

AddHtmlHeadersAndFooters sonrasına yerleştirilen GC.KeepAlive(supplementPdf), JIT'in, yerel birleştirme tamamlanmadan önce supplementPdf toplanmasını planlamasını önler.

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

Daha Fazla Oku

Başlamaya Hazır mısınız?

Nuget Downloads 21,739,885Sürüm:2026.10yeni yayınlandı