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

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

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(...)

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");
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");
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "<div style='text-align:right; font-size:10px'>Page {page} of {total-pages}</div>"
}

Dim basePdf = renderer.RenderHtmlAsPdf(baseHtml)

basePdf.AddHtmlHeadersAndFooters(renderer.RenderingOptions)

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

basePdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

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");
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");
Imports IronPdf

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

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

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

GC.KeepAlive(supplementPdf)

basePdf.SaveAs("output.pdf")
$vbLabelText   $csharpLabel

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

Curtis Chau
Teknik Yazar

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ı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 20,088,359 | Sürüm: 2026.7 yeni yayınlandı
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.