JAVA 產生PDF報表()

來源:互聯網
上載者:User

標籤:

許多應用程式都要求動態產生 PDF 文檔。這些應用程式涵蓋從產生客戶對帳單並通過電子郵件交付的銀行到購買特定的圖書章節並以 PDF 格式接收這些圖書章節的讀者。這個列表不勝枚舉。在本文中,我們將使用 iText Java 庫產生 PDF 文檔。我們將向您示範一個範例應用程式,以便您可自行完成它並能更好地理解它。

熟悉 iText V5.3.0 版

iText 是一個可從 http://itextpdf.com/ 免費擷取的 Java 庫(請參見 參考資料)。iText 庫非常強大,且支援產生 HTML、RTF 和 XML 文檔,還支援產生 PDF 文檔。您可以選擇各種各樣的字型來用於文檔中。另外,iText 的結構允許您使用相同代碼產生上面提及的任何類型的文檔。

iText 庫包含使用各種字型產生 PDF 文本、在 PDF 文檔中產生表格、向頁面中添加浮水印等的類。iText 還提供了其他許多特性。在一篇文章中無法示範所有這些特性。我們將介紹產生 PDF 所需的基本知識。有關更多詳細資料,請參閱供應商提供的文檔(參見 參考資料)。

我們將使用 Eclipse 開發我們的範例應用程式。作為一個開源 IDE,Eclipse 可免費擷取且非常強大。您可立即下載 Eclipse(參見 參考資料)。

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 可能是一個引用,或是一個引用的目標。
在 Eclipse 中下載和配置 iText

作為一個純 Java 庫,iText 以 JAR 檔案的形式提供(參見 參考資料)。下載該庫之後(假設下載到路徑 C:\temp),使用以下步驟在 Eclipse 環境中配置 iText 庫:

  1. 在 Eclipse 中建立一個名為 iText 的新 Java 項目。
  2. 按右鍵 Package Explorer 視圖中的 iText 項目,選擇 Properties
  3. 單擊 Java Build Path。在 Libraries 選項卡上,單擊 Add External JARs
  4. 找到 C:\temp 目錄並選擇此目錄中的 itext-5.3.0.jar。
  5. 單擊 OK

iText 現在已配置,Eclipse 已準備好建立 Java 應用程式來產生動態 PDF 文檔。

 

回頁首

範例應用程式

還有什麼能比您親自建立的一個有效範例能更好地示範任何技術呢?現在您已擁有所需的工具 (Eclipse IDE) 和庫 (iText library),我們已準備好設計和開發一個有效範例程式。

首先建立一個簡單的 PDF 文檔,該文檔包含一些基本元素,比如純文字、具有非預設字型的彩色文本、表格、列表、章、節等。此應用程式的用途是讓您熟悉使用 iText 庫的方式。有許多類為您執行了與 PDF 文檔產生相關的大量工作。本文不可能介紹所有這些類。iText 的 javadocs 是有關如何使用這些類的一個不錯的資訊來源。接下來我們開始編碼。

第一步是建立一個文檔。文檔是一個 PDF 文檔的所有元素的容器。

清單 1. 執行個體化文檔對象
Document document = new Document(PageSize.A4, 50, 50, 50, 50);

  

第一個參數是頁面大小。接下來的幾個參數分別是左邊距、右邊距、上邊距和下邊距。此文檔的類型還未定義。它依賴於您建立的編寫器類型。對於我們的範例,我們選擇 com.itextpdf.text.pdf.PdfWriter。其他編寫器包括 HtmlWriter、RtfWriter、XmlWriter 等。它們的名稱說明了它們的實際用途。

清單 2. 建立 PdfWriter 對象
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\ITextTest.pdf"));document.open();

  

第一個參數是文檔對象的引用,第二個參數是輸出將寫入的檔案的絕對名稱。接下來,我們開啟文檔開始編寫。

現在,我們將在文檔的第一頁上添加一些文本。任何文本都藉助 com.itextpdf.text.Paragraph 來進行添加。您可使用您的文本以及字型、顏色、字型大小等預設設定建立一個預設段落。否則,您可提供自己的字型。 在本文中,我們還將討論 PDF 文檔的定位器(連結)。在此 PDF 中,我們使用 backToTop 作為連結。當單擊 backToTop 連結時,它會將您帶到文檔的第一頁。您需要將該文本設定為第一頁的定位目標。讓我們看看如何將定位目標和字型設定到所添加的段落中。

清單 3. 建立段落對象
Anchor anchorTarget = new Anchor("First page of the document.");      anchorTarget.setName("BackToTop");      Paragraph paragraph1 = new Paragraph();      paragraph1.setSpacingBefore(50);      paragraph1.add(anchorTarget);      document.add(paragraph1);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))));

  

圖 1 顯示了 清單 3 中的代碼的範例輸出。要關閉文檔,將 document.close(); 添加到清單 3 中的代碼末尾。

圖 1. 清單 3 中的代碼的範例輸出

您剛才看到了如何將純文字添加到 PDF 文檔中。接下來,我們需要向文檔中添加一些複雜的元素。首先建立一個新章。章是一種特殊的節,它從一個新頁開始且預設會顯示一個編號。

清單 4. 建立章對象
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);

  

在 清單 4 中的代碼中,我們建立了一個新的章對象 chapter1,它的標題為 “This is Chapter 1”。將編號深度設定為 0,這樣就不會在頁面上顯示章編號。

節是章的子項目。在 清單 5 中的代碼中,我們建立一個標題為 “This is Section 1 in Chapter 1” 的節。要在此節下添加一些文本,我們建立了另一個段落對象 someSectionText,並將它添加到節對象中。

