使用FastReport报表工具生成图片格式文档
之前我在随笔《使用FastReport报表工具生成报表PDF文档》介绍过使用FastReport.Net来根据报表模板进行生成PDF,以及随笔《使用FastReport报表工具生成标签打印文档》介绍过生成标签文档的处理,基本上都是基于模板进行生成PDF的做法,由于PDF在手机端显示总是觉得不那么方便,不管使用pdfjs或者直接打开PDF,都不太令客户满意,客户希望直接展示图片的方式显示。本篇随笔介绍如何使用FastReport.Net来直接生成报表格式的图片文件。
1、报表模板及数据绑定处理
FastReport.Net是一款适用于Windows Forms, ASP.NET和MVC框架的功能齐全的报表分析解决方案。之前使用直接生成PDF的方式构建报表文档,如下效果所示。

在FastReport设计报表模式里面,我们可以对报表进行设置,以便于在实际运行环境的情况下生成上面的报表文档。在FastReport设计器里面的效果如下所示。

这个报表包含了主表信息,和明细表的信息,我们主表动态信息,可以通过参数的绑定方式绑定,明细表则通过绑定DataTable的方式动态处理即可。
采用参数绑定,我们需要在报表设计器里面定义好我们需要的参数,如下所示。

我们一般预先定义好相关的参数,然后绑定在模板里面,并设置好内容的对其格式即可。
如报表页面里面,我们放置了一个表格,定义好表格的行列和宽度后,双击表格单元格,就可以设置表格单元格的文本内容为对应的参数了,如下界面所示。

对于动态展示的明细列表部分,我们需要定义一个数据源的方式,从而可以让报表模板绑定对应的字段名称。

我根据数据表的信息,生成一个用于绑定明细列表的数据源,如下所示。

这样我们在代码绑定的时候,只需要指定Detail的名称和对应的字段名称即可,有了这些定义,我们可以在报表设计中使用字段绑定了。

对于运行时刻报表数据的绑定,主要使用对应的对象的注册数据和设置参数处理函数即可实现。
//刷新数据源
report.RegisterData(dt, "Detail");
foreach (string key in dict.Keys)
{
report.SetParameterValue(key, dict[key]);
} //运行报表
report.Prepare(); //导出PDF报表
PDFExport export = new PDFExport();
report.Export(export, realPath);
report.Dispose();
2、实现报表生成图片文档
图片生成的处理,和PDF格式的处理大同小异,主要就是先处理数据的绑定和准备,后续在根据对应的文件后缀名进行相应的图片生成,PDF生成使用PDFExport,图片生成采用的是ImageExport类处理。
如果是基于Web开发的,我们在控制器上处理对应的报表输出文件名称和路径,如下所示。
//导出PDF的文件路径
string exportPdfPath = string.Format("/GenerateFiles/Pres/Report_{0}.jpg", id);
//转换为物理路径
string realPath = Server.MapPath(exportPdfPath);
加载报表模板并初始化,这个不管PDF或者换图片格式,处理一样。
//以报表模板,初始化报表对象
Report report = new Report();
report.Load(reportPath);
BS下生成并输出图片文件如下所示
//刷新数据源
report.RegisterData(dt, "Detail");
foreach (string key in dict.Keys)
{
report.SetParameterValue(key, dict[key]);
} //运行报表
report.Prepare(); //导出PDF报表
//PDFExport export = new PDFExport(); //导出JPG报表
ImageExport export = new ImageExport();
//export.JpegQuality = 392;
//export.ResolutionY = 226; report.Export(export, realPath);
report.Dispose(); result = Content(exportPdfPath);//返回Web相对路径
我们看到,图片生成的操作和PDF的处理差不多。
最后生成图片的界面效果如下所示。

如果报表的页数超过一页,我们可以通过参数来生成不同的图片,如下所示。
new ImageExport() { PageRange = PageRange.Current, CurPage = count }
我们来看看另外一个处理代码,如下所示。
//多个图片导出
int count = ;
string firstFileName = exportImgPath.Replace(".png", "");
foreach (PageBase item in report.Pages)
{
string fileName = string.Format("{0}_{1}.png", firstFileName, count);
exportImgPath = fileName;
report.Export(new ImageExport() { PageRange = PageRange.Current, CurPage = count }, fileName);
count++;
}
和之前的不同,这个图片格式指定为PNG,另外可以支持多个页面的图片生成。
针对FastReport报表的特性,我在综合案例里面编写了一个专门用来处理FastREport的案例代码,如下所示。

使用FastReport报表工具生成图片格式文档的更多相关文章
- 使用FastReport报表工具生成报表PDF文档
在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...
- 使用FastReport报表工具生成标签打印文档
在我们实际开发报表的时候,我们需要按一定的业务规则组织好报表的模板设计,让报表尽可能的贴近实际的需求,在之前的随笔中<使用FastReport报表工具生成报表PDF文档>介绍了FastRe ...
- 使用FastReport报表工具实现信封套打功能
在较早期的报表套打的时候,我倾向于使用LODOP的ActiveX进行报表的打印或者套打,BS效果还是很不错的.之前利用它在Winform程序里面实现信封套打功能,详细参考<基于信封套打以及批量打 ...
- CEBX格式的文档如何转换为PDF格式文档、DOCX文档?
方正阿帕比CEBX格式的文档如何转换为PDF格式文档.DOCX文档? 简介: PDF.Doc.Docx格式的文档使用的非常普遍,金山WPS可以直接打开PDF和Doc.Docx文档,使用也很方便. CE ...
- 使用Apache POI导出Excel小结--导出XLS格式文档
使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI ...
- api接口测试工具和接口文档管理工具
api接口测试工具和接口文档管理工具 1.postman(https://www.getpostman.com) Postman 是一个很强大的 API调试.Http请求的工具.她可是允许用户发送任何 ...
- Ubuntu 14 如何打开 .chm格式文档?
好多手册是.chm格式,Ubuntu是需要安装第三方软件才能打开.chm格式文档,操作方式如下: 到“软件中心” -> 搜索“xchm”,并安装 -> 右键某个.chm文档,选择“属性” ...
- 利用POI工具读取word文档并将数据存储到sqlserver数据库中
今天实现了利用POI工具读取word文档,并将数据存储到sql数据库中,代码如下: package word; import java.io.File; import java.io.FileInpu ...
- 如何写Markdown格式文档
Markdown Markdown是一种轻量级标记语言,创始人为约翰·格鲁伯.它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档.这种语言吸收了很多在电子邮件中 ...
随机推荐
- spring cloud 2.x版本 Feign服务发现教程(内含集成Hystrix熔断机制)
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...
- phpstudy 升级mysql到mysql5.7
前言 今天在工作发现一个错误,在往本地导数据表的时候老是报错: ? 1 [Err] 1294 - Invalid ON UPDATE clause for '字段名' column 报错的数据表字段: ...
- 前端技术之:通过plop生成Controller的方法与步骤
# Controller的生成 开发者可以通过plop命令生成各种类型的控制器类(Normal.Restful.View), 以下是示例生成步骤. 1. 执行以下命令: plop controller ...
- 《Effective Java》 读书笔记(四) 使用私有构造方法执行非实例化
在许多时候,我们会写一个类,这个类只是用来提供一些静态方法或静态属性,就好像C++的函数一样,比如 java.lang.Math,java.util.Arrays等,但是有时候这些类的用户可能会在无意 ...
- 【XSY2525】Maze 2017多校
Description 考虑一个 N×M 的网格,每个网格要么是空的,要么是障碍物.整个网格四周都是墙壁(即第1行和第n行,第1列和第m列都是墙壁),墙壁有且仅有两处开口,分别代表起点和终点.起点总是 ...
- Vue+element UI实现“回到顶部”按钮组件
介绍 这是一个可以快速回到页面顶部的组件,当用户浏览到页面底部的时候,通过点击按钮,可快速回到页面顶部. 使用方法 由于该组件是基于element-UI进行二次封装的,所以在使用该组件时请务必安装el ...
- 针对CCTV摄像头的扫描爆破工具 :Cameradar
针对CCTV摄像头的扫描爆破工具 :Cameradar 0x01功能介绍 简述:Cameradar 是一款基于docker使用的RTSP数据流访问工具.该工具可以通过基于RT ...
- VM小技巧——虚拟机解决vm窗口太小的办法
——" 慢下来总结才能增大效率" 很多人在装虚拟机的时候,遇到了窗口过小不能自适应的问题.我也是查了好多资料,都说安装Vmware Tools即可解决,还有说修改分辨率也可以.两种 ...
- Scrapy进阶知识点总结(四)——Item Pipeline
Item Pipeline Item Pipeline调用发生在Spider产生Item之后.当Spider解析完Response之后,Item就会传递到Item Pipeline,被定义的Item ...
- python中文件的基础操作
打开文件的三种方式: open(r'E:\学习日记\python\code\文件的简单操作.py') open('E:\\学习日记\\python\\code\\文件的简单操作.py') open(' ...