我是iText的新手,面对一个关于在段落中添加外部图像的真实有趣案例。事情就是这样:
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("out2.pdf"));
document.open();
Paragraph p = new Paragraph();
Image img = Image.getInstance("blablabla.jpg");
img.setAlignment(Image.LEFT| Image.TEXTWRAP);
// Notice the image added to the Paragraph through a Chunk
p.add(new Chunk(img2, 0, 0, true));
document.add(p);
Paragraph p2 = new Paragraph("Hello Worlddd!");
document.add(p2);
给我的照片和“Hello Worlddd!”以下字符串。但是,
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("out2.pdf"));
document.open();
Paragraph p = new Paragraph();
Image img = Image.getInstance("blablabla.jpg");
img.setAlignment(Image.LEFT| Image.TEXTWRAP);
// Notice the image added directly to the Paragraph
p.add(img);
document.add(p);
Paragraph p2 = new Paragraph("Hello Worlddd!");
document.add(p2);
给我图片和字符串“Hello worlddd!”位于图片的右侧,上面有一行。
这种差异背后的逻辑是什么?
答案 0 :(得分:5)
您描述的行为是因为在第二个代码段中,段落不会调整其前导,而是调整其宽度。如果在第二个片段中添加了行
p.add("Hello world 1")
之前
p.add(img)
你会在左边看到字符串“Hello world 1”,并在字符串“Hello Worlddd!”上方稍微看一下。如果输出p的前导(System.out.println(p.getLeading()),您可以看到它的数字较小(通常为16),而不是图像的高度。
在第一个示例中,您使用具有4个参数的块构造函数
new Chunk(img, 0, 0, true)
用最后一个(true)说调整前导,所以按预期打印。
答案 1 :(得分:0)
如果直接添加图像,则其对齐属性(设置为 setAlignment())被考虑在内。因此图像位于左侧(Image.LEFT),文本被包裹(Image.TEXTWRAP)。
如果将图像包装在Chunk中,则将其视为一大块 文本。因此,特定于图像的对齐属性将丢失。这导致文本低于图像。
如果您尝试使用Image.RIGHT,这一点就会变得更加明显。第一个示例中没有任何变化:图像仍然在左侧。在第二个示例中,图像与右侧对齐,文本在其左侧包裹。