纯JAVA代码利用DynamicReports插件生成动态报表

1.首先,我的目的是纯java项目连接SQL2008数据库,之后能够应客户需要打印出用户的近期10次的消费回单。


2.昨天想到用ireport+jasperreports生成报表,发现生成的是静态的报表,不具有实时性,不能满足要求。


3.今天看到jasperreports插件DynamicReports可以动态生成.pdf格式的报表,于是开始艰辛的探索:


(1)准备工作:

.去官网下载DynamicReports的包。我下载的好像是DynamicJasper-5.0.4-bundle解压之后里面有5个DynamicJasper的.jar文件。


.再去官网下载一个写有例程的压缩包,我是下载的dynamicreports-4.1.1-project-with-dependencies。里面的\lib路径里面的许多.jar文件很重要。


.再去下载一个jasperreports-6.3.0-project的压缩包。解压之后里面的\dist路径下有一个jasperreports-6.3.0(最新版本)的.jar文件。


(2)开始打开Eclipse新建一个JAVA工程。(注:前提是你要制作的表格的数据库已经建好。字段都已经无误)。


(3)现在进行一个至关重要的步骤:给该工程添加准备的一系列.jar文件。给工程添加包的步骤不在赘述,直接说添加哪些包:


DynamicJasper-5.0.4-bundle解压之后里面有5个DynamicJasper的.jar文件;

jasperreports-6.3.0-project的压缩包里面的jasperreports-6.3.0.jar;

dynamicreports-4.1.1-project-with-dependencies。里面的\lib路径里面的commons-collections-3.2.2.jar;

commons-digester-2.1.jar;commons-lang3-3.1.jar;commons-logging-1.1.1.jar;itext-2.1.7.js5.jar。


最后别忘了把你的SQL的驱动包加载到里面。最后包含的包如图所示:其中还有一个iTextAsian.jar包一会再说。



(4).贴上我的纯java代码:仅供参考。(注:大部分copy的别人的,但是有一部分我自己修改了)。


纯JAVA代码利用DynamicReports插件生成动态报表

