你並不真的需要一個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"
};
而且,我有以下的字體和大塊:
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
,我遍歷所有的項目,我想補充子彈,空格字符,項目和空格字符的段落有很多次,因爲有項目。
正如您所看到的,「代理登記」可能存在問題。由於「代理人」和「登記」之間的空間特性,該項目分爲兩部分。這對你來說可能是可以接受的,但讓我們假設它不是。
這使我們更好的解決方案:
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),並且不知道如何繪製子彈(黑體)的字體的字體,我們使用的字體可以畫出兩種(Arial)。在我的情況下,arial.ttf
可以在我的c:/windows/fonts
目錄中找到。
我仍然使用\u0060
來避免項目被拆分,但我還介紹\u2022
這是存儲在Arial中的項目符號的UNICODE值。請參考Bullets。對於生成的PDF,請參閱bullets.pdf
我希望每個每個項目應在同一行 –
如何把一切在一條線上子彈在兩者之間?或者你期望一些特殊的格式? – mkl
以下是預計產出。 ●Insurancesystem●Agent●Agency●AgentEnrollment●AgentSettings●預約 –