java - 在 iText 7 中实现 PdfContentByte 和 PdfTemplate 的替代方法是什么

标签 java itext itext7

我正在努力从 iText 5 迁移到 iText 7。我的 iText 5 代码如下。我不确定应该使用 iText 7 中的哪种替代方案(可能是 Canvas)来实现 PdfContentBytePdfTemplate

produce(com.itextpdf.text.pdf.PdfWriter writer, width, height, ...) {
     com.itextpdf.text.pdf.PdfContentByte cb = writer.getDirectContent();
     com.itextpdf.text.pdf.PdfTemplate template = cb.createTemplate(width, height);
     try
    {
        template.beginText();

        template.setFontAndSize(font, fontSize);

        template.setTextMatrix(0, 0);

        template.showTextAligned(com.itextpdf.text.pdf.PdfContentByte.ALIGN_CENTER, value, width/2, linePos, 0);
        template.endText();
    }
    catch(Exception e)
    {   
    }

    cb.addTemplate(template, left, areaTop - top - height);
}

任何人都可以建议实现此目的的正确替代方案吗?

谢谢!

最佳答案

iText 5 PdfWriter.getDirectContent() 返回的 PdfContentByte 实例本质上是当前页面的内容加上许多添加更多内容的方法。

iText 5 PdfTemplate 本质上是一个 PDF 表单 XObject 及其内容以及许多添加更多内容的方法。

在 iText 7 中,有专门的类 PdfPagePdfFormXObject 分别用于页面和 PDF 表单 XObjects,还有类 PdfCanvas >Canvas 分别提供低级和高级方法来向页面添加更多内容或形成 XObjects。

因此,以下内容大致对应于您的 iText 5 代码:

PdfDocument pdfDoc = ...
PdfPage page = ... // e.g. pdfDoc.addNewPage();

PdfFormXObject pdfFormXObject = new PdfFormXObject(new Rectangle(width, height));
try (Canvas canvas = new Canvas(pdfFormXObject, pdfDoc)) {
    canvas.showTextAligned(value, width/2, linePos, TextAlignment.CENTER);
}

PdfCanvas pdfCanvas = new PdfCanvas(page);
pdfCanvas.addXObject(pdfFormXObject, left, bottom);

(来自 AddCanvasToDocument 测试 testAddCanvasForManjushaDC)

我说“大约”是因为 iText 5 和 iText 7 的架构不同,因此不一定有精确的对应关系,特别是 iText 5 中的最佳实践不会直接转化为 iText 7 中的最佳实践。

关于java - 在 iText 7 中实现 PdfContentByte 和 PdfTemplate 的替代方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63055889/

相关文章:

Java 接口(interface) : Calling an implementation class based on object types

java - 32 位 JRE 中的 jna 指针

java - 使用 itext 在一个单元格中的同一行中显示图像和文本

java - 为什么之前在 Itext7 中没有使用内容流将字体嵌入到 PDF 中?

itext - 是否可以使用iText7合并多个PDF

java - itext7 Java 为现有 pdf 中的标题创建 PdfExplicitDestination

java - Spring框架在测试应用方面有哪些优势?

java - Oracle 数据库更改事件 - 获取更改行

java - 无法使用 acrofields 为 Ms Word 中的表单设置字段值

c# - 无法从程序集 'iTextSharp.text.html.HtmlParser' 加载类型 'itextsharp, Version=5.5.5.0, Culture=neutral, PublicKeyToken=8354ae6d2174ddca'