IRONSOFTWAREHOME

InsertPdf後出現AccessViolationException,附HTML頁首/頁尾

Curtis Chau
Curtis Chau
Updated: 2026年6月12日

在使用InsertPdf合併來自另一個文件的頁面後,對PdfDocument呼叫AddHtmlHeaders時會拋出AccessViolationException。 在Debug構建中或附加除錯器時,該例外狀況不會發生。

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

在Release構建中,.NET JIT優化器允許垃圾回收器在管理程式碼能證明物件不會被再次引用後,在其詞彙範疇結束之前回收管理物件。 傳遞給InsertPdfPdfDocument可以在IronPDF的原生Chrome層仍在讀取時被回收。 隨後的AddHtmlHeaders呼叫然後存取已釋放的記憶體,導致存取衝突。

解決方案

選擇1:在InsertPdf之前應用頁首和頁尾(推薦)

重新排列操作順序,使頁首和頁尾在插入任何頁面之前寫入到基本文件中:

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.AddHtmlHeaders(renderer.RenderingOptions.HtmlHeader);

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

basePdf.SaveAs("output.pdf");
C#

選擇2:使用GC.KeepAlive防止過早回收

如果無法改變操作順序,則將來源PdfDocument的受管理生命週期延長至AddHtmlHeaders呼叫之後:

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.AddHtmlHeaders(renderer.RenderingOptions.HtmlHeader);

GC.KeepAlive(supplementPdf);

basePdf.SaveAs("output.pdf");
C#

放置在AddHtmlHeaders之後的GC.KeepAlive(supplementPdf)可防止JIT在原生合併完成前排程回收supplementPdf

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

準備開始了嗎?

Nuget Downloads 20,878,335版本:2026.9剛剛發布

立即獲取您的免費30天試用密鑰
不需要信用卡或建立賬戶
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.9

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999

有問題嗎?聯絡我們的開發團隊。

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立