6

我是 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!” 位于图片的右侧和上方的一行。

这种差异背后的逻辑是什么?

4

2 回答 2

9

您描述的行为是因为在第二个代码片段中 Paragraph没有调整其前导,而是调整其宽度。如果在第二个片段中添加该行

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)

最后(真实)说调整前导,所以它按您的预期打印。

于 2012-06-21T06:29:58.630 回答
0

如果直接添加图像,则会考虑其对齐属性(使用 setAlignment() 设置)。所以图像在左边(Image.LEFT),文本环绕(Image.TEXTWRAP)。

如果您将图像包装在一个块中,它的处理方式就好像它是一块文本一样。因此,特定于图像的对齐属性会丢失。这导致文本位于图像下方。

如果您尝试 Image.RIGHT,这将变得更加明显。第一个示例中没有任何变化:图像仍然在左侧。在第二个示例中,图像向右对齐,文本在其左侧环绕。

于 2012-07-17T06:41:20.733 回答