使用直接内容写入绝对位置
Writing to absolute position while using direct content
我正在创建一个 pdf 文档。首先,我向 PdfWriter 添加了一个 table 和一些文本。现在我想添加一个服装模板(包括图像和文本):我必须获得直接内容,它是 PdfWriter 层之上的一层:
over= PdfWriter.getDirectContent();
我想在 PdfWriter-layer 的内容之后设置模板。
我可以使用
writer.getVerticalPosition(true)
用于计算 PdfWriter 层上的 y 位置。
这样我就可以将服装模板添加到该位置的上层。现在回到 PdfWriter-layer 我怎样才能在 over-layer 的模板之后设置 PdfWriter-layer 的位置?!
有人可以帮忙吗?
提前致谢。
混合内容添加document.add()
和直接内容我们总是一个微妙的操作。您需要知道 自定义模板 的高度,然后添加一些与该高度匹配的白色 space。然而:如果自定义模板的内容与页面不匹配,你打算怎么办?
我会反对你的计划,我会推荐另一种方法。
我假设您的自定义模板是一个 PdfTemplate
对象。在这种情况下,您可以将此对象包装在 Image
对象中,然后使用 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);
我们想将此 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
对象中不会将其更改为光栅数据。矢量数据将被保留。这在条形码示例中很重要,因为您不希望将条形码制作成光栅图像而降低条形码的质量。
我正在创建一个 pdf 文档。首先,我向 PdfWriter 添加了一个 table 和一些文本。现在我想添加一个服装模板(包括图像和文本):我必须获得直接内容,它是 PdfWriter 层之上的一层:
over= PdfWriter.getDirectContent();
我想在 PdfWriter-layer 的内容之后设置模板。 我可以使用
writer.getVerticalPosition(true)
用于计算 PdfWriter 层上的 y 位置。 这样我就可以将服装模板添加到该位置的上层。现在回到 PdfWriter-layer 我怎样才能在 over-layer 的模板之后设置 PdfWriter-layer 的位置?!
有人可以帮忙吗? 提前致谢。
混合内容添加document.add()
和直接内容我们总是一个微妙的操作。您需要知道 自定义模板 的高度,然后添加一些与该高度匹配的白色 space。然而:如果自定义模板的内容与页面不匹配,你打算怎么办?
我会反对你的计划,我会推荐另一种方法。
我假设您的自定义模板是一个 PdfTemplate
对象。在这种情况下,您可以将此对象包装在 Image
对象中,然后使用 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);
我们想将此 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
对象中不会将其更改为光栅数据。矢量数据将被保留。这在条形码示例中很重要,因为您不希望将条形码制作成光栅图像而降低条形码的质量。