`
condor_mk7
  • 浏览: 44597 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

在JSP中用iText生成PDF报表

阅读更多
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文档显得非常重要。读者在下载类库的同 时,也可以下载类库的文档。

  如何利用iText在java程序中生成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中的位置是否合理这样的过程以外,似乎还没有其它更好的方法。


http://www.mscto.com

如何通过JSP生成PDF报表

  这一部分是在iText的教程中所没有的,网上的相关资料也比较少。我曾在CSDN上看过有人开帖询问实现细节,有人回复了实现的原理:先在服 务器上生成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文件,如果不及时删除,数量会越来越大,这显然是站点维护者所不愿意看到的。 ---www.bianceng.cn



  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();
  }

我在项目中采用的是第二种方法。本文的源码在tomcat4上都是调试通过的
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文档显得非常重要。读者在下载类库的同 时,也可以下载类库的文档。

  如何利用iText在java程序中生成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中的位置是否合理这样的过程以外,似乎还没有其它更好的方法。


http://www.mscto.com

如何通过JSP生成PDF报表

  这一部分是在iText的教程中所没有的,网上的相关资料也比较少。我曾在CSDN上看过有人开帖询问实现细节,有人回复了实现的原理:先在服 务器上生成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文件,如果不及时删除,数量会越来越大,这显然是站点维护者所不愿意看到的。 ---www.bianceng.cn



  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();
  }

我在项目中采用的是第二种方法。本文的源码在tomcat4上都是调试通过的
分享到:
评论

相关推荐

    itext生成pdf报表的小demo

    这个小demo是关于如何使用iText库生成简单的PDF报表的实例。通过这个案例,我们可以深入理解如何在Java环境中运用iText来处理PDF文档。 首先,我们需要引入iText库到项目中。如果你使用的是Maven,可以在pom.xml...

    itext 生成pdf 目录

    在使用iText生成PDF目录时,要注意几点: - 确保每个书签都有一个对应的目标位置,否则在PDF中点击书签可能无法正确跳转。 - 避免内存泄漏,尤其是在处理大量书签时,要及时释放资源。 - 书签层次不宜过深,以免影响...

    使用iText生成PDF.doc

    总的来说,iText为开发者提供了一个全面的工具集,使得在Java中生成PDF变得简单高效。通过理解和熟练运用上述知识点,你可以创建满足各种需求的PDF文档。在实际开发中,还可以结合iText的其他高级特性,如书签、...

    Android使用iText生成pdf并读取pdf内容

    在这个场景中,我们将探讨如何利用iText在Android应用中生成PDF以及读取PDF的内容。 首先,我们需要在Android项目中引入iText库。由于Android Studio默认使用Gradle作为构建工具,我们可以在`build.gradle`文件的...

    解决Itext生成PDF中文不换行的jar

    在IT行业中,生成PDF文档是常见的需求,尤其是在Java开发中。Itext是一个广泛使用的库,它允许开发者方便地创建和编辑PDF文档。然而,在处理中文文本时,可能会遇到一个问题:中文字符不换行,这会给PDF的排版带来...

    freemarker+itext生成PDF

    这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的场景中非常有用。 首先,让我们了解FreeMarker。FreeMarker是一个基于模板的语言,...

    利用iText在JSP中生成PDF报表.rar源码都有 和列子

    在JSP(JavaServer Pages)环境中,开发者经常使用iText来动态生成PDF报表,这在数据导出、报告生成或者电子发票等场景中非常常见。这个压缩包“利用iText在JSP中生成PDF报表.rar”提供了一个实例,帮助我们理解如何...

    使用IText生成PDF和WORD文档

    在本文中,我们将深入探讨如何利用IText库生成这两种格式的文档,并通过实际的源码示例来理解其工作原理。 首先,让我们从PDF(Portable Document Format)开始。PDF是一种通用的文件格式,能够保留文档的原始格式...

    iText生成pdf解决中文不显示

    iText生成pdf解决中文不显示字库,pdf凉字不显示,由于生成iText插件生成pdf的时候中文会显示不出来,遇到过的是"凉"字,查到是字体库的原因,网上下载字体库msyh.ttc,生成的时候指定字体库,就可以解决了,小bug一...

    itext生成pdf目录

    用itext方法生成 与Word一样的目录

    itext-2.1.7源码包以及 解决iText生成pdf时中文标点存在行首问题的修改class

    其次,标题指出存在一个问题,即在使用iText生成PDF时,中文标点符号可能会出现在新行的开头,这可能会影响文档的格式和可读性。解决这个问题通常涉及到对源代码的修改。 **描述解析:** 描述指出,文件提供了一种...

    springboot使用itext生成pdf并保存到本地

    总结一下,要实现在Spring Boot应用中使用iText生成带有页眉、页码、水印、目录和二维码的PDF,你需要: 1. 引入iText及相关库。 2. 创建HTML页面并将其转换为PDF。 3. 定制PDF内容,包括添加页眉、页码和水印。 4. ...

    Itext5生成PDF报表

    在IT行业中,生成PDF报表是一项常见的任务,尤其在数据分析、报告生成或自动化流程中。`iText5`是一个强大的Java库,专门用于创建和编辑...这个过程体现了IT行业在报表自动化、文件管理及数据持久化等方面的综合应用。

    iText生成PDF - 实例

    在本篇中,我们将深入探讨如何使用iText库来生成PDF文件,以及相关的源码和工具应用。 首先,我们需要引入iText库的相关依赖。在提供的文件列表中,可以看到`itextpdf-5.1.1.jar`和`itextasian.jar`这两个文件。`...

    itext生成pdf并通过证书进行签章

    在IT行业中,PDF文档的生成和安全签署是常见的需求,特别是在法律、金融和政府等领域。本文将详细探讨如何使用iText库生成PDF并利用证书进行签章,确保文档的完整性和不可篡改性。 首先,iText是一个强大的开源Java...

    itext生成pdf文件-表格

    在IT行业中,生成PDF文件是一项常见的任务,特别是在文档制作、报表导出以及数据展示等领域。iText是一个流行的Java库,专门用于创建和编辑PDF文档。本文将深入探讨iText如何生成包含表格的PDF文件,同时结合提供的...

    使用itext生成pdf需要的jar包

    在IT行业中,生成PDF文档是常见的需求,特别是在报表、发票或文档记录等方面。iText是一个流行的Java库,专门用于创建和修改PDF文档。本篇将详细介绍如何使用iText生成PDF,以及所需的jar包。 首先,我们需要理解...

    使用itext生成PDF文件

    在IT行业中,生成PDF文件是一项常见的任务,特别是在报表、文档管理和电子书制作等领域。iText是一个流行的Java库,用于创建和修改PDF文档。本篇文章将详细介绍如何使用iText库生成PDF文件,以及在这个过程中可能...

    初学Itext 生成PDF 表格,条形码(一维),图片

    对于初学者来说,使用iText库生成PDF表格、一维条形码以及在PDF中插入图片是一项基础但十分重要的技能。以下内容将详细介绍这些知识点,并提供一些基本的代码示例来帮助理解。 首先,iText库中生成PDF表格的能力让...

    Java IText生成PDF

    在本篇文章中,我们将深入探讨如何使用IText在Java环境中生成PDF文档。 首先,你需要在项目中引入IText库。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.itextpdf</groupId> ...

Global site tag (gtag.js) - Google Analytics