IRONSOFTWAREHOME

在使用HTML页眉/页脚的InsertPdf后发生AccessViolationException

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

在另一个文档的页面合并后调用AccessViolationException。 在Debug构建或附加调试器时不会发生此异常。

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构建中,.NET JIT优化器允许垃圾回收器在托管对象不再被托管代码引用时,在它们的词法作用域结束前回收托管对象。 传递给PdfDocument可以在IronPDF的本地Chrome层仍在读取时被回收。 随后的AddHtmlHeadersAndFooters调用会访问已释放的内存,从而产生访问冲突。

解决方案

选项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.AddHtmlHeadersAndFooters(renderer.RenderingOptions);

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

basePdf.SaveAs("output.pdf");

选项2:使用GC.KeepAlive防止提前回收

如果操作顺序不能更改,则延长PdfDocument的托管生命周期:

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

supplementPdf的回收。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

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 天试用密钥
无需信用卡或创建账户