我正在创建一个pdf文档。首先,我向PdfWriter添加一个表和一些文本。现在我想添加一个costum模板(包括图像和文本):我必须得到直接内容,它是PdfWriter层上的一层:
over= PdfWriter.getDirectContent();
我想在PdfWriter-layer上的内容之后准确设置模板。 我可以用
writer.getVerticalPosition(true)
用于计算PdfWriter层的y位置。 这样我就可以将costum模板添加到该位置的上层。现在回到PdfWriter层,如何在over-layer上的tempalte之后设置PdfWriter-layer的位置?!
有人可以帮忙吗? 提前谢谢。
答案 0 :(得分:0)
将添加了document.add()
和直接内容的内容混合在一起我们始终是一项微妙的操作。您需要知道自定义模板的高度,然后添加一些与该高度匹配的空白区域。但是:如果自定义模板的内容与页面不匹配,您打算做什么?
我会反对你的计划,我建议采用另一种方法。
我假设您的自定义模板是PdfTemplate
对象。在这种情况下,您可以将此对象包装在Image
对象中,并使用document.add()
添加模板。
例如参见:Changing Font on PDF Rotated Text
在此示例中,我们使用条形码和一些文本创建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);
我们希望将此template
添加到document.add()
的文档中,因此我们将模板包装在Image
对象中:
Image image = Image.getInstance(template);
我们现在可以将此图像添加到文档中:
document.add(image);
之后,我们可以添加额外的内容:
Paragraph p3 = new Paragraph("SMALL", regular);
p3.setAlignment(Element.ALIGN_CENTER);
document.add(p3);
该内容会添加到template
下的正确位置。您不必再担心使用getVerticalPosition()
获取Y位置,并且在添加模板后无需担心设置Y位置。如果模板不适合当前页面,它将自动移动到下一页。
重要提示:也许您担心模板的解析。你不应该。如果模板由矢量数据组成,则将该数据包装在Image
对象中不会将其更改为栅格数据。矢量数据将被保留。这在条形码示例中很重要,因为您不希望条形码的质量因光栅图像而恶化。