Itext 使用直接内容时写入到绝对位置

Itext 使用直接内容时写入到绝对位置,itext,Itext,我正在创建一个pdf文档。首先,我向PdfWriter添加了一个表和一些文本。现在我想添加一个costum模板(包括图像和文本):我必须获得直接内容,它位于PdfWriter层之上: over= PdfWriter.getDirectContent(); 我想在PdfWriter层上的内容之后设置模板。 我可以用 writer.getVerticalPosition(true) 用于计算PdfWriter层上的y位置。 通过这种方式,我可以将肋骨模板添加到该位置的上层。现在回到PdfWri

我正在创建一个pdf文档。首先,我向PdfWriter添加了一个表和一些文本。现在我想添加一个costum模板(包括图像和文本):我必须获得直接内容,它位于PdfWriter层之上:

over= PdfWriter.getDirectContent();
我想在PdfWriter层上的内容之后设置模板。 我可以用

writer.getVerticalPosition(true) 
用于计算PdfWriter层上的y位置。 通过这种方式,我可以将肋骨模板添加到该位置的上层。现在回到PdfWriter层,如何设置PdfWriter层在层上温度之后的位置

有人能帮忙吗?
提前感谢。

将添加的内容与
文档混合。添加()
和直接内容始终是一个微妙的操作。您需要知道自定义模板的高度,然后添加一些与该高度匹配的空白。但是:如果自定义模板的内容与页面不匹配,您将怎么做

我会反对你的计划,并推荐另一种方法。

我假设您的自定义模板是
PdfTemplate
对象。在这种情况下,您可以将此对象包装在
图像
对象中,并使用
document.add()
添加模板

例如,见:

在本例中,我们创建了一个带有条形码和一些文本的
PdfTemplate

PdfTemplate template = canvas.createTemplate(rect.getWidth(), rect.getHeight() + 10);
ColumnText.showTextAligned(template, Element.ALIGN_LEFT,
        new Phrase("DARK GRAY", regular), 0, rect.getHeight() + 2, 0);
barcode.placeBarcode(template, BaseColor.BLACK, BaseColor.BLACK);
我们希望将此
模板
添加到带有
document.add()
的文档中,因此我们将模板包装在
图像
对象中:

Image image = Image.getInstance(template);
现在,我们可以将此图像添加到文档中:

document.add(image);
之后,我们可以添加额外的内容:

Paragraph p3 = new Paragraph("SMALL", regular);
p3.setAlignment(Element.ALIGN_CENTER);
document.add(p3);
该内容添加在右侧的
模板下。您不必再担心使用
getVerticalPosition()
获取Y位置,也不必担心在添加模板后设置Y位置。如果模板不适合当前页面,它将自动移动到下一页


重要提示:您可能担心模板的分辨率。你不应该这样。如果模板由矢量数据组成,则将该数据包装在
图像
对象中不会将其更改为光栅数据。矢量数据将被保留。这在条形码示例中很重要,因为您不希望条形码的质量因光栅图像而恶化。

将添加的内容与
文档混合。添加()
和直接内容始终是一个微妙的操作。您需要知道自定义模板的高度,然后添加一些与该高度匹配的空白。但是:如果自定义模板的内容与页面不匹配,您将怎么做

我会反对你的计划,并推荐另一种方法。

我假设您的自定义模板是
PdfTemplate
对象。在这种情况下,您可以将此对象包装在
图像
对象中,并使用
document.add()
添加模板

例如,见:

在本例中,我们创建了一个带有条形码和一些文本的
PdfTemplate

PdfTemplate template = canvas.createTemplate(rect.getWidth(), rect.getHeight() + 10);
ColumnText.showTextAligned(template, Element.ALIGN_LEFT,
        new Phrase("DARK GRAY", regular), 0, rect.getHeight() + 2, 0);
barcode.placeBarcode(template, BaseColor.BLACK, BaseColor.BLACK);
我们希望将此
模板
添加到带有
document.add()
的文档中,因此我们将模板包装在
图像
对象中:

Image image = Image.getInstance(template);
现在,我们可以将此图像添加到文档中:

document.add(image);
之后,我们可以添加额外的内容:

Paragraph p3 = new Paragraph("SMALL", regular);
p3.setAlignment(Element.ALIGN_CENTER);
document.add(p3);
该内容添加在右侧的
模板下。您不必再担心使用
getVerticalPosition()
获取Y位置,也不必担心在添加模板后设置Y位置。如果模板不适合当前页面,它将自动移动到下一页


重要提示:您可能担心模板的分辨率。你不应该这样。如果模板由矢量数据组成,则将该数据包装在
图像
对象中不会将其更改为光栅数据。矢量数据将被保留。这在条形码示例中很重要,因为您不希望条形码的质量因光栅图像而恶化。

Bruno Lowagie:非常感谢!你救了我一天:)布鲁诺·洛瓦吉:非常感谢你!你救了我一天:)