当您像这样将文本组合成 Paragraph 时:
Paragraph p = new Paragraph("abc" + "def");
您隐含地告诉 iText "abc" 和 "def" 应该使用相同的(默认)字体呈现。您可能知道,Paragraph 是 Chunk 对象的集合。在 iText 中,Chunk 就像文本的原子部分,因为 Chunk 中的所有文本都具有相同的字体、字体大小、字体颜色等......
如果您想创建一个具有不同字体颜色的Paragraph,您需要使用不同的Chunk 对象来组合您的Paragraph。这显示在 ColoredText 示例中:
Font red = new Font(FontFamily.HELVETICA, 12, Font.NORMAL, BaseColor.RED);
Chunk redText = new Chunk("This text is red. ", red);
Font blue = new Font(FontFamily.HELVETICA, 12, Font.BOLD, BaseColor.BLUE);
Chunk blueText = new Chunk("This text is blue and bold. ", blue);
Font green = new Font(FontFamily.HELVETICA, 12, Font.ITALIC, BaseColor.GREEN);
Chunk greenText = new Chunk("This text is green and italic. ", green);
Paragraph p1 = new Paragraph(redText);
document.add(p1);
Paragraph p2 = new Paragraph();
p2.add(blueText);
p2.add(greenText);
document.add(p2);
在这个例子中,我们创建了两个段落。一个带有一个红色的Chunk。另一个包含两个不同颜色的Chunks。
在您的问题中,您指的是ColumnText。下一个代码 sn-p 在 ColumnText 上下文中使用 p1 和 p2:
ColumnText ct = new ColumnText(writer.getDirectContent());
ct.setSimpleColumn(new Rectangle(36, 600, 144, 760));
ct.addElement(p1);
ct.addElement(p2);
ct.go();
因此,段落被添加了两次:一次由 iText 定位,一次通过使用Rectangle 定义坐标由我们自己定位: