`
liyiye
  • 浏览: 423953 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

在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型的数组,存放每列的宽度 */  
分享到:
评论

相关推荐

    itext_Part1学习

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

    J2EE使用report绘制报表所用Jar包

    4. **报表编译与执行**:在J2EE应用中,你需要将jrxml文件编译为.jasper二进制文件,然后通过Java代码调用JasperFillManager填充数据并使用JasperExportManager导出报表。编译过程通常使用JasperCompileManager,而...

    j2ee全jar包

    iText则是一个用于处理PDF文档的Java库,它允许开发者创建、修改和读取PDF文件。iText的jar包包括`itextpdf`、`itext-xmlworker`等,这些库提供了丰富的API,可用于生成复杂的报表、电子发票或者任何形式的PDF文档。...

    PDF套打模板制作(一)

    这可能涵盖了编程语言如Java、Python或JavaScript,以及可能用到的库,如iText、PDFBox或Apache FOP,这些工具可以帮助开发者生成和操作PDF文件。 “工具”标签则可能指的是使用特定的软件或应用程序,比如Adobe ...

    pdf阅读软件

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

    itext_Part2学习

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

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

    - iText Java库的使用:iText是一个用于创建和操作PDF文件的开源Java库。可以用来生成PDF文件、添加文本和图像、创建表格等。在WEB报表设计中,iText用于生成PDF格式的报表,如通过创建Document对象、实例化...

    j2eePractice

    生成PDF文件通常需要使用专门的库,如iText或Apache PDFBox。这些库允许开发者将HTML、文本或图像转换为PDF格式,确保用户可以离线查看内容。 CSV(Comma Separated Values)文件是一种常见的数据交换格式,常用于...

    人力资源管理(基于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`:...

    java 反模式 卷4 pdf

    10. **J2EE反模式**:在J2EE应用开发中,过度使用EJB、Session Beans等技术可能导致性能下降,复杂度增加。理解微服务、轻量级框架(如Spring Boot)的优势,并根据项目需求选择合适的技术栈。 阅读《Java 反模式 ...

    Web报表开发技术-JFreeReport开发技术实例

    在实际应用中,JFreeReport还可以与其他组件结合增强功能,例如使用JFreeChart生成报表中的图表,或者使用iText库导出PDF。此外,为了提高用户体验,可以考虑使用Ajax技术实现报表的动态加载和刷新,或者利用...

    报表iReport使用教程

    如果需要在PDF文件中显示中文等亚洲字符,则还需要下载itext的亚洲字符包`iTextAsian.jar`。 - **jfreechart-1.0.0-rc1.jar**:这是一个强大的统计图表生成工具,支持生成PNG、JPG等多种格式的图表。JFreeChart可以...

    web开发常用jar

    通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iTextAsian.jar itext中关于亚洲编码的类库,在这里用于中文字体的输入。 junit.jar Junit包,当你运行Hibernate自带的测试...

    java开发常用jar包

    通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iTextAsian.jar itext中关于亚洲编码的类库,在这里用于中文字体的输入。 junit.jar Junit包,当你运行Hibernate自带的测试代码的...

    java的POI操作Excel文件.pdf

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

    BIRT 的安装使用

    5. **iText-1.3.jar**(1.09M)和 **iTextAsian.jar**(0.33M):这两个文件分别用于支持 PDF 输出和亚洲字体的支持。安装过程中需要将它们添加到指定目录。 #### 四、安装步骤 ##### 1. 安装 RCP Designer 2.1.2 ...

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

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

Global site tag (gtag.js) - Google Analytics