`
sunxboy
  • 浏览: 2871438 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

J2EE使用iText将数据保存为PDF文档(转)

阅读更多

在B/S结构的项目中,经常需要将一些数据导出为PDF文档,项目中我们使用的就是iText包,该包可以从其官方网上下载: http://www.lowagie.com/iText/  。

下面就来讲一下具体的使用方法。

1、首先我们建一个叫做DbgridColumn的Java类,用来表示标题信息,具体字段如图。

 
java 代码
  1. List columns = new ArrayList();    
  2.   
  3. DbgridColumn column = new DbgridColumn();    
  4. column.setProperty = "DM";   
  5. column.setCaption  = "代码";    
  6. column.setWidth    = 35;    
  7. columns.add(column);    
  8.   
  9. column.setProperty = "MC";    
  10. column.setCaption  = "名称";    
  11. column.setWidth    = 175;    
  12. columns.add(column);  

2、我们需要构建演示数据,数据列表与Java构建函数。

 
java 代码
  1. Collection collection = new ArrayList();       
  2.      
  3. Map map = new HashMap();                                                
  4. map.put("DM",new String("01");    
  5. map.put("MC",new String("设置成功");    
  6. collection.add(map);    
  7.                                                                                      
  8. map.put("DM",new String("02");    
  9. map.put("MC",new String("中继命令没有返回");    
  10. collection.add(map);    
  11.       
  12. map.put("DM",new String("03");    
  13. map.put("MC",new String("设置内容非法");    
  14. collection.add(map); 
  15. map.put("DM",new String("04");    
  16. map.put("MC",new String("密码权限不足");    
  17. collection.add(map);    
  18.         
  19. map.put("DM",new String("05");       
  20. map.put("MC",new String("无此数据项");   
  21. collection.add(map);                     
  22.                                          
  23. map.put("DM",new String("06");    
  24. map.put("MC",new String("命令时间失效");   
  25. collection.add(map);    
  26.                         
  27. map.put("DM",new String("07");   
  28. map.put("MC",new String("目标地址不存在");   
  29. collection.add(map);                         
  30.                                              
  31. map.put("DM",new String("08");    
  32. map.put("MC",new String("发送失败");   
  33. collection.add(map);                   
  34.        
  35. map.put("DM",new String("09");   
  36. map.put("MC",new String("短消息帧太长");   
  37. collection.add(map); 
  

3、将上面格式的数据转换为iText的PdfPTable格式。

java 代码
  1. public class PdfReport extends ReportModal       
  2. {                                                
  3.                                                  
  4.    public PdfReport(OutputStream out,DbgridModal modal)   
  5.    {                                                      
  6.       this.out = out;    
  7. this.modal = modal;        
  8.    }    
  9.   
  10.    public PdfReport()    
  11. { }    
  12.   
  13.    public void out()   
  14.    {   
  15. Document document = new Document();     
  16.       try    
  17. {     
  18.         public class PdfReport extends ReportModal    
  19. {         
  20.            
  21.    public PdfReport(OutputStream out,DbgridModal modal)    
  22.    {         
  23.       this.out = out;    
  24.  this.modal = modal;         
  25.    }    
  26.   
  27.    public PdfReport()    
  28.  {     
  29.    }    
  30. /* 输出 */       
  31.    public void out()       
  32.    {    
  33.      Document document = new Document();     
  34.       try    
  35.      {       
  36.          PdfWriter.getInstance(document, out);           
  37.       document.open();     
  38.      document.add(DbgridToPdfTable(modal.columns,modal.collection));    
  39.  }      
  40.       catch (DocumentException e)    
  41.     {    
  42.        throw new Error(e.getMessage(), e);      
  43.       }    
  44.   catch (IOException e)         
  45.       {     
  46.          throw new Error(e.getMessage(), e);    
  47.     }    
  48.    if(document.isOpen())    
  49.    {         
  50.             document.close();        
  51.       }    
  52.   
  53.       
  54.   public PdfPTable  DbgridToPdfTable(List columns,Collection collection)    
  55.   throws BadElementException,DocumentException,IOException    
  56.  {    
  57.       int columnsCount = columns.size();    
  58.   int rowsCount = collection.size();         
  59.       //创建Pdf Table    
  60.    PdfPTable table = new PdfPTable(columnsCount);    
  61.   //table总宽度    
  62. table.setTotalWidth((float)getTotalWidth(columns));        
  63.       table.setWidths(getWidths(columns));   
  64.       //每列之间的间隔    
  65. table.setSpacingBefore(Float.parseFloat("1.0"));    
  66. //使用中文字符,要支持中文字符,还需要在其官方网站下载iTextAsian.jar和iTextAsianCmaps.jar 两个包     
  67.  BaseFont bfChinese = BaseFont.createFont("STSong-Light""UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);         
  68.       com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 9, com.lowagie.text.Font.NORMAL);      
  69.       //开始写标题    
  70.   for (int i=0;i      
  71.       {        
  72.          DbgridColumn dbgridColumn = (DbgridColumn)columns.get(i);         
  73.          //创建单元格    
  74.  PdfPCell cell = new PdfPCell(new Phrase(dbgridColumn.getCaption(), FontChinese ));     
  75.          //标题的背景颜色    
  76.       cell.setBackgroundColor(new Color(212,208,200));         
  77.          //左右对齐方式         
  78.          cell.setHorizontalAlignment(getCellAlign(dbgridColumn.getAlign()));     
  79.          //垂直对齐方式默认为中间对齐    
  80.          cell.setVerticalAlignment(Element.ALIGN_MIDDLE);    
  81.          table.addCell(cell);          
  82.       }         
  83.           
  84.    //写表格数据        
  85.       Object[] objects = (Object[])collection.toArray();    
  86.       for (int j=0;j,@gdE}  {     
  87.          Map map = (Map)objects[j];         
  88.          for (int i=0;i&Uo(}         {         
  89.              String value = "";    
  90. DbgridColumn dbgridColumn = (DbgridColumn)columns.get(i);        
  91.              //根据字段名取数据    
  92.    Object bean = map.get(dbgridColumn.getProperty());          
  93.              //getRealValue函数是对具体的一些数据类型(比如日期、double、integer等)进行格式化处理,如果为null,则返回空字符串           
  94.  value = getRealValue(bean,dbgridColumn);         
  95.   //创建单元格        
  96.  PdfPCell cell = new PdfPCell(new Phrase(value, FontChinese ));    
  97.  //对齐方式       
  98. cell.setHorizontalAlignment(getCellAlign(dbgridColumn.getAlign()));       
  99.   cell.setVerticalAlignment(Element.ALIGN_TOP);    
  100.       table.addCell(cell);        
  101.          }    
  102.    }    
  103.   
  104.       return table;   
  105.    }    
  106.  /* 把字符串型对齐方式 left,right,center 转化为pdf格式的对齐方式 */    
  107.  public int getCellAlign(String align)      
  108.    {       
  109.       if (align==null)       
  110.       {    
  111. return Cell.ALIGN_LEFT;       
  112.       }         
  113.       if (align.toLowerCase().equals("left"))    
  114.  {    
  115. return Cell.ALIGN_LEFT;    
  116.       }          
  117.    if (align.toLowerCase().equals("right"))    
  118. {       
  119.          return Cell.ALIGN_RIGHT;     
  120.       }    
  121.   if (align.toLowerCase().equals("center"))    
  122.   {    
  123. return Cell.ALIGN_CENTER;    
  124.  }    
  125.  return Cell.ALIGN_LEFT;     
  126.   
  127. /* 返回一个int型的数组,存放每列的宽度 */    
  128.    public int[] getWidths(java.util.List cols)    
  129.  {    
  130.   int widths[]=new int[cols.size()];        
  131.       for (int i=0;i       
  132.       {    
  133.     DbgridColumn dbgridColumn = (DbgridColumn)cols.get(i);         
  134.          widths[i] = dbgridColumn.getWidth();        
  135.       }    
  136.     return widths;     
  137.    }       
  138.  /* 返回表格的总宽度 */    
  139. public int getTotalWidth(java.util.List cols)    
  140.   {    
  141. int totalwidth = 0;    
  142.  for (int i=0;i2N    {    
  143.     DbgridColumn dbgridColumn = (DbgridColumn)cols.get(i);       
  144.          totalwidth = totalwidth + dbgridColumn.getWidth();    
  145.      }    
  146.   return totalwidth;          
  147.    }    
  148.  PdfWriter.getInstance(document, out);           
  149.       document.open();     
  150.     document.add(DbgridToPdfTable(modal.columns,modal.collection));    
  151.     }                                                                                    
  152.       catch (DocumentException e)    
  153.      {    
  154.        throw new Error(e.getMessage(), e);                                         
  155.       }    
  156.     catch (IOException e)                                                                         
  157.       {                                                                                   
  158.          throw new Error(e.getMessage(), e);    
  159.      }    
  160.    if(document.isOpen())    
  161.     {                                                                                  
  162.             document.close();                                                                                  
  163.       }    
  164.   
  165.  public PdfPTable  DbgridToPdfTable(List columns,Collection collection)    
  166.      throws BadElementException,DocumentException,IOException    
  167.    {                                                                                  
  168.       int columnsCount = columns.size();    
  169.    int rowsCount = collection.size();  
  170.  //创建Pdf Table    
  171.    PdfPTable table = new PdfPTable(columnsCount);    
  172.     //table总宽度    
  173.   table.setTotalWidth((float)getTotalWidth(columns));      
  174. //每列的宽度  
  175.  table.setWidths(getWidths(columns));     
  176.  //每列之间的间隔    
  177.   table.setSpacingBefore(Float.parseFloat("1.0"));    
  178.     //使用中文字符,要支持中文字符,还需要在其官方网站下载iTextAsian.jar和iTextAsianCmaps.jar 两个包     
  179. BaseFont bfChinese = BaseFont.createFont("STSong-Light""UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);     
  180. com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 9, com.lowagie.text.Font.NORMAL);        
  181. //开始写标题    
  182.     for (int i=0;i                                                                               
  183.       {            
  184.  DbgridColumn dbgridColumn = (DbgridColumn)columns.get(i);           
  185. //创建单元格    
  186.      PdfPCell cell = new PdfPCell(new Phrase(dbgridColumn.getCaption(), FontChinese ));      
  187. //标题的背景颜色    
  188.        cell.setBackgroundColor(new Color(212,208,200));       
  189.  //左右对齐方式    
  190. cell.setHorizontalAlignment(getCellAlign(dbgridColumn.getAlign()));         
  191.   //垂直对齐方式默认为中间对齐          
  192.  cell.setVerticalAlignment(Element.ALIGN_MIDDLE);   
  193.  table.addCell(cell); 
  194.  }                                                                                   
  195.           
  196.     //写表格数据    
  197. Object[] objects = (Object[])collection.toArray();          
  198.  for (int j=0;j,@gdE}Guest      {  
  199. Map map = (Map)objects[j];  for (int i=0;      { 
  200. String value = "";    
  201.  DbgridColumn dbgridColumn = (DbgridColumn)columns.get(i);        
  202. //根据字段名取数据    
  203.             Object bean = map.get(dbgridColumn.getProperty());           
  204. //getRealValue函数是对具体的一些数据类型(比如日期、double、integer等)进行格式化处理,如果为null,则返回空字符串      
  205. value = getRealValue(bean,dbgridColumn);                                                                                  
  206.              //创建单元格                                                                                
  207.              PdfPCell cell = new PdfPCell(new Phrase(value, FontChinese ));    
  208.             //对齐方式                                                                                            
  209.              cell.setVerticalAlignment(Element.ALIGN_TOP);    
  210.    table.addCell(cell);                                                                                  
  211.                                                                                        
  212.       return table;                                                                              
  213.    }    
  214.   /* 把字符串型对齐方式 left,right,center 转化为pdf格式的对齐方式 */    
  215.  public int getCellAlign(String align)                                                                                   
  216.    {                                                                             
  217.       if (align==null)                                                                          
  218.       {    
  219.      return Cell.ALIGN_LEFT;                                                                                
  220.       }                                                                              
  221.       if (align.toLowerCase().equals("left"))    
  222.      {    
  223.        return Cell.ALIGN_LEFT;                                                                                    
  224.       }          
  225.      if (align.toLowerCase().equals("right"))    
  226.       {                                                                                   
  227.          return Cell.ALIGN_RIGHT;                                                                                  
  228.       }    
  229.    if (align.toLowerCase().equals("center"))    
  230.      {    
  231.  return Cell.ALIGN_CENTER;    
  232.     }    
  233.     return Cell.ALIGN_LEFT;                                                                                  
  234.    }    
  235.      
  236.   /* 返回一个int型的数组,存放每列的宽度 */                                                                                  
  237.    public int[] getWidths(java.util.List cols)    
  238.   {    
  239.     int widths[]=new int[cols.size()];                                                                                   
  240.       for (int i=0;i                                                                                 
  241.       {    
  242.      DbgridColumn dbgridColumn = (DbgridColumn)cols.get(i);                       
  243.   widths[i] = dbgridColumn.getWidth();                                                                                 
  244.       }    
  245.   return widths;                                                                                  
  246.    }       
  247.  /* 返回表格的总宽度 */    
  248.   public int getTotalWidth(java.util.List cols)    
  249.   {    
  250.    int totalwidth = 0;    
  251.     for (int i=0;i2    {    
  252.      DbgridColumn dbgridColumn = (DbgridColumn)cols.get(i);                               
  253.  totalwidth = totalwidth + dbgridColumn.getWidth();                                                                        
  254.   return totalwidth;                                                                                    
  255.    }    
  256.   

4、通过Servlet生成pdf文档,并弹出下载对话框。

java 代码
  1. public class ReportServlet extends HttpServlet    
  2.   
  3. public ReportServlet()    
  4.    {    
  5.  }        
  6.           
  7. <
分享到:
评论

相关推荐

    itext_Part1学习

    itext是一个开放源代码的免费PDF库,使用它可以很轻松地创建pdf文档.它可以应用在j2se中,也可用在j2ee中.然而,关于这itext方面的资料实在是太少了,这本电子书是我花了很长时间从网上找来的,在此与大家分享一下. ...

    j2ee全jar包

    iText的jar包包括`itextpdf`、`itext-xmlworker`等,这些库提供了丰富的API,可用于生成复杂的报表、电子发票或者任何形式的PDF文档。通过iText,开发者可以方便地在Java应用中集成PDF生成和处理功能。 除了这三个...

    PDF套打模板制作(一)

    这个文档可能提供了使用J2EE(Java Enterprise Edition)开发PDF套打功能的指南,涵盖了服务器端的PDF生成、模板设计、数据绑定和打印流程控制等关键点。 综上所述,这个主题覆盖了PDF模板设计、编程实现、J2EE应用...

    pdf阅读软件

    在J2EE(Java 2 Platform, Enterprise Edition)环境中,PDF阅读软件可以作为Web应用程序的一部分,为用户提供在线浏览PDF文档的功能。J2EE是一个多层的、企业级的开发平台,主要用于构建分布式、基于组件的Web应用...

    itext_Part2学习

    itext是一个开放源代码的免费PDF库,使用它可以很轻松地创建pdf文档.它可以应用在j2se中,也可用在j2ee中.然而,关于这itext方面的资料实在是太少了,这本电子书是我花了很长时间从网上找来的,在此与大家分享一下.由于...

    基于WEB的多格式报表的设计与实现.pdf

    - 文件输出流:在生成PDF和Excel文件时,需要通过文件输出流将数据写入文件系统。 - 字体处理:在生成PDF时,若报表中包含中文等非英文字符,需要正确处理字体,确保字符显示的正确性。 在技术实现上,WEB报表的...

    j2eePractice

    这个实践项目展示了如何结合J2EE、PDF生成库、CSV处理库和Excel操作库,为用户提供便捷的数据导出和下载服务,这在许多企业应用中是非常常见的需求。掌握这些技能对于开发高效、健壮的业务系统至关重要。

    人力资源管理(基于ssh的j2ee项目)附带lib包2

    5. `iText-2.1.5.jar`:iText是一个用于生成PDF文档的库,可用于生成和导出报表。 6. `xerces-2.6.2.jar`:Xerces是Apache的XML解析器,用于处理XML文档。 7. `poi-2.5.1.jar`:Apache POI是用于读写Microsoft ...

    人力资源管理(基于ssh的j2ee项目)附带lib包

    - `itext-1.3.jar`:用于生成PDF文档,可能用于导出报表或合同。 - `freemarker.jar`:FreeMarker模板引擎,用于生成动态HTML页面。 - `c3p0-*.jar`:连接池库,提高数据库连接的复用和管理。 - `antlr-*.jar`:...

    web开发常用jar

    是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iTextAsian.jar itext中关于亚洲编码的类库,在这里用于中文字体的输入。 junit.jar Junit...

    java开发常用jar包

    是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iTextAsian.jar itext中关于亚洲编码的类库,在这里用于中文字体的输入。 junit.jar Junit包,...

    报表iReport使用教程

    ### iReport使用教程详解 ...通过上述步骤,用户可以轻松地使用iReport设计复杂的报表模板,并将其输出为所需的格式。此外,还可以利用iReport提供的各种功能进行更高级的报表设计,如添加图表、自定义样式等。

    java的POI操作Excel文件.pdf

    虽然POI最初并未涵盖处理Word文档的功能,但随着时间的发展,其他项目如iText也致力于提供这样的解决方案。此外,Apache POI的部分代码来源于OpenOffice项目,后者是一个开源的办公套件,包含C++实现的Word和Excel...

    JasperReport开发(一)

    - **iText**:是一个开源的Java库,能创建和修改PDF文档,也可将XML、HTML转换为PDF。 - **OpenOffice**:开源软件,可在Windows和Linux平台上运行,可将Word或Excel转换为PDF。 ### 2. JasperReport框架介绍 ...

    Java编程风格及基础类库使用培训

    4. **数据库数据导入导出基础类库**:如处理Dbf、Excel和PDF文件的库,例如Apache POI和iText,方便数据的导入导出。 5. **Java设计模式**:包括单例、工厂、观察者、装饰者、适配器等基本设计模式,以及在J2EE环境...

    spring框架各jar包详解

    Spring 使用 iText 提供 web 层的 PDF 支持。只有你的 web 应用需要生成 PDF 输出时才需包含这个 JAR 文件。 j2eeactivation.jar, connector-api.jar, ejb.jar, jaxrpc.jar, jdbc2_0-stdext.jar, jms.jar, jstl.jar...

    java源码包JSP实例源码JAVA开发源码65个合集.zip

    用iText类库制作PDF文档.rar 用JAVA做的聊天软件,有安装程序和源代码.rar 用java写的SFTP代码.rar 用Java加密类实现DES、RSA及SHA的加密算法.rar 用jdom解析xml.rar 电子书店管理系统.rar 编译原理--LR(1)分析表...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥验证签名结果,使用公钥初始化签名对象,用于...

    java源码包---java 源码 大量 实例

    得到RSA密钥对,产生Signature对象,对用私钥对信息(info)签名,用指定算法产生签名对象,用私钥初始化签名对象,将待签名的数据传送给签名对象(须在初始化之后),用公钥验证签名结果,使用公钥初始化签名对象,用于...

Global site tag (gtag.js) - Google Analytics