You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用iTextSharp在多页现有PDF的指定页面写入文本

解决多页PDF指定页面添加文本的问题

你的原代码只处理了单页PDF,因为它是从头创建新文档的,没有保留原PDF的多页内容。要实现多页PDF的指定页面写入文本,我们需要用PdfStamper来修改现有PDF,而不是重新生成文档。下面是完整的解决方案:

核心思路

  1. 用PdfReader读取原PDF的所有页面内容
  2. 用PdfStamper在原PDF基础上添加文本,保留原有所有页面
  3. 遍历每一页,根据页码判断要写入的文本内容
  4. 在对应页面的内容层添加指定文本

完整代码示例

string oldFile = System.Web.Hosting.HostingEnvironment.MapPath("~/AuthDoc/CoverPage.pdf");
string newFile = System.Web.Hosting.HostingEnvironment.MapPath("test.pdf");

// 使用using语句确保资源自动释放
using (PdfReader reader = new PdfReader(oldFile))
{
    using (FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
    using (PdfStamper stamper = new PdfStamper(reader, fs))
    {
        // 定义字体(可根据需求调整样式、大小、颜色)
        BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        Font textFont = new Font(baseFont, 12, Font.NORMAL, BaseColor.BLACK);

        // 遍历所有页面(iTextSharp中页码从1开始)
        for (int pageNum = 1; pageNum <= reader.NumberOfPages; pageNum++)
        {
            // 获取当前页的内容层(OVER_LAY表示在原有内容上方添加文本)
            PdfContentByte contentLayer = stamper.GetOverContent(pageNum);

            // 根据页码匹配要写入的文本
            string targetText = pageNum switch
            {
                2 => "Hitesh Second Page",
                3 => "Hitesh Third Page",
                // 其他页面可以设置默认文本或留空
                _ => string.Empty
            };

            if (!string.IsNullOrWhiteSpace(targetText))
            {
                // 开始写入文本操作
                contentLayer.BeginText();
                contentLayer.SetFontAndSize(baseFont, textFont.Size);
                // 设置文本位置:x=50(距左边界),y=50(距下边界),可自行调整
                contentLayer.SetTextMatrix(50, 50);
                contentLayer.ShowText(targetText);
                contentLayer.EndText();
            }
        }
    }
}

关键细节说明

  • 为什么用PdfStamper?:原代码用Document+PdfWriter是从头创建新PDF,无法直接复用原PDF的多页内容。PdfStamper的作用就是在现有PDF上做修改,会完整保留原文档的所有页面和格式。
  • 文本位置调整:SetTextMatrix(x, y)的坐标是以页面左下角为原点的,你可以根据需求修改x和y的值,把文本放在页面的任意位置。
  • 字体自定义:如果需要使用特定字体(比如中文),可以替换BaseFont.CreateFont的参数,指定字体文件路径即可。
  • 资源释放:所有实现了IDisposable的对象都用using包裹,避免内存泄漏和文件占用问题。

内容的提问来源于stack exchange,提问作者Hitesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:56