如何在IText7(C#)中将添加的文字置于PDF页面内容底层?
解决iText7添加内容覆盖原有PDF内容的问题
要让添加的文字置于原有内容底层,核心是把内容写入页面的底层内容流,而非默认的顶层流。你的原有代码直接在页面顶层添加内容,所以会覆盖原有内容,修改方法如下:
修改后的代码
PdfPage pag = pdfDocument.GetLastPage(); // 获取页面的底层内容流,创建对应Canvas PdfCanvas underCanvas = new PdfCanvas(pag.GetUnderContent()); Canvas canvas = new Canvas(underCanvas, pag.GetPageSize()); var div = new Div().SetMargin(0).SetPadding(0).SetKeepTogether(true); div.SetFixedPosition(0, 0, pag.GetPageSize().GetWidth()); div.Add(new Paragraph("info").SetFontSize(12)); canvas.Add(div); canvas.Close();
关键说明
- iText7中每个PDF页面包含两个内容流:顶层(
GetContentStream())和底层(GetUnderContent())。默认创建的Canvas绑定顶层流,新内容会绘制在原有内容之上; - 通过
pag.GetUnderContent()获取底层流后,基于它创建的Canvas会把内容写入底层,原有内容会自然覆盖在新添加的文字之上,符合预期效果; - 若要给所有页面添加信息,只需遍历
pdfDocument.GetPages()中的每一页,重复上述逻辑即可。
内容的提问来源于stack exchange,提问作者Erik Olivares
相关产品推荐
相关产品推荐