[java] view plain copy
  1. <span style="font-size:18px;color:#333333;">package dynamicreports;  
  2.   
  3. import java.awt.Color;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.sql.Connection;  
  8. import java.sql.DriverManager;  
  9. import java.sql.SQLException;  
  10.   
  11. import javax.swing.JFrame;  
  12. import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;  
  13. import net.sf.dynamicreports.report.builder.DynamicReports;  
  14. import net.sf.dynamicreports.report.builder.column.Columns;  
  15. import net.sf.dynamicreports.report.builder.component.Components;  
  16. import net.sf.dynamicreports.report.builder.datatype.DataTypes;  
  17. import net.sf.dynamicreports.report.builder.style.StyleBuilder;  
  18. import net.sf.dynamicreports.report.constant.HorizontalAlignment;  
  19. import net.sf.dynamicreports.report.constant.PageType;  
  20. import net.sf.dynamicreports.report.exception.DRException;  
  21.   
  22. import com.lowagie.text.pdf.BaseFont;  
  23. /** 
  24.  *  
  25.  * @ClassName: Reports 
  26.  * @Description: 打印动态pdf报表 
  27.  * @author: Administrator 
  28.  * @date: 2016年12月30日 下午8:01:09 
  29.  */  
  30. public class Reports{  
  31.       
  32.     public static Connection getConn() throws ClassNotFoundException, SQLException{  
  33.         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
  34.         return(Connection) DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=CardManagementSystem""Sa""Wang89918157");  
  35.     }  
  36.       
  37.     @SuppressWarnings("deprecation")  
  38.     public static void buildReport(Connection conn,String sqlString){  
  39.         JasperReportBuilder report=DynamicReports.report();//创建空报表  
  40.         //设置报表的一系列样式 ,stl是创建和自定义风格的一组方法  
  41.         StyleBuilder boldStl=DynamicReports.stl.style().bold();  
  42.         StyleBuilder boldCenteredStl=DynamicReports.stl.style(boldStl).setHorizontalAlignment(HorizontalAlignment.CENTER);;  
  43.         StyleBuilder titleStl=DynamicReports.stl.style(boldCenteredStl).setFontSize(16);  
  44.         StyleBuilder columnTitleStl=DynamicReports.stl.style(boldCenteredStl).setBorder(DynamicReports.stl.pen1Point())  
  45.                 .setBackgroundColor(Color.LIGHT_GRAY);//设置列名栏的背景颜色为灰色  
  46.           
  47.         StyleBuilder fontStyleBuilder = DynamicReports.stl.style().setPadding(2)  
  48.                 .setPdfFontName("STSong-Light")  
  49.                 .setPdfEncoding("UniGB-UCS2-H")  
  50.                 .setPdfEmbedded(BaseFont.NOT_EMBEDDED);  
  51.           
  52.         columnTitleStl.setPdfFontName("STSong-Light")  
  53.         .setPdfEncoding("UniGB-UCS2-H")  
  54.         .setPdfEmbedded(BaseFont.NOT_EMBEDDED);  
  55.           
  56.         titleStl.setPdfFontName("STSong-Light")  
  57.         .setPdfEncoding("UniGB-UCS2-H")  
  58.         .setPdfEmbedded(BaseFont.NOT_EMBEDDED);  
  59.           
  60.         report.setPageFormat(PageType.A5); //设置每一页的格式  
  61.           
  62.         report.columns(Columns.column("操作日期""OperateTime", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  63.         Columns.column("用户姓名""CustomerName", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  64.         Columns.column("扣钱""Deductmoney", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  65.         Columns.column("存钱""Savemoney", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  66.         Columns.column("用户ID""CustomerID", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  67.         Columns.column("余额""CustomerMoney", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER))  
  68.               .setColumnStyle(fontStyleBuilder)   //查询的数据的字体格式  
  69.               .setColumnTitleStyle(columnTitleStl) //设置列名的风格  
  70.               .setHighlightDetailEvenRows(true)  //偶数行高亮显示  
  71.               .title(Components.text("客户消费单").setStyle(titleStl))//标题  
  72.               .pageFooter(Components.pageXofY().setStyle(boldCenteredStl))//页角  
  73.               .setDataSource("SELECT * FROM ReportMessage WHERE OperateTimeCustomerID = '"+sqlString+"'", conn);//数据源  
  74.         try {  
  75.             //显示报表  
  76.             report.show(false);  //关闭预览窗口后不退出程序  
  77.             try {  
  78.                 FileOutputStream fileOutputStream = new FileOutputStream("D:/test.pdf");//构建一个pdf存放的输出位置  
  79.                 report.toPdf(fileOutputStream);//打印的pdf地址  
  80.                 try {  
  81.                     fileOutputStream.flush();  //保证pdf输出完毕  
  82.                     fileOutputStream.close();  
  83.                 } catch (IOException e) {  
  84.                     // TODO Auto-generated catch block  
  85.                     e.printStackTrace();  
  86.                 }  
  87.             } catch (FileNotFoundException e) {  
  88.                 // TODO Auto-generated catch block  
  89.                 e.printStackTrace();  
  90.             }  
  91.         } catch (DRException e) {  
  92.             // TODO Auto-generated catch block  
  93.             e.printStackTrace();  
  94.         }  
  95.     }  
  96. }</span>  

(5)最后说一下的显示中文的时候的必须需要的两个.jar文件。一个是itext-2.1.7.js5.jar;还有一个是iTextAsian.jar文件。而且我输出的就是一个消费单表格,如果需要其他的报表功能,你需要添加你需要的另外一些.jar文件。

(6)我的pdf文件:纯JAVA代码利用DynamicReports插件生成动态报表



还有许多需要美化的地方。。。。水平就只能到这了。附上一些链接:


http://blog.csdn.net/qiuhan/article/details/42558811

http://download.csdn.net/download/ssxueyi/4659874  

http://hepx.iteye.com/blog/1880534   


这是我的毕业设计涉及到的一部分,想了解更多关于这个项目的资料,可以去我的github,有关于这个小项目的上位机和下位机的所有资料,附上链接:TeslaHua的Github

 





版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang975380547/article/details/54287775

1.首先,我的目的是纯java项目连接SQL2008数据库,之后能够应客户需要打印出用户的近期10次的消费回单。


2.昨天想到用ireport+jasperreports生成报表,发现生成的是静态的报表,不具有实时性,不能满足要求。


3.今天看到jasperreports插件DynamicReports可以动态生成.pdf格式的报表,于是开始艰辛的探索:


(1)准备工作:

.去官网下载DynamicReports的包。我下载的好像是DynamicJasper-5.0.4-bundle解压之后里面有5个DynamicJasper的.jar文件。


.再去官网下载一个写有例程的压缩包,我是下载的dynamicreports-4.1.1-project-with-dependencies。里面的\lib路径里面的许多.jar文件很重要。


.再去下载一个jasperreports-6.3.0-project的压缩包。解压之后里面的\dist路径下有一个jasperreports-6.3.0(最新版本)的.jar文件。


(2)开始打开Eclipse新建一个JAVA工程。(注:前提是你要制作的表格的数据库已经建好。字段都已经无误)。


(3)现在进行一个至关重要的步骤:给该工程添加准备的一系列.jar文件。给工程添加包的步骤不在赘述,直接说添加哪些包:


DynamicJasper-5.0.4-bundle解压之后里面有5个DynamicJasper的.jar文件;

jasperreports-6.3.0-project的压缩包里面的jasperreports-6.3.0.jar;

dynamicreports-4.1.1-project-with-dependencies。里面的\lib路径里面的commons-collections-3.2.2.jar;

commons-digester-2.1.jar;commons-lang3-3.1.jar;commons-logging-1.1.1.jar;itext-2.1.7.js5.jar。


最后别忘了把你的SQL的驱动包加载到里面。最后包含的包如图所示:其中还有一个iTextAsian.jar包一会再说。



(4).贴上我的纯java代码:仅供参考。(注:大部分copy的别人的,但是有一部分我自己修改了)。


纯JAVA代码利用DynamicReports插件生成动态报表

[java] view plain copy
  1. <span style="font-size:18px;color:#333333;">package dynamicreports;  
  2.   
  3. import java.awt.Color;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.sql.Connection;  
  8. import java.sql.DriverManager;  
  9. import java.sql.SQLException;  
  10.   
  11. import javax.swing.JFrame;  
  12. import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;  
  13. import net.sf.dynamicreports.report.builder.DynamicReports;  
  14. import net.sf.dynamicreports.report.builder.column.Columns;  
  15. import net.sf.dynamicreports.report.builder.component.Components;  
  16. import net.sf.dynamicreports.report.builder.datatype.DataTypes;  
  17. import net.sf.dynamicreports.report.builder.style.StyleBuilder;  
  18. import net.sf.dynamicreports.report.constant.HorizontalAlignment;  
  19. import net.sf.dynamicreports.report.constant.PageType;  
  20. import net.sf.dynamicreports.report.exception.DRException;  
  21.   
  22. import com.lowagie.text.pdf.BaseFont;  
  23. /** 
  24.  *  
  25.  * @ClassName: Reports 
  26.  * @Description: 打印动态pdf报表 
  27.  * @author: Administrator 
  28.  * @date: 2016年12月30日 下午8:01:09 
  29.  */  
  30. public class Reports{  
  31.       
  32.     public static Connection getConn() throws ClassNotFoundException, SQLException{  
  33.         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
  34.         return(Connection) DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=CardManagementSystem""Sa""Wang89918157");  
  35.     }  
  36.       
  37.     @SuppressWarnings("deprecation")  
  38.     public static void buildReport(Connection conn,String sqlString){  
  39.         JasperReportBuilder report=DynamicReports.report();//创建空报表  
  40.         //设置报表的一系列样式 ,stl是创建和自定义风格的一组方法  
  41.         StyleBuilder boldStl=DynamicReports.stl.style().bold();  
  42.         StyleBuilder boldCenteredStl=DynamicReports.stl.style(boldStl).setHorizontalAlignment(HorizontalAlignment.CENTER);;  
  43.         StyleBuilder titleStl=DynamicReports.stl.style(boldCenteredStl).setFontSize(16);  
  44.         StyleBuilder columnTitleStl=DynamicReports.stl.style(boldCenteredStl).setBorder(DynamicReports.stl.pen1Point())  
  45.                 .setBackgroundColor(Color.LIGHT_GRAY);//设置列名栏的背景颜色为灰色  
  46.           
  47.         StyleBuilder fontStyleBuilder = DynamicReports.stl.style().setPadding(2)  
  48.                 .setPdfFontName("STSong-Light")  
  49.                 .setPdfEncoding("UniGB-UCS2-H")  
  50.                 .setPdfEmbedded(BaseFont.NOT_EMBEDDED);  
  51.           
  52.         columnTitleStl.setPdfFontName("STSong-Light")  
  53.         .setPdfEncoding("UniGB-UCS2-H")  
  54.         .setPdfEmbedded(BaseFont.NOT_EMBEDDED);  
  55.           
  56.         titleStl.setPdfFontName("STSong-Light")  
  57.         .setPdfEncoding("UniGB-UCS2-H")  
  58.         .setPdfEmbedded(BaseFont.NOT_EMBEDDED);  
  59.           
  60.         report.setPageFormat(PageType.A5); //设置每一页的格式  
  61.           
  62.         report.columns(Columns.column("操作日期""OperateTime", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  63.         Columns.column("用户姓名""CustomerName", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  64.         Columns.column("扣钱""Deductmoney", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  65.         Columns.column("存钱""Savemoney", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  66.         Columns.column("用户ID""CustomerID", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER),  
  67.         Columns.column("余额""CustomerMoney", DataTypes.stringType()).setHorizontalAlignment(HorizontalAlignment.CENTER))  
  68.               .setColumnStyle(fontStyleBuilder)   //查询的数据的字体格式  
  69.               .setColumnTitleStyle(columnTitleStl) //设置列名的风格  
  70.               .setHighlightDetailEvenRows(true)  //偶数行高亮显示  
  71.               .title(Components.text("客户消费单").setStyle(titleStl))//标题  
  72.               .pageFooter(Components.pageXofY().setStyle(boldCenteredStl))//页角  
  73.               .setDataSource("SELECT * FROM ReportMessage WHERE OperateTimeCustomerID = '"+sqlString+"'", conn);//数据源  
  74.         try {  
  75.             //显示报表  
  76.             report.show(false);  //关闭预览窗口后不退出程序  
  77.             try {  
  78.                 FileOutputStream fileOutputStream = new FileOutputStream("D:/test.pdf");//构建一个pdf存放的输出位置  
  79.                 report.toPdf(fileOutputStream);//打印的pdf地址  
  80.                 try {  
  81.                     fileOutputStream.flush();  //保证pdf输出完毕  
  82.                     fileOutputStream.close();  
  83.                 } catch (IOException e) {  
  84.                     // TODO Auto-generated catch block  
  85.                     e.printStackTrace();  
  86.                 }  
  87.             } catch (FileNotFoundException e) {  
  88.                 // TODO Auto-generated catch block  
  89.                 e.printStackTrace();  
  90.             }  
  91.         } catch (DRException e) {  
  92.             // TODO Auto-generated catch block  
  93.             e.printStackTrace();  
  94.         }  
  95.     }  
  96. }</span>  

(5)最后说一下的显示中文的时候的必须需要的两个.jar文件。一个是itext-2.1.7.js5.jar;还有一个是iTextAsian.jar文件。而且我输出的就是一个消费单表格,如果需要其他的报表功能,你需要添加你需要的另外一些.jar文件。

(6)我的pdf文件:纯JAVA代码利用DynamicReports插件生成动态报表



还有许多需要美化的地方。。。。水平就只能到这了。附上一些链接:


http://blog.csdn.net/qiuhan/article/details/42558811

http://download.csdn.net/download/ssxueyi/4659874  

http://hepx.iteye.com/blog/1880534   


这是我的毕业设计涉及到的一部分,想了解更多关于这个项目的资料,可以去我的github,有关于这个小项目的上位机和下位机的所有资料,附上链接:TeslaHua的Github