报表开发导出各种格式文件的API

简介:

文件输出的多样性,准确性和稳定性对于我们常用的报表软件来说很重要。报表的输入是指从报表的模板文件(XML格式的)创建WorkBook对象,输出则指将报表保存为各种格式文件,比如Pdf、Excel、Word这种常见的文件格式,比如FineReport还支持cpt、Svg、Csv、Image(包含png、 jpg、gif、 bmp、wbmp)等多种文件格式。

         因为常常会碰到报表的开发工作,这里总结了几种格式文件导出的API。

1、导出成内置数据集模板

导出成内置数据集模板,就是将原模板的数据源根据参数条件查询出结果并转为内置数据集,然后把模板导出,不需要对原模板进行计算(数据列扩展、公式计算等)。


[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. // 将未执行模板工作薄导出为内置数据集模板  

  2.             outputStream = new FileOutputStream(new File("E:\\EmbExport.cpt"));  

  3.             EmbeddedTableDataExporter templateExporter = new EmbeddedTableDataExporter();  

  4.             templateExporter.export(outputStream, workbook);  



2、导出模板文件

我们可以将原模板通过程序编辑后再次导出为模板文件,或者将某一路径下的模板保存至另一路径下。

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. // 将模板工作薄导出模板文件,在导出前您可以编辑导入的模板工作薄,可参考报表调用章节  

  2.             outputStream = new FileOutputStream(new File("E:\\TmpExport.cpt"));  

  3.             ((WorkBook) workbook).export(outputStream);  


3、导出Excel文件

模板工作薄WorkBook执行后为结果工作薄ResultWorkBook,我们可以把计算后的结果导出成Excel文件。

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. // 将结果工作薄导出为Excel文件  

  2.             outputStream = new FileOutputStream(new File("E:\\ExcelExport.xls"));  

  3.             ExcelExporter ExcelExport = new ExcelExporter();  

  4.             ExcelExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));  


4、导出Word文件

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. // 将结果工作薄导出为Word文件  

  2.             outputStream = new FileOutputStream(new File("E:\\WordExport.doc"));  

  3.             WordExporter WordExport = new WordExporter();  

  4.             WordExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));  

5、导出Pdf文件


[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. // 将结果工作薄导出为Pdf文件  

  2.                             outputStream = new FileOutputStream(newFile("E:\\PdfExport.pdf"));  

  3.                             PDFExporter PdfExport = newPDFExporter();  

  4.                             PdfExport.export(outputStream,workbook.execute(parameterMap,new WriteActor()));  


6、导出Txt文件

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. // 将结果工作薄导出为Txt文件(txt文件本身不支持表格、图表等,被导出模板一般为明细表)  

  2.             outputStream = new FileOutputStream(new File("E:\\TxtExport.txt"));<pre code_snippet_id="1709587" snippet_file_name="blog_20160606_6_1825679" name="code" class="java"></pre>  

7、导出Csv文件


[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. // 将结果工作薄导出为Csv文件  

  2.             outputStream = new FileOutputStream(new File("E:\\CsvExport.csv"));  

  3.             CSVExporter CsvExport = new CSVExporter();  

  4.             CsvExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));  


8、导出Svg文件

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. //将结果工作薄导出为SVG文件    

  2.             outputStream = new FileOutputStream(new File("D:\\SvgExport.svg"));    

  3.             SVGExporter SvgExport = new SVGExporter();    

  4.             SvgExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));  

9、导出Image文件

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. //将结果工作薄导出为image文件    

  2.             outputStream = new FileOutputStream(new File("D:\\PngExport.png"));    

  3.             ImageExporter ImageExport = new ImageExporter();    

  4.             ImageExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));  

10、释放进程

通过导出API在后台导出excel等文件,会产生很多进程,通过下面的方案释放进程。在导出完成之后添加下面代码:

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. outputStream.close();  

  2. ModuleContext.stopModules();  

例如,一个完整的可执行代码:

