转自:http://developer.51cto.com/art/200907/134261.htm

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“一行文字。

  1. Document document = new Document();
  2. try
  3. {
  4. PdfWriter.getInstance
  5. (document, new FileOutputStream
  6. ("Chap0101.pdf"));
  7. document.open();
  8. document.add(new Paragraph("Hello World"));
  9. }
  10. catch(DocumentException de)
  11. {
  12. System.err.println(de.getMessage());
  13. }
  14. catch(IOException ioe)
  15. {
  16. System.err.println(ioe.getMessage());
  17. }
  18. document.close();

由以上的例子可见,程序的框架十分清楚明了。然而在PDF中指定文字、图画、表格的位置是一件非常麻烦的事情。除了不断地在程序中修改位置、然后运行程序、生成PDF文件、观察元素在PDF中的位置是否合理这样的过程以外,似乎还没有其它更好的方法。

3、如何通过JSP生成PDF报表

这一部分是在iText的教程中所没有的,网上的相关资料也比较少。我经过一段时间研究发现:先在服务器上生成PDF文件,然后用户通过点击指向PDF文件的超链接选择下载或打开。这是一个思路,或者说是思路之一。本文实现了这个思路,又给出另外一个思路并通过两种途径实现之。

1)直接在服务器上生成PDF报表。

  1. <%@ page import ="com.lowagie.text.*
  2. ,com.lowagie.text.pdf.*, java.io.*"%>
  3. <%
  4. String filename =
  5. "PDF"+(new Random()).nextInt()+".pdf" ;
  6. Document document =
  7. new Document(PageSize.A4);
  8. ServletOutputStream out1
  9. = response.getOutputStream();
  10. try{
  11. PdfWriter writer =
  12. PdfWriter.getInstance(document,
  13. new FileOutputStream(filename) );
  14. document.open();
  15. document.add(new Paragraph("Hello World"));
  16. document.close();
  17. }
  18. catch(Exception e){}
  19. %>

上面的程序在服务器上生成了一个静态的PDF文件。显然,每次运行所得的PDF文件的名称应该是独一无二不能有重的。本程序通过随机函数来命名生成的PDF文件。本程序的缺点就是,每次运行都会在服务器上产生一个PDF文件,如果不及时删除,数量会越来越大,这显然是站点维护者所不愿意看到的。

2)将PDF文件通过流的形式输送到客户端的缓存。这样做的好处是不会在服务器上留下任何“遗迹”。

◆直接通过JSP页面生成PDF报表

  1. <%@
  2. page import="java.io.*,
  3. java.awt.Color,com.lowagie.text.*,
  4. com.lowagie.text.pdf.*"%>
  5. <%
  6. response.setContentType
  7. ( "application/pdf" );
  8. Document document = new Document();
  9. ByteArrayOutputStream buffer
  10. = new ByteArrayOutputStream();
  11. PdfWriter writer=
  12. PdfWriter.getInstance( document, buffer );
  13. document.open();
  14. document.add(new Paragraph("Hello World"));
  15. document.close();
  16. DataOutput output =
  17. new DataOutputStream
  18. ( response.getOutputStream() );
  19. byte[] bytes = buffer.toByteArray();
  20. response.setContentLength(bytes.length);
  21. for( int i = 0;
  22. i < bytes.length;
  23. i++ )
  24. {
  25. output.writeByte( bytes[i] );
  26. }
  27. %>

◆通过Servlet生成PDF报表

  1. import java.io.*;
  2. import javax.servlet.*;
  3. import javax.servlet.http.*;
  4. import com.lowagie.text.*;
  5. import com.lowagie.text.pdf.*;
  6. public void doGet
  7. (HttpServletRequest request,
  8. HttpServletResponse response)
  9. throws IOException,ServletException
  10. {
  11. Document document =
  12. new Document(PageSize.A4, 36,36,36,36);
  13. ByteArrayOutputStream ba
  14. = new ByteArrayOutputStream();
  15. try
  16. {
  17. PdfWriter writer =
  18. PdfWriter.getInstance(document, ba);
  19. document.open();
  20. document.add(new
  21. Paragraph("Hello World"));
  22. }
  23. catch(DocumentException de)
  24. {
  25. de.printStackTrace();
  26. System.err.println
  27. ("A Document error:" +de.getMessage());
  28. }
  29. document.close();
  30. response.setContentType
  31. ("application/pdf");
  32. response.setContentLength(ba.size());
  33. ServletOutputStream out
  34. = response.getOutputStream();
  35. ba.writeTo(out);
  36. out.flush();
  37. }

