這篇文章主要介紹“如何使用JSP頁面生成PDF報表”,在日常操作中,相信很多人在如何使用JSP頁面生成PDF報表問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用JSP頁面生成PDF報表”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1、iText簡介
iText是一個開放源碼的Java類庫,可以用來方便地生成PDF文件。大家通過訪問http://sourceforge.net/project/showfiles.php?group_id=15255&release_id=167948下載***版本的類庫,下載完成之后會得到一個.jar包,把這個包加入JDK的classpath即可使用。
如果生成的PDF文件中需要出現中文、日文、韓文字符,則還需要通過訪問http://itext.sourceforge.net/downloads/iTextAsian.jar下載iTextAsian.jar包。
關于iText類庫的使用,http://www.lowagie.com/iText/tutorial/index.html有比較詳細的教程。該教程從入門開始,比較系統地介紹了在PDF文件中放入文字、圖片、表格等的方法和技巧。
讀完這片教程,大致就可以做一些從簡單到復雜的PDF文件了。不過,試圖通過教程解決在生成PDF文件過程中遇到的所有困難無疑是一種奢望。所以,閱讀iText的api文檔顯得非常重要。讀者在下載類庫的同時,也可以下載類庫的文檔。
2、如何利用iText在JSP頁面中生成PDF報表
以下是一個最簡單的例子,這個例子刻畫了通過iText生成PDF文件的一般程序框架。讀者只需要在document.open();和 document.close();兩條語句中間加入自己希望放在PDF文件中的內容即可。該例子只在PDF文件中加了“Hello World“一行文字。
Document document = new Document(); try { PdfWriter.getInstance (document, new FileOutputStream ("Chap0101.pdf")); document.open(); document.add(new Paragraph("Hello World")); } catch(DocumentException de) { System.err.println(de.getMessage()); } catch(IOException ioe) { System.err.println(ioe.getMessage()); } document.close();
由以上的例子可見,程序的框架十分清楚明了。然而在PDF中指定文字、圖畫、表格的位置是一件非常麻煩的事情。除了不斷地在程序中修改位置、然后運行程序、生成PDF文件、觀察元素在PDF中的位置是否合理這樣的過程以外,似乎還沒有其它更好的方法。
3、如何通過JSP生成PDF報表
這一部分是在iText的教程中所沒有的,網上的相關資料也比較少。我經過一段時間研究發現:先在服務器上生成PDF文件,然后用戶通過點擊指向PDF文件的超鏈接選擇下載或打開。這是一個思路,或者說是思路之一。本文實現了這個思路,又給出另外一個思路并通過兩種途徑實現之。
1)直接在服務器上生成PDF報表。
<%@ page import ="com.lowagie.text.* ,com.lowagie.text.pdf.*, java.io.*"%> <% String filename = "PDF"+(new Random()).nextInt()+".pdf" ; Document document = new Document(PageSize.A4); ServletOutputStream out1 = response.getOutputStream(); try{ PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename) ); document.open(); document.add(new Paragraph("Hello World")); document.close(); } catch(Exception e){} %>
上面的程序在服務器上生成了一個靜態的PDF文件。顯然,每次運行所得的PDF文件的名稱應該是***不能有重的。本程序通過隨機函數來命名生成的PDF文件。本程序的缺點就是,每次運行都會在服務器上產生一個PDF文件,如果不及時刪除,數量會越來越大,這顯然是站點維護者所不愿意看到的。
2)將PDF文件通過流的形式輸送到客戶端的緩存。這樣做的好處是不會在服務器上留下任何“遺跡”。
◆直接通過JSP頁面生成PDF報表
<%@ page import="java.io.*, java.awt.Color,com.lowagie.text.*, com.lowagie.text.pdf.*"%> <% response.setContentType ( "application/pdf" ); Document document = new Document(); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); PdfWriter writer= PdfWriter.getInstance( document, buffer ); document.open(); document.add(new Paragraph("Hello World")); document.close(); DataOutput output = new DataOutputStream ( response.getOutputStream() ); byte[] bytes = buffer.toByteArray(); response.setContentLength(bytes.length); for( int i = 0; i < bytes.length; i++ ) { output.writeByte( bytes[i] ); } %>
◆通過Servlet生成PDF報表
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import com.lowagie.text.*; import com.lowagie.text.pdf.*; public void doGet (HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { Document document = new Document(PageSize.A4, 36,36,36,36); ByteArrayOutputStream ba = new ByteArrayOutputStream(); try { PdfWriter writer = PdfWriter.getInstance(document, ba); document.open(); document.add(new Paragraph("Hello World")); } catch(DocumentException de) { de.printStackTrace(); System.err.println ("A Document error:" +de.getMessage()); } document.close(); response.setContentType ("application/pdf"); response.setContentLength(ba.size()); ServletOutputStream out = response.getOutputStream(); ba.writeTo(out); out.flush(); }
到此,關于“如何使用JSP頁面生成PDF報表”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。