如何使用itext jar在pdf中编写项目符号列表,但项目不应该在下一行

时间:2015-05-21 09:21:20

标签: itext

以下是我从网上搜索过的代码。这段代码在下一行打印每个列表项,但我不想这样。

以下是我想用pdf编写的预期输出:

List orderedList = new List(List.ORDERED);
orderedList.add(new ListItem("Item 1"));
orderedList.add(new ListItem("Item 2"));
orderedList.add(new ListItem("Item 3"));

预期产出:

Image

2 个答案:

答案 0 :(得分:4)

您真的不需要List,只需要Paragraph中的一系列项目符号项。

我已经创建了一个概念证明,向您展示了实现这一目标的三种方法:好,更好,最好:

enter image description here

假设我有这些项目:

public static final String[] ITEMS = {
    "Insurance system", "Agent", "Agency", "Agent Enrollment", "Agent Settings",
    "Appointment", "Continuing Education", "Hierarchy", "Recruiting", "Contract",
    "Message", "Correspondence", "Licensing", "Party"
};

我有以下字体和块:

Font zapfdingbats = new Font(FontFamily.ZAPFDINGBATS, 8);
Font font = new Font();
Chunk bullet = new Chunk(String.valueOf((char) 108), zapfdingbats);

然后"好"示例如下所示:

Paragraph p = new Paragraph("Items can be split if they don't fit at the end: ", font);
for (String item: ITEMS) {
    p.add(bullet);
    p.add(new Phrase(" " + item + " ", font));
}
document.add(p);

我创建了一个Paragraph,我循环遍历所有项目,并且我将段落,空格字符,项目和空格字符添加到段落中的次数与项目一样多。

正如您所看到的,"代理商注册"可能存在问题。由于" Agent"之间的空间特征。和"注册",项目分为两部分。这对你来说是可以接受的,但我们假设它不是。

这使我们找到了更好的解决方案:

p = new Paragraph("Items can't be split if they don't fit at the end: ", font);
for (String item: ITEMS) {
    p.add(bullet);
    p.add(new Phrase("\u00a0" + item.replace(' ', '\u00a0') + " ", font));
}
document.add(p);

我们现在引入不间断空格/u00a0),而不是普通空格。这已经更好了,因为带有空格的项目,例如"代理注册"不再分裂。不幸的是,我们正在处理子弹和物品的不同块,因此无论如何都可能发生子弹及其物品的分裂。这导致了最佳解决方案:

BaseFont bf = BaseFont.createFont("c:/windows/fonts/arial.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font f = new Font(bf, 12);
p = new Paragraph("Items can't be split if they don't fit at the end: ", f);
for (String item: ITEMS) {
    p.add(new Phrase("\u2022\u00a0" + item.replace(' ', '\u00a0') + " ", f));
}

我们不使用知道如何绘制子弹的字体(Zapfdingbats)和不知道如何绘制子弹的字体(Helvetica),而是使用可以绘制两者的字体(Arial)。在我的情况下,arial.ttf可以在我的c:/windows/fonts目录中找到。

我仍然使用\u0060来避免项目被拆分,但我还会介绍\u2022,这是存储在Arial中的项目符号的UNICODE值。

有关完整源代码,请参阅Bullets。有关生成的PDF,请参阅bullets.pdf

答案 1 :(得分:-1)

@Autowired