Java 在iText 7中实现PdfContentByte和PdfTemplate的替代方法是什么
我正在进行从iText 5到iText 7的迁移。我有如下的iText 5代码。我不确定应该使用iText 7(可能是Canvas)中的哪个选项来实现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();
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 5PdfTemplate
本质上是一个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中的最佳实践