[java] view plain copy 在CODE上查看代码片派生到我的代码片

  1. package com.fr.io;    

  2.     

  3. import java.io.File;    

  4. import java.io.FileOutputStream;    

  5. import com.fr.base.FRContext;   

  6. import com.fr.general.ModuleContext;  

  7. import com.fr.base.Parameter;  

  8. import com.fr.dav.LocalEnv;  

  9. import com.fr.io.exporter.CSVExporter;  

  10. import com.fr.io.exporter.EmbeddedTableDataExporter;  

  11. import com.fr.io.exporter.Excel2007Exporter;  

  12. import com.fr.io.exporter.ExcelExporter;  

  13. import com.fr.io.exporter.PDFExporter;  

  14. import com.fr.io.exporter.TextExporter;  

  15. import com.fr.io.exporter.WordExporter;  

  16. import com.fr.io.exporter.SVGExporter;  

  17. import com.fr.io.exporter.ImageExporter;  

  18. import com.fr.main.impl.WorkBook;  

  19. import com.fr.main.workbook.ResultWorkBook;  

  20. import com.fr.report.module.EngineModule;  

  21. import com.fr.stable.WriteActor;  

  22.   

  23.     

  24. public class ExportApi {    

  25.     public static void main(String[] args) {    

  26.         // 定义报表运行环境,才能执行报表    

  27.         String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF";    

  28.         FRContext.setCurrentEnv(new LocalEnv(envpath));    

  29.         ModuleContext.startModule(EngineModule.class.getName());   

  30.         ResultWorkBook rworkbook = null;    

  31.         try {    

  32.             // 未执行模板工作薄    

  33.             WorkBook workbook = (WorkBook) TemplateWorkBookIO    

  34.                     .readTemplateWorkBook(FRContext.getCurrentEnv(),    

  35.                             "\\doc\\Primary\\Parameter\\Parameter.cpt");    

  36.             // 获取报表参数并设置值,导出内置数据集时数据集会根据参数值查询出结果从而转为内置数据集    

  37.             Parameter[] parameters = workbook.getParameters();    

  38.             parameters[0].setValue("华东");    

  39.             // 定义parametermap用于执行报表,将执行后的结果工作薄保存为rworkBook    

  40.             java.util.Map parameterMap = new java.util.HashMap();    

  41.             for (int i = 0; i < parameters.length; i++) {    

  42.                 parameterMap.put(parameters[i].getName(), parameters[i]    

  43.                         .getValue());    

  44.             }    

  45.             // 定义输出流    

  46.             FileOutputStream outputStream;    

  47.             // 将未执行模板工作薄导出为内置数据集模板    

  48.             outputStream = new FileOutputStream(new File("D:\\EmbExport.cpt"));    

  49.             EmbeddedTableDataExporter templateExporter = new EmbeddedTableDataExporter();    

  50.             templateExporter.export(outputStream, workbook);    

  51.             // 将模板工作薄导出模板文件,在导出前您可以编辑导入的模板工作薄,可参考报表调用章节    

  52.             outputStream = new FileOutputStream(new File("D:\\TmpExport.cpt"));    

  53.             ((WorkBook) workbook).export(outputStream);  

  54.             // 将结果工作薄导出为2003Excel文件    

  55.             outputStream = new FileOutputStream(new File("D:\\ExcelExport.xls"));    

  56.             ExcelExporter ExcelExport = new ExcelExporter();    

  57.             ExcelExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));     

  58.             // 将结果工作薄导出为Word文件    

  59.             outputStream = new FileOutputStream(new File("D:\\WordExport.doc"));    

  60.             WordExporter WordExport = new WordExporter();    

  61.             WordExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));    

  62.             // 将结果工作薄导出为Pdf文件    

  63.             outputStream = new FileOutputStream(new File("D:\\PdfExport.pdf"));    

  64.             PDFExporter PdfExport = new PDFExporter();    

  65.             PdfExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));    

  66.             // 将结果工作薄导出为Txt文件(txt文件本身不支持表格、图表等,被导出模板一般为明细表)    

  67.             outputStream = new FileOutputStream(new File("D:\\TxtExport.txt"));    

  68.             TextExporter TxtExport = new TextExporter();    

  69.             TxtExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));    

  70.             // 将结果工作薄导出为Csv文件    

  71.             outputStream = new FileOutputStream(new File("D:\\CsvExport.csv"));    

  72.             CSVExporter CsvExport = new CSVExporter();    

  73.             CsvExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));              

  74.             //将结果工作薄导出为SVG文件    

  75.             outputStream = new FileOutputStream(new File("D:\\SvgExport.svg"));    

  76.             SVGExporter SvgExport = new SVGExporter();    

  77.             SvgExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));             

  78.             //将结果工作薄导出为image文件    

  79.             outputStream = new FileOutputStream(new File("D:\\PngExport.png"));    

  80.             ImageExporter ImageExport = new ImageExporter();    

  81.             ImageExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));                        

  82.             outputStream.close();    

  83.             ModuleContext.stopModules();  

  84.         } catch (Exception e) {    

  85.             e.printStackTrace();    

  86.         }    

  87.     }    

  88. }  

编译运行该代码后,就会在E盘下生成不同格式的文件,这样就导出成功了。


本文转自 雄霸天下啦 51CTO博客,原文链接:http://blog.51cto.com/10549520/1786632,如需转载请自行联系原作者

相关文章
|
14天前
|
缓存 监控 API
构建高效可扩展的RESTful API:后端开发的实践指南
【4月更文挑战第26天】在现代Web开发中,构建一个高效、可扩展且易于维护的RESTful API是后端工程师必须面对的挑战。本文将深入探讨如何利用最佳实践和流行技术,设计出符合REST架构原则的服务端接口。我们将重点讨论API版本控制、资源路由、数据库优化、缓存策略以及安全性考虑等方面,旨在为开发者提供一套综合性解决方案,帮助其提升API的性能与可靠性。
|
2月前
|
JSON 缓存 前端开发
API接口,实现统一格式
API接口,实现统一格式
20 1
|
1月前
|
存储 编解码 网络协议
FFmepg 核心开发库及重要数据结构与API
FFmepg 核心开发库及重要数据结构与API
29 0
|
10天前
|
JSON API 数据处理
【Swift开发专栏】Swift中的RESTful API集成实战
【4月更文挑战第30天】本文探讨了在Swift中集成RESTful API的方法,涉及RESTful API的基础概念,如HTTP方法和设计原则,以及Swift的网络请求技术,如`URLSession`、`Alamofire`和`SwiftyJSON`。此外,还强调了数据处理、错误管理和异步操作的重要性。通过合理利用这些工具和策略,开发者能实现高效、稳定的API集成,提升应用性能和用户体验。
|
10天前
|
缓存 前端开发 搜索推荐
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
【4月更文挑战第30天】Flutter允许开发者通过`CustomPaint`和`CustomPainter`进行自定义绘制,以实现丰富视觉效果。`CustomPaint` widget将`CustomPainter`应用到画布,而`CustomPainter`需实现`paint`和`shouldRepaint`方法。`paint`用于绘制图形,如示例中创建的`MyCirclePainter`绘制蓝色圆圈。Canvas API提供绘制形状、路径、文本和图片等功能。注意性能优化,避免不必要的重绘和利用缓存提升效率。自定义绘制让Flutter UI更具灵活性和个性化,但也需要图形学知识和性能意识。
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
|
10天前
|
存储 关系型数据库 Go
【Go语言专栏】基于Go语言的RESTful API开发
【4月更文挑战第30天】本文介绍了使用Go语言开发RESTful API的方法,涵盖了路由、请求处理、数据存储和测试关键点。RESTful API基于HTTP协议,无状态且使用标准方法表示操作。在Go中,通过第三方库如`gorilla/mux`进行路由映射,使用`net/http`处理请求,与数据库交互可选ORM库`gorm`,测试则依赖于Go内置的`testing`框架。Go的简洁性和并发性使得它成为构建高效API的理想选择。
|
10天前
|
机器学习/深度学习 算法 安全
深度学习在图像识别中的应用与挑战构建高效可扩展的RESTful API:后端开发的实战指南
【4月更文挑战第30天】 随着计算机视觉技术的飞速发展,深度学习在图像识别领域取得了显著的成果。本文将探讨深度学习技术在图像识别中的应用及其所面临的挑战。首先,我们将介绍深度学习的基本原理和关键技术,然后分析其在图像识别中的优势和应用案例。最后,我们将讨论当前深度学习在图像识别领域所面临的主要挑战和未来的发展趋势。
|
11天前
|
存储 缓存 运维
DataWorks操作报错合集之DataWorks根据api,调用查询文件列表接口报错如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
22 1
|
11天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
【4月更文挑战第29天】本文探讨了在Web开发中流行的前后端分离模式,重点介绍了RESTful API的设计与实现。REST是一种基于HTTP协议的架构风格,核心概念包括资源、表述和状态转换。RESTful API设计遵循无状态、统一接口等原则,使用GET、POST、PUT、DELETE等HTTP方法执行操作,并通过状态码和JSON/XML传输数据。在PHP中实现RESTful API,可通过定义路由、创建控制器、处理请求和响应,同时注意安全性措施,如使用HTTPS。文中还提供了一个用户管理API的实战示例,以帮助读者更好地理解和应用RESTful API。
|
12天前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用之阿里函数计算中。将本地电脑上的项目文件部署到阿里云函数计算(FC)上并实现对外提供API和WebUI如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
32 1