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

如何用iText7在现有PDF指定位置添加图片?找不到PdfStamper替代方法

在iText7中为现有PDF指定位置添加图片

嗨,我刚好做过iTextSharp到iText7的代码迁移,太懂你的困惑了!确实iText7去掉了PdfStamper,换成了更面向对象的API来处理现有文档,下面是完全对应你原有逻辑的实现方案:

核心思路

iText7用PdfDocument结合Canvas组件来实现“在现有页面叠加内容”的需求,完全替代原来PdfStamper.GetOverContent()的功能,逻辑上和你熟悉的写法一致,只是API名称和结构有调整。

完整代码示例

// 1. 初始化PDF读取器和写入器,以修改模式打开现有文档
using (PdfReader reader = new PdfReader("你的源PDF文件路径"))
using (PdfWriter writer = new PdfWriter("处理后的输出PDF路径"))
using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
{
    // 2. 获取目标页面(iText7页码从1开始,对应你原来的第1页)
    PdfPage targetPage = pdfDoc.GetPage(1);
    
    // 3. 创建Canvas对象,用于在页面上层绘制内容(对应iTextSharp的GetOverContent)
    Canvas canvas = new Canvas(targetPage.GetOverContent(), pdfDoc);
    
    // 4. 加载图片(替代iTextSharp的Image.GetInstance)
    ImageData imageData = ImageDataFactory.Create("你的图片完整路径");
    Image img = new Image(imageData);
    
    // 5. 设置图片尺寸和位置,和你原来的逻辑完全匹配
    img.ScaleAbsolute(120, 62); // 固定图片宽高
    img.SetFixedPosition(25, 25); // 设置左下角坐标(x=25, y=25)
    
    // 6. 将图片添加到Canvas
    canvas.Add(img);
    
    // 7. 关闭Canvas(可选,但属于良好编码习惯)
    canvas.Close();
}

关键API对应说明

  • PdfStamper.GetOverContent(1) → new Canvas(page.GetOverContent(), pdfDoc):获取页面的上层内容画布,用来叠加图片
  • iTextSharp.text.Image.GetInstance() → ImageDataFactory.Create() + new Image(imageData):iText7将图片数据和图片对象拆分,适配更多数据源场景
  • img.SetAbsolutePosition() → img.SetFixedPosition():功能完全一致,都是设置图片在页面的绝对坐标
  • cb.AddImage(img) → canvas.Add(img):将图片添加到画布完成绘制

额外小提示

  • 如果需要在页面下层添加图片(比如作为背景),可以用targetPage.GetUnderContent()替代GetOverContent()
  • 图片来源支持本地路径、字节流、Uri等,ImageDataFactory有多个重载可以直接使用
  • 所有资源一定要用using语句包裹,避免PDF文件被锁定或资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:26:46