iText7是否支持使用Graphics2D?附iText5原有实现方式
在iText7中使用Graphics2D的解决方案
别担心,完全可以在iText7里继续使用Graphics2D进行绘制!虽然iText7重构了核心API,移除了iText5中的PdfContentByte类,但它提供了专门的类来桥接AWT的Graphics2D功能,实现逻辑和iText5类似,只是入口类有所变化。
具体实现步骤与代码示例
以下是完整的实现代码,对应你在iText5中的需求:
import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfPage; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.awt.PdfGraphics2D; import java.awt.Color; import java.awt.Graphics2D; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Paragraph; public class Graphics2DInItext7 { public static void main(String[] args) throws Exception { // 1. 初始化PDF文档和Writer PdfDocument pdfDoc = new PdfDocument(new PdfWriter("graphics2d_output.pdf")); // 使用旋转后的A3页面 Rectangle pageSize = PageSize.A3.rotate(); Document doc = new Document(pdfDoc, pageSize); // 2. 获取当前页面的PdfCanvas(替代iText5的PdfContentByte) PdfPage page = pdfDoc.addNewPage(); PdfCanvas canvas = new PdfCanvas(page); // 3. 创建Graphics2D对象 Graphics2D g2d = new PdfGraphics2D(canvas, pageSize.getWidth(), pageSize.getHeight()); // 4. 用Graphics2D执行绘制操作(和AWT的用法完全一致) g2d.setColor(Color.RED); g2d.drawRect(100, 100, 300, 200); // 绘制矩形 g2d.setColor(Color.BLACK); g2d.drawString("使用Graphics2D在iText7中绘制内容", 120, 180); // 绘制文本 // 你也可以添加更复杂的绘制,比如自定义形状、图像等 // 5. 关键步骤:结束Graphics2D绘制,将内容刷新到PDF中 g2d.dispose(); // 可选:添加其他iText7原生元素 doc.add(new Paragraph("这是iText7原生Canvas之外的内容")); // 关闭文档 doc.close(); } }
核心要点说明
- 替代类对应关系:iText7中的
PdfCanvas就是iText5PdfContentByte的替代者,负责底层的PDF内容绘制操作。 - PdfGraphics2D类:这是iText7专门提供的AWT Graphics2D适配器,通过它可以直接将AWT的绘制逻辑映射到PDFCanvas上。
- 必须调用dispose():绘制完成后一定要调用
g2d.dispose(),这个方法会把Graphics2D中缓存的绘制指令全部写入PDFCanvas,否则你的绘制内容不会出现在最终的PDF里。 - 兼容性:所有AWT Graphics2D支持的绘制操作(比如形状、文本、图像、变换等)都可以在这里使用,和你在iText5中的使用习惯完全兼容。
内容的提问来源于stack exchange,提问作者Neph
相关产品推荐
相关产品推荐

