Itext生成PDF文件

最近做一個項目的報表,設計導出問題,要求pdf、excel、word。說實話一個字,煩。寫個備忘錄吧。。。雖然還是很煩
所需依賴:itext-asian-5.2.0.jar(亞洲字體),itextpdf-5.5.7.jar

iText 是一個可從這裏免費獲取的 Java 庫。iText 庫非常強大,且支持生成 HTML、RTF 和 XML 文檔,還支持生成 PDF 文檔。您可以選擇各種各樣的字體來用於文檔中。另外,iText 的結構允許您使用相同代碼生成上面提及的任何類型的文檔。

主要API:
com.itextpdf.text.Document 是用於生成 PDF 文檔的主要類。這是第一個需要實例化的類。創建文檔之後,您需要一個編寫器來向其中寫入信息。com.itextpdf.text.pdf.PdfWriter 是一個 PDF 編寫器。下面提供了其他一些常用的類:

    com.itextpdf.text.Paragraph:此類表示一個縮進的段落。
    com.itextpdf.text.Chapter:此類表示 PDF 文檔中的一章。使用 Paragraph 作爲標題、int 作爲章節編號來創建該類。
    com.itextpdf.text.Font:此類包含一種字體的所有規範,比如字體集、字號、樣式和顏色。各種字體都在此類中聲明爲靜態常量。
    com.itextpdf.text.List:此類表示一個列表,反過來,該列表又包含許多 ListItems。
    com.itextpdf.text.pdf.PDFPTable:這是一個表格,可放在一個絕對位置上,也可作爲類 Table 添加到文檔中。
    com.itextpdf.text.Anchor:一個 Anchor 可能是一個引用,或是一個引用的目標。
    
對象的包含關係:Section->chapter->document. 所有的文本添加均依賴於Paragraph
可將表格、列表、圖像添加在Section中
    
接下來看一些代碼:
1.創建文檔
Document document = new Document(PageSize.A4, 50, 50, 50, 50); 參數依次對應頁面大小,左右上下邊距,此時類型未定,類型依賴於com.itextpdf.text.pdf.PdfWriter等編寫器類型,還有HtmlWriter、RtfWriter、XmlWriter,見名知意。

2.創建PrintWriter
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\ITextTest.pdf"));
document.open();
參數:文檔對象的引用,將寫入文件的絕對名稱。

3.創建段落對象(paragraph):
document.add(new Paragraph("Some more text on the first page with different color and font type.",
FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD,    new CMYKColor(0, 255, 0, 0))));
參數:添加的字符串,字體
任何文本都藉助 com.itextpdf.text.Paragraph 來進行添加。您可使用您的文本以及字體、顏色、字號等默認設置創建一個默認段落。否則,您可提供自己的字體。

4.創建章對象(chapter):
Paragraph title1 = new Paragraph("Chapter 1",
    FontFactory.getFont(FontFactory.HELVETICA,
    18, Font.BOLDITALIC, new CMYKColor(0, 255, 255,17)));
Chapter chapter1 = new Chapter(title1, 1);
chapter1.setNumberDepth(0);
參數:章節標題,章節編號
設置編號深度設置爲0就不會再文當中顯示章節編號

5.創建節對象(section):
Section section1 = chapter1.addSection(title11,font);
section1.add(new Paragraph("Following is a 3 X 2 table."));
參數:節標題,字體

6.創建表格(PDFPTable):
PdfPTable t = new PdfPTable(3);
      t.setSpacingBefore(25);//前後空白
      t.setSpacingAfter(25);
      PdfPCell c1 = new PdfPCell(new Phrase("Header1"));   
      t.addCell(c1);
      PdfPCell c2 = new PdfPCell(new Phrase("Header2"));
      t.addCell(c2);
      PdfPCell c3 = new PdfPCell(new Phrase("Header3"));
      t.addCell(c3);
      t.addCell("1.1");
      t.addCell("1.2");
      t.addCell("1.3");
      section1.add(t);
表格創建時必須指定列數,行數不固定。cell按從左到右從上到下依次添加

7.創建列表(List):
List l = new List(true, false, 10);
l.add(new ListItem("First item of list"));
l.add(new ListItem("Second item of list"));
section1.add(l);
參數:

8.創建圖像(Image):
Image image2 = Image.getInstance("IBMLogo.bmp");//重載方法,實際應用中參數一般爲byte數組
      image2.scaleAbsolute(120f, 120f);
      section1.add(image2);
      
完成所有內容創建後將 chapter1 添加到主 document 中,關閉文檔對象:
document.add(chapter1);
document.close();

亞洲字體設置(親測可用):
BaseFont baseFont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
Font font = new Font(baseFont);
現在就可以像自帶字體一樣使用font了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章