下面是我从网上搜索的代码。这段代码在下一行打印每个列表项,但我不想那样。
以下是我想用 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"));
Run Code Online (Sandbox Code Playgroud)
预期输出:

您实际上并不需要List,您只需要Paragraph.
我创建了一个概念证明,向您展示了实现这一目标的三种方法:好、更好和最好:

假设我有这些项目:
public static final String[] ITEMS = {
"Insurance system", "Agent", "Agency", "Agent Enrollment", "Agent Settings",
"Appointment", "Continuing Education", "Hierarchy", "Recruiting", "Contract",
"Message", "Correspondence", "Licensing", "Party"
};
Run Code Online (Sandbox Code Playgroud)
而且我有以下字体和块:
Font zapfdingbats = new Font(FontFamily.ZAPFDINGBATS, 8);
Font font = new Font();
Chunk bullet = new Chunk(String.valueOf((char) 108), zapfdingbats);
Run Code Online (Sandbox Code Playgroud)
那么“好”的例子是这样的:
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);
Run Code Online (Sandbox Code Playgroud)
我创建了一个Paragraph,我遍历了所有项目,然后在段落中添加一个项目符号、一个空格字符、项目和一个空格字符,次数与项目一样多。
如您所见,“代理注册”可能存在问题。由于“Agent”和“Enrollment”之间的空格字符,该项目被一分为二。这对您来说可能是可以接受的,但让我们假设它不是。
这引导我们找到更好的解决方案:
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);
Run Code Online (Sandbox Code Playgroud)
代替普通空格,我们现在引入不间断空格( /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));
}
Run Code Online (Sandbox Code Playgroud)
我们没有使用知道如何绘制项目符号的字体 (Zapfdingbats) 和不知道如何绘制项目符号的字体 (Helvetica),而是使用可以同时绘制两者的字体 (Arial)。就我而言,arial.ttf可以在我的c:/windows/fonts目录中找到。
我仍然使用\u0060避免项目被拆分,但我也介绍\u2022了存储在Arial中的项目符号的UNICODE值。
有关完整的源代码,请参阅Bullets。对于生成的 PDF,请参阅bullets.pdf