清單 5. 建立節對象
Paragraph title11 = new Paragraph("This is Section 1 in Chapter 1",        FontFactory.getFont(FontFactory.HELVETICA, 16, Font.BOLD,           new CMYKColor(0, 255, 255,17)));   Section section1 = chapter1.addSection(title11);Paragraph someSectionText = new Paragraph("This text comes as part of section 1 of chapter 1.");section1.add(someSectionText);someSectionText = new Paragraph("Following is a 3 X 2 table.");section1.add(someSectionText);

  

在添加表格之前,讓我們看看該文檔的外觀。添加以下兩行代碼以關閉 圖 2 中的文檔。然後編譯和執行程式,以產生 PDF 文檔:document.add(chapter1);document.close();

圖 2. 章的範例輸出

接下來,我們建立一個表格對象。一個表格包含一個行和列的矩陣。一行中的一個儲存格可佔據多於一列。類似地,一列中的一個儲存格可佔據多於一行。

清單 6. 建立表格對象
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);

  

在 清單 6 中的代碼中,我們建立了一個 PDFPTable 對象 t,它包含 3 列且在不斷地添加行。接下來,我們建立 3 個 PDFPcell 對象,每個對象包含不同的文本。我們不斷地將它們添加到表格中。它們會添加到第一行中,從第一列開始,移動到同一行中的下一列。該行完成後,將下一個儲存格添加到下一行的第一列中。也可通過提供儲存格的文本來將它添加到表格中,比如 t.addCell("1.1");。最後,將表格對象添加到節對象中。

最後,讓我們看看如何將一個列表添加到 PDF 文檔中。列表包含多個 ListItem。一個列表可帶有編號,也可不帶編號。將第一個參數作為true 傳送,表明您希望建立帶編號的列表。

清單 7. 建立列表對象
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);

  

我們已將所有內容都添加到 chapter1 對象中。現在我們將一個映像添加到該 Java 對象中。我們可使用以下一個 Image 方法縮放映像:

  • scaleAbsolute()
  • scaleAbsoluteWidth()
  • scaleAbsoluteHeight()
  • scalePercentage()
  • scaleToFit()

在 清單 8 中,我們使用了 scaleAbsolute。然後將映像對象添加到 Section 中。

清單 8. 將 Image 添加到主 Document 中
Image image2 = Image.getInstance("IBMLogo.bmp");      image2.scaleAbsolute(120f, 120f);            section1.add(image2);

  

iText 中的 com.itextpdf.text.Anchor 類表示一個外部網站或文檔內部的一個連結。定位器(連結)可像網頁中的一個連結一樣單擊。要添加定位器,我們需要建立一個新定位器並將引用設定為 清單 3 中建立的 Anchor 目標。然後將定位器添加到節中,並將該節添加到文檔中。

清單 9. 將定位器添加到主文件中
Paragraph title2 = new Paragraph("Using Anchor",         FontFactory.getFont(FontFactory.HELVETICA, 16, Font.BOLD,         new CMYKColor(0, 255, 0, 0)));section1.add(title2);title2.setSpacingBefore(5000);Anchor anchor2 = new Anchor("Back To Top");anchor2.setReference("#BackToTop");section1.add(anchor2);

  

沒有需要添加到 chapter1 中的元素後,就該是將 chapter1 添加到主 document 中的時候了。在這裡,當我們完成範例應用程式後,也將關閉文檔對象。

清單 10. 將一章添加到主文件中
document.add(chapter1);document.close();

  

 

回頁首

運行範例應用程式
  1. 下載範例應用程式 j-itextsample.jar(參見 下載)。
  2. 將 j-itextsample.jar 解壓到一個目錄中,舉例而言,如果將它解壓到 C:\temp 中,這會將原始碼和類檔案放在 C:\temp\com\itext\test 中。
  3. 開啟一個命令提示字元,並將目錄更改為 C:\temp。
  4. 在此命令提示字元上設定您的系統的類路徑。將 C:\temp\itext-5.3.0.jar 包含在系統的類路徑中。在 Windows® 上,執行命令 set classpath=C:\temp\itext-5.3.0.jar;%classpath%
  5. 使用命令 java com.itext.test.ITextTest 運行應用程式。

該程式將在 C:\ 中產生 ITextTest.pdf 文檔。圖 3 顯示了 PDF 文檔的第一頁的螢幕。

圖 3. PDF 文檔的螢幕

圖 4 顯示了 PDF 文檔中的第 1 章和它的節、文本、表格、列表和映像的螢幕。

圖 4. PDF 文檔的螢幕

圖 5 顯示了 PDF 文檔中的 Anchor 連結的螢幕。

圖 5. PDF 文檔的螢幕

結束語

您已瞭解了產生 PDF 所涉及的一些基本元素。iText 的美妙之處在於,您可在不同類型的編寫器中使用同一個元素的文法。另外,您可將編寫器的輸出重新導向到控制台(對於 XML 和 HTML 編寫器)、servlet 的輸出資料流(對於對 PDF 文檔的 Web 請求的響應)或任何其他類型的輸出資料流。在響應相同、但響應類型各不相同(PDF、RTF、HTML 或 XML)的情形中,iText 也可派上用場。iText 允許您建立浮水印,加密文檔以及其他輸出細節。

該文章轉載自:http://www.ibm.com/developerworks/cn/opensource/os-javapdf/(如有違規轉載,請聯絡博主)

JAVA 產生PDF報表()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.