IText簡介及示例

氺氺發表於2013-06-18

一、iText簡介

   iText是著名的開放原始碼的站點sourceforge一個專案,是用於生成PDF文件的一個java類庫。通過iText不僅可以生成PDF或rtf的文件,而且可以將XML、Html檔案轉化為PDF檔案。 

        使用iText非常方便,引入jar包,程式中就可以使用iText類庫了。iText.jar包下載地址:http://www.itextpdf.com/download.php

        如果生成的PDF檔案中需要出現中文、日文、韓文字元,則同樣的地址,下載extrajars-2.3.zip擴充套件包,裡面包括itext-asian.jar等擴充套件工具包。

二、功能介紹

         在企業的資訊系統中,報表處理一直佔比較重要的作用,iText元件通過在伺服器端使用Jsp 或JavaBean生成PDF報表,客戶端採用超級連線顯示或下載得到生成的報表,這樣就很好的解決了B/S系統的報表處理問題。

適合使用IText的需求:

        Typically, iText is used in projects that have one ofthe following requirements:

        The content isn't available in advance: it'scalculated based on user input or real-time database information.

        The PDF files can't be produced manually due to the massivevolume of content: a large number of pages or documents.

        Documents need to be created in unattended mode, in abatch process.

        The content needs to be customized or personalized;for instance, the name of the end user has to be stamped on a number of pages.

        Often you'll encounter these requirements in webapplications, where content needs to be served dynamically to a browser.Normally, you'd serve this information in the form of HTML, but for somedocuments, PDF is preferred over HTML for better printing quality, foridentical presentation on a variety of platforms, for security reasons, or toreduce the file size.

        通常,iText用於具有下列條件之一的專案:

        內容不固定,它是基於使用者輸入或實時資料庫資訊計算。

        由於頁數多或者檔案較大而造成的內容過多而使得PDF檔案不能手動生成,。

        檔案需要在無人值守模式下建立的,使用批處理過程。

        內容需要自定義或個性化;例如,終端使用者的名字需要被印在某一頁中。

        通常你會在Web應用程式中遇到的這些要求,其中的內容對於瀏覽者來說必須是動態。通常,你會以HTML的形式提供這些資訊,但對於一些文件,PDF格式在印刷質量上是優於HTML的,同樣,在各種平臺上,出於安全原因,或減少檔案大小的考慮,PDF都優於HTML。

三、demo演示,一個最簡單的使用IText轉化為PDF的例子

       用iText生成PDF文件需要5個步驟: 

  ①建立com.itextpdf.text.Document物件的例項。

        Document document= new Document(); 

  ②建立一個書寫器(Writer)與document物件關聯,通過書寫器(Writer)可以將文件寫入到磁碟中。

        PDFWriter.getInstance(document,new FileOutputStream("ITextTest.pdf")); 

  ③開啟文件。

        document.open(); 

  ④向文件中新增內容。

        document.add(newParagraph("IText  Test")); 

  ⑤關閉文件。

        document.close(); 

  通過上面的5個步驟,就能產生一個ITextTest.PDF的檔案,檔案內容為"ITextTest"。

        具體程式碼如下:

package com.wh;
 
importjava.io.FileOutputStream;
importcom.itextpdf.text.BaseColor;
importcom.itextpdf.text.Document;
importcom.itextpdf.text.Element;
importcom.itextpdf.text.Font;
importcom.itextpdf.text.Paragraph;
importcom.itextpdf.text.Rectangle;
importcom.itextpdf.text.pdf.BaseFont;
importcom.itextpdf.text.pdf.PdfPTable;
importcom.itextpdf.text.pdf.PdfWriter;
 
public class ToPDF{
       // 表頭
       public static final String[] tableHeader= { "姓名", "性別", "年齡",
                     "學院", "專業", "年級"};
 
       // 資料表欄位數
       private static final int colNumber = 6;
 
       // 表格的設定
       private static final int spacing = 2;
 
       // 表格的設定
       private static final int padding = 2;
 
       // 匯出Pdf文擋
       public static void exportPdfDocument() {
              // 建立文Pdf文擋50, 50, 50,50左右上下距離
              Document document = newDocument(new Rectangle(1500, 2000), 50, 50, 50,
                            50);
              try {
                     //使用PDFWriter進行寫檔案操作
                     PdfWriter.getInstance(document,new FileOutputStream(
                                   "d:\\學生資訊.pdf"));
                     document.open();
                     // 中文字型
                     BaseFont bfChinese =BaseFont.createFont("STSong-Light",
                                   "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
                     Font fontChinese = newFont(bfChinese, 12, Font.NORMAL);
                     // 建立有colNumber(6)列的表格
                     PdfPTable datatable = newPdfPTable(colNumber);
                     //定義表格的寬度
                     int[] cellsWidth = { 8, 2,2, 8, 5, 3 };
                     datatable.setWidths(cellsWidth);
                     // 表格的寬度百分比
                     datatable.setWidthPercentage(100);
                     datatable.getDefaultCell().setPadding(padding);
                     datatable.getDefaultCell().setBorderWidth(spacing);
                     //設定表格的底色
                     datatable.getDefaultCell().setBackgroundColor(BaseColor.GREEN);
                     datatable.getDefaultCell().setHorizontalAlignment(
                                   Element.ALIGN_CENTER);
                     // 新增表頭元素
                     for (int i = 0; i <colNumber; i++) {
                            datatable.addCell(newParagraph(tableHeader[i], fontChinese));
                     }
                     // 新增子元素
                     for (int i = 0; i <colNumber; i++) {
                            datatable.addCell(newParagraph(tableHeader[i], fontChinese));
                     }
                     document.add(datatable);
              } catch (Exception e) {
                     e.printStackTrace();
              }
              document.close();
       }
 
       public static void main(String[] args)throws Exception {
              exportPdfDocument();
       }
 
}

下載示例程式碼及jar包請點選: 下載

 

相關文章