使用JSP页面生成PDF报表的更多相关文章

  1. JSP页面导出PDF格式文件

    JSP页面导出PDF格式文件基本在前端页面可以全部完成 <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/ ...

  2. Javascript 将 HTML 页面生成 PDF 并下载

    最近碰到个需求,需要把当前页面生成 pdf,并下载.弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :) html2canvas 简介 我们可以直接在浏览器端使用html2canvas,对整个 ...

  3. [.NET开发] C#使用doggleReport生成pdf报表的方法

    本文实例讲述了C#使用doggleReport生成pdf报表的方法.分享给大家供大家参考,具体如下: 1. 安装nuget -install package DoddleReport -install ...

  4. js将 HTML 页面生成 PDF 并下载

    最近碰到个需求,需要把当前页面生成 pdf,并下载.弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :) 先来科普两个插件: html2Canvas 简介 我们可以直接在浏览器端使用html2 ...

  5. Java生成PDF报表

    一.前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iText--用于生成PDF文档的一个Java类库.废话不多说,进入正题. 二.iText简介 iText是著名的开放 ...

  6. 动态jsp页面转PDF输出到页面

    最近工作中遇到不少问题.总结一下.这段代码主要功能是将一个生成JSP页面转发成PDF输出到页面 需要利用ITEXT String html = ServletUtils.forward(request ...

  7. 将jsp页面转pdf

    网上好多思路啊,大部分都是将html转pdf,这种方法我试了很多,都不能很好地支持jsp,稍微复杂一点根本不起作用,也不知他们的博客都怎么写的,还真是应了那句话天下博客一大抄,自己都不验证的 下面说下 ...

  8. js生成pdf报表

    由于前台html已经动态生成报表,而且,前台有一个功能,一个date range组件,当你拖动的时候,报表会在不提交到后台的情况下动态变化.因此需要用到js生成生报表: 用到的组件: jquery.j ...

  9. JAVA 生成PDF报表()

    许多应用程序都要求动态生成 PDF 文档.这些应用程序涵盖从生成客户对帐单并通过电子邮件交付的银行到购买特定的图书章节并以 PDF 格式接收这些图书章节的读者.这个列表不胜枚举.在本文中,我们将使用 ...

随机推荐

  1. MySql5.5安装(windows)

    首先贴出安装包 32位安装包链接:https://pan.baidu.com/s/1AGLpcKv1I4kvWjPsVMyS8Q 密码:xypy 64位安装包链接:https://pan.baidu. ...

  2. [题解] CodeM美团点评编程竞赛资格赛题

    最近看到牛课网美团一个编程竞赛,想着做做看,结果一写就是两天..真是写不动了啊.话不多说,下面开始我的题解. 题目大致还是比较考察思维和代码能力(因为自己代码能力较弱,才会觉得比较考察代码能力吧= = ...

  3. UVA1252 【Twenty Questions】

    分析 为了叙述方便,设"心里想的物体"为W.首先在读入时把每个物体转化为一个二进制整数.不难发现,同一个特征不需要问两遍,所以可以用一个集合s表示已经询问的特征集. 在这个集合s中 ...

  4. test20180922 打铁的匠

    题意 分析 法一:吉司机线段树 这是一个在线的\(O( n + q \cdot \log^2 n)\)做法. 考虑维护节点到根的权值前缀和cost,那么查询的时候区间减去子树根节点的cost就是价值. ...

  5. 多线程安全问题之Lock显示锁

    package com.hls.juc; import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.Reentr ...

  6. zz 牛人啊

    http://www.newsmth.net/nForum/#!article/CouponsLife/184517019:57:33cutepig 2015/6/9 19:57:33 http:// ...

  7. 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

    原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...

  8. 修改oracle系统参数spfile导致数据库无法启动解决

    错误示范: SQL> alter system set nls_date_format='yyyy-mm-dd 24hh:mi:ss' scope=spfile;System altered.我 ...

  9. CF 1013E Hills——隔项转移的DP

    题目:http://codeforces.com/contest/1013/problem/E 设 dp[ i ][ j ][ 0/1 ] 表示前 i 个位置,有 j 个山峰,第 i 个位置不是/是山 ...

  10. DCNN相关算法资料

    https://blog.csdn.net/hjimce/article/details/49955149 讲的很详细