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

Java 在iText 7中实现PdfContentByte和PdfTemplate的替代方法是什么,java,itext,itext7,Java,Itext,Itext7,我正在进行从iText 5到iText 7的迁移。我有如下的iText 5代码。我不确定应该使用iText 7(可能是Canvas)中的哪个选项来实现PdfContentByte和PdfTemplate produce(com.itextpdf.text.pdf.PdfWriter writer, width, height, ...) { com.itextpdf.text.pdf.PdfContentByte cb = writer.getDirectContent();

我正在进行从iText 5到iText 7的迁移。我有如下的iText 5代码。我不确定应该使用iText 7(可能是Canvas)中的哪个选项来实现
PdfContentByte
PdfTemplate

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中,页面和PDF表单XObject分别有专用类
PdfPage
PdfFormXObject
,还有类
PdfCanvas
Canvas
分别提供低级和高级方法,向页面或表单XObject添加更多内容

因此,以下内容大致对应于您的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);
(来自测试
testAddCanvasForManjushaDC

我之所以说“近似”,是因为iText 5和iText 7的体系结构不同,因此不一定有确切的对应关系,特别是iText 5中的最佳实践不会直接转化为iText 7中的最佳实践