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

如何使用itext jar在pdf中编写项目符号列表,但项目不应在下一行中,itext,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")); 预期产出: 您实际上不需要列表,您只需要段落中

下面是我在网上搜索的代码。此代码正在打印下一行中的每个列表项,但我不希望这样

以下是我希望以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"));
预期产出:


您实际上不需要
列表,您只需要
段落中的一系列项目符号

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

假设我有以下项目:

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);
我创建了一个
段落
,循环了所有项目,并在段落中添加了一个项目符号、一个空格字符、一个项目和一个空格字符

如您所见,“代理注册”可能存在问题。由于“代理”和“注册”之间的空格字符,项目被一分为二。这对你来说可能是可以接受的,但我们假设它不是

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

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);
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));
}
我们现在引入非中断空间(
/u00a0
),而不是普通空间。这已经更好了,因为带有空格(如“代理注册”)的项目不再拆分。不幸的是,我们正在处理项目符号和项目符号的不同块,因此项目符号和项目符号可能会被拆分。这将导致最佳解决方案:

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);
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/font
目录中找到

我仍然使用
\u0060
来避免项目被拆分,但我还引入了
\u2022
,它是存储在Arial中的项目符号的UNICODE值


有关完整的源代码,请参阅。对于生成的PDF,请参见

我希望每个项目都应该在同一行中如何将所有内容放在一行中,中间有项目符号?或者您希望使用一些特殊格式?下面是预期的输出。● 保险制度● 代理人● 机构● 代理登记● 代理设置● 任命我们听到你@mukeshingh,但是如果你不需要列表,为什么要使用
List
?你所需要的就是一个
段落
,前面有项目符号。你知道我想要什么,但我不知道。你能告诉我预期输出的代码吗?输出你的代码是:如果项目最后不合适,可以拆分项目:l保险系统l代理l代理l代理l代理登记l代理设置l约会l继续教育它没有打印bullect SYMBOL我的屏幕截图证明你错了。我马上就把完整的源代码和PDF发布到网上。我很确定你使用的字体不对!我已经证明了你所说的不是真的:(正如你所看到的,这是一个官方iText网站的链接!)请分享你的完整源代码。然而,它现在的工作与以下变化。区块项目符号=新区块(“\u2022”,zapfdingbats)@木克星,我刚刚做到了!您正在代码中使用我的名字(我是Bruno Lowagie)。那是错误的!这意味着您使用的iText版本已经过时,不受支持,。。。您的客户不应该接受您的代码。呃。。。你最初接受我的答案是因为它是正确的,而且对你有帮助。为什么你“不接受”我的答案,而选择你自己的答案,而这个答案没有添加任何新内容?