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文件通过流的形式输送到客户端的缓存。这样做的好处是不会在服务器上留下任何“遗迹”
i)直接通过JSP页面生成
<%@ 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] ); } %>
ii)通过Servlet生成
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(); }
5、结束
我采用的是第二种方法。本文的源码在tomcat上面都是调试通过的。希望可以给大家带来方便。
|