You need to enable JavaScript to run this app. 如何使用iText7和C#向现有PDF添加文本且不覆盖原有内容
优惠活动
大模型
产品
解决方案
定价
更多

如何使用iText7和C#向现有PDF添加文本且不覆盖原有内容

问题根源

你当前的代码核心问题是没有将原有cat.pdf的内容加载到待编辑的PDF文档对象中:创建PdfDocument时仅传入了输出用的PdfWriter,相当于新建了空白PDF仅写入txt内容,原有cat.pdf的内容完全没有被导入,声明的readerFile对象没有被实际使用,属于无效代码。

解决方案

场景1:在cat.pdf所有内容的末尾追加txt文本(不覆盖任何原有内容包括图片)

这是最常见的需求场景,只需要修改PdfDocument的构造逻辑,同时传入读取原PDF的PdfReader和写入目标文件的PdfWriter即可,原有内容会被完整保留,新文本会自动追加到文档末尾。
修正后的代码如下:

// 定义文件路径
string sourcePdfPath = @"C:\InesProjetos\PrintTextWithImage\PrintTextWithImage\cat.pdf";
string destPdfPath = @"C:\demo.pdf";
string textPath = @"C:\InesProjetos\PrintTextWithImage\PrintTextWithImage\text.txt";

// 读取txt文本内容,用using自动释放资源
string textContent;
using (StreamReader rdr = new StreamReader(textPath))
{
    textContent = rdr.ReadToEnd();
}

// 同时传入原PDF读取器和目标PDF写入器,自动导入原PDF内容
using (PdfReader reader = new PdfReader(sourcePdfPath))
using (PdfWriter writer = new PdfWriter(destPdfPath))
using (PdfDocument pdf = new PdfDocument(reader, writer))
using (Document document = new Document(pdf))
{
    // 追加文本到文档末尾,不会覆盖原有内容
    document.Add(new Paragraph(textContent));
}

场景2:在PDF内指定图片的紧后方插入文本(不是追加到文档末尾)

如果需要定位到具体图片的位置插入文本,需要额外增加元素识别逻辑:

  • 遍历PdfDocument的每一页,解析页面中的所有元素
  • 匹配到目标图片后,获取图片的底部Y坐标和所在页码
  • 在同页面该坐标的下方写入目标文本即可

补充疑问解答

  • 你声明的readerFile必须传入PdfDocument的构造函数才能生效,否则就是未使用的无效对象
  • 确实需要先将cat.pdf的内容导入到目标PDF中再添加文本,上述代码中PdfDocument(reader, writer)的构造逻辑就已经实现了该功能:构造时会自动把原PDF的所有内容复制到目标PDF的编辑流中,后续添加的内容会在原有基础上追加,不会覆盖原有内容。

内容的提问来源于stack exchange,提问作者Inês Borges

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 03:09:02