You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iText 5中PdfGraphics2D类在iText 7中的等效类及迁移方案咨询

迁移iText 2.1.5到iText 7:替代PdfGraphics2D的方案

嘿,我刚好帮团队做过iText 2到7的迁移,碰到过和你一样的问题——找不到对应iText 5里PdfGraphics2D的东西。其实iText7里是有替代方案的,只是位置和用法有点调整,结合你的场景(PDF由其他库生成,仅用iText渲染图形),给你梳理下具体步骤:

1. 先搞定依赖

iText7把AWT相关的功能拆分到了单独的模块里,所以你需要额外引入itext7-awt依赖(以Maven为例):

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.2.5</version> <!-- 建议用最新稳定版 -->
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-awt</artifactId>
    <version>7.2.5</version>
</dependency>

2. 核心代码示例:在现有PDF上绘制图形

你的场景是PDF由其他库生成,所以第一步是用iText7加载这个现有文档,然后获取目标页面的画布,再创建PdfGraphics2D对象来绘制:

import com.itextpdf.awt.PdfGraphics2D;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;

import java.awt.Color;
import java.awt.Graphics2D;

public class GraphicsMigrationDemo {
    public static void main(String[] args) throws Exception {
        // 1. 读取现有PDF,准备写入修改后的文档
        PdfReader reader = new PdfReader("your-existing-document.pdf");
        PdfWriter writer = new PdfWriter("modified-document-with-graphics.pdf");
        PdfDocument pdfDoc = new PdfDocument(reader, writer);

        // 2. 获取要绘制图形的页面(iText7页面索引从1开始)
        PdfPage targetPage = pdfDoc.getPage(1);
        PdfCanvas canvas = new PdfCanvas(targetPage);

        // 3. 创建PdfGraphics2D对象,绑定画布和页面尺寸
        Rectangle pageSize = targetPage.getPageSize();
        Graphics2D g2d = new PdfGraphics2D(canvas, pageSize.getWidth(), pageSize.getHeight());

        // 🔔 可选:调整坐标系统(iText默认原点在左下角,AWT默认在左上角)
        // 如果你的原有代码习惯AWT坐标,加上这两行翻转坐标系
        g2d.translate(0, pageSize.getHeight());
        g2d.scale(1, -1);

        // 4. 用标准Graphics2D API绘制图形(和你原来的代码逻辑一致)
        g2d.setColor(Color.BLUE);
        g2d.fillRect(100, 100, 300, 200);
        g2d.setColor(Color.WHITE);
        g2d.drawString("Rendered with iText 7 PdfGraphics2D", 120, 200);

        // 5. 释放资源,完成修改
        g2d.dispose();
        pdfDoc.close();
        reader.close();
        writer.close();
    }
}

3. 关键注意事项

  • 包名变化:iText5的com.itextpdf.text.pdf.PdfGraphics2D在iText7里移到了com.itextpdf.awt.PdfGraphics2D,这也是很多人找不到它的原因,别忘了引入itext7-awt模块。
  • 坐标系统差异:iText的PDF坐标原点在左下角,而AWT的Graphics2D默认在左上角,如果你原有代码依赖AWT的坐标逻辑,一定要加上坐标翻转的代码,避免图形位置错乱。
  • 逐步验证:如果你的原有代码有大量复杂的图形渲染逻辑(比如自定义字体、复杂变换),建议先做小范围的POC验证,因为iText7的PdfGraphics2D在一些细节上和旧版本有差异,比如字体处理的方式。

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

火山引擎 最新活动