2015-05-21 51 views
-3

以下是我從網上搜索到的代碼。這段代碼正在打印下一行中的每個列表項,但我不想那樣。如何使用itext jar編寫PDF格式的項目符號列表,但項目不應該在下一行

低於預期輸出我想在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

+0

我希望每個每個項目應在同一行 –

+0

如何把一切在一條線上子彈在兩者之間?或者你期望一些特殊的格式? – mkl

+0

以下是預計產出。 ●Insurancesystem●Agent●Agency●AgentEnrollment●AgentSettings●預約 –

回答

-3
import com.lowagie.text.*; 
import com.lowagie.text.pdf.PdfWriter 

import javax.swing.text.Document 

public static void main(String[] args){ 
     String[] ITEMS = ["Insurance system", "Agent", "Agency", "Agent Enrollment", "Agent Settings", 
     "Appointment", "Continuing Education", "Hierarchy", "Recruiting", "Contract", 
     "Message", "Correspondence", "Licensing", "Party"]; 
    com.lowagie.text.Document document = new com.lowagie.text.Document(); 
    PdfWriter.getInstance(document,new FileOutputStream("List1.pdf")); 
    Font zapfdingbats = new Font(); 
    Font font = new Font(); 
    Chunk bullet = new Chunk("\u2022", zapfdingbats); 
    document.open(); 
    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); 
    document.close(); 

} 
+1

您在代碼中使用**我的名字**(我是Bruno ** Lowagie **)。那是錯的!這意味着你使用的是過時的,不受支持的iText版本......你的客戶不應該接受你的代碼[出於這些原因](http://stackoverflow.com/questions/25696851/can-itext-2- 1-7 - 或較早可待使用-市售)。 –

+3

呃......你最初接受我的回答,因爲它是正確的,它幫助你。爲什麼你「不接受」我的回答,贊成你自己的答案,而不是增加新的東西? –

3

你並不真的需要一個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,我遍歷所有的項目,我想補充子彈,空格字符,項目和空格字符的段落有很多次,因爲有項目。

正如您所看到的,「代理登記」可能存在問題。由於「代理人」和「登記」之間的空間特性,該項目分爲兩部分。這對你來說可能是可以接受的,但讓我們假設它不是。

這使我們更好的解決方案:

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

+0

輸出甌你的代碼是:●保險系統L劑L局l劑 招生l劑設置升約會升繼續EDUC 它不打印bullect symbal –

+0

:如果他們不適合在年底 項目可以被分割我的屏幕截圖證明你錯了。我將立即在線發佈完整的源代碼和PDF。我很確定你沒有使用正確的字體! –

+0

我已經添加了證據表明你聲稱的不是真的:http://itextpdf.com/sites/default/files/bullets.pdf(正如你所看到的,這是一個鏈接到*官方* iText站點!) –

0

要利用iText你可以使用List類的setListSymbol()方法的無序列表中添加項目符號。

見這個例子:

Chunk bullet = new Chunk("\u2022"); 

List list = new List(List.UNORDERED); 

list.setListSymbol(bullet); 

參考 - iText API- Add Bullets in Unordered List PDF using Java

+1

,但似乎仍然在單獨的行上添加項目... OP希望項目不具有單獨的行... –

相關問題