如何用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
相关产品推荐
相关产品推荐

