jasper打印实例2 ----通过文件字节流获得PDF格式图片
public class IspReportUtil {
public static String exportReportToByte(CommonReportHandler handler)
throws AppException {
JRDataSource dataSource = null;
if (handler.getDataList() != null && handler.getDataList().size()>0) {
dataSource = new JRBeanCollectionDataSource(handler.getDataList());// 获取数据集
} else {
dataSource = new JREmptyDataSource();
}
try {
InputStream inputStream = new FileInputStream(handler.getReportFile());
byte[] data = JasperRunManager.runReportToPdf(inputStream, handler.getParamMap(), dataSource);
return new BASE64Encoder().encode(data);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
接口:
list 打印的数据源 datalist
map 打印的参数MAP
path jasper文件的路径
CommonReportHandler reportHandler = new CommonReportHandler(list, map, path);
String file = IspReportUtil.exportReportToByte(reportHandler);
FileVO fileVO = new FileVO();
fileVO.setFile(file);
fileVO.setFileName("还款明细打印");
fileVO.setUpperCase("pdf");
responseVO.setResult(fileVO);
responseVO.setSuccess(String.valueOf(i9005vo.isSuccess()));
responseVO.setMessage(i9005vo.getMessage());
return responseVO;
通过接口获得的返回值:
{
"msg": [],
"result": {
"file": "JVBERi0xLjQKJeLjz9MKNCAwIG9iaiA8PC9MZW5ndGggNjU2L0ZpbHRlci9GbGF0ZURlY29kZT4+\r\nc3RyZWFtCnicrVbPaxNBGF0FFfbsqZfMSaPgOr9n10MFRYUi26aJFEmqkLaJmMRDjcRQKPYooaVe\r\nPAo9i+A5N/EPEPEv8FAQL4IecpL6fbtrjWJ2s7th2JlZZmfe+94382Y5WbCvVWxGKBSsXclJpWNf\r\nvskIg17DLl6oPLRvjH9CyVpnfBLTLjEed7QIZ3LCXJxJg/HNpl1cXKxfLbX731589C/6w13Tmt/+\r\n9OjU/lzvsHwHl6ek+R+I6iq06zYHiv+MzP7DsXCUINp4DnWPo5F/R7NUaM37wyy8x1C4qxyVALT3\r\n2v85eFcePT2REwxCUp4bg7RSK949X+pWn9dqb1Zo+UqYrK2D7mn/0v33T8RghIn7k0ZMYV5OnCgV\r\nxwkxmoWXSzlxmHETgJqFo1pj52tOHKFMUkC9nR8zSCQzMRiP3w4Ot86idKvf/b28e9R4CXClB/tf\r\n8CjTk3mzRD0ipXCMmQS12W+to2PkhuKeJsLIGKjtDxbBsvwqbP3h0Vze+ABDG+14E6V89tlvtN3J\r\nMBTsogdjC9Gc5Vu/kaO1ScfmWgS9tl2ectPqJA+ymCUsHjwK+p5loMZC4ZFQhGWykA6RkbSSNB1p\r\nNGgRxxm3/+658mgWOYsFAhGUpUEIDoUGRQZ1KI1n0cz5FMfSiBTSSCkTnH7ttn+mdH2jm4WYpLi6\r\niohhb2piTGhHJPgjaGgsnVUxpZBY6PYpiCnmJdBq1XNbjqQa/44Sw6d4yu51oXWbtTq8sI3DTIfL\r\ndSM9wvBS6MGlcthUVIHsDKhyriOqQqVMHTM0UDX2hoqoaqAKroVUwbqyUWUKr0OJPgt2hb00PotU\r\n8adv8rUTUGWWG6hqQlV1HNXprzs4fZNxqwf1/tRX3C+tO4RgCmVuZHN0cmVhbQplbmRvYmoKMSAw\r\nIG9iajw8L1BhcmVudCA1IDAgUi9Db250ZW50cyA0IDAgUi9UeXBlL1BhZ2UvUmVzb3VyY2VzPDwv\r\nUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0vRm9udDw8L0YxIDIg\r\nMCBSL0YyIDMgMCBSPj4+Pi9NZWRpYUJveFswIDAgNTk1IDg0Ml0+PgplbmRvYmoKNiAwIG9ialsx\r\nIDAgUi9YWVogMCA4NTQgMF0KZW5kb2JqCjIgMCBvYmo8PC9CYXNlRm9udC9IZWx2ZXRpY2EvVHlw\r\nZS9Gb250L0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9TdWJ0eXBlL1R5cGUxPj4KZW5kb2JqCjcg\r\nMCBvYmo8PC9Gb250QkJveCBbLTI1IC0yNTQgMTAwMCA4ODBdL0NhcEhlaWdodCA4ODAvU3R5bGU8\r\nPC9QYW5vc2UoAQUCAgQAAAAAAAAAKT4+L1R5cGUvRm9udERlc2NyaXB0b3IvU3RlbVYgOTMvRGVz\r\nY2VudCAtMTIwL0ZsYWdzIDYvRm9udE5hbWUvU1RTb25nLUxpZ2h0L0FzY2VudCA4ODAvSXRhbGlj\r\nQW5nbGUgMD4+CmVuZG9iago4IDAgb2JqPDwvQmFzZUZvbnQvU1RTb25nLUxpZ2h0L0NJRFN5c3Rl\r\nbUluZm88PC9PcmRlcmluZyhHQjEpL1JlZ2lzdHJ5KEFkb2JlKS9TdXBwbGVtZW50IDQ+Pi9XIFsx\r\nWzIwN10xNyAyNiA0NjJdL1R5cGUvRm9udC9TdWJ0eXBlL0NJREZvbnRUeXBlMC9Gb250RGVzY3Jp\r\ncHRvciA3IDAgUi9EVyAxMDAwPj4KZW5kb2JqCjMgMCBvYmo8PC9EZXNjZW5kYW50Rm9udHNbOCAw\r\nIFJdL0Jhc2VGb250L1NUU29uZy1MaWdodC1VbmlHQi1VQ1MyLUgvVHlwZS9Gb250L0VuY29kaW5n\r\nL1VuaUdCLVVDUzItSC9TdWJ0eXBlL1R5cGUwPj4KZW5kb2JqCjUgMCBvYmo8PC9UeXBlL1BhZ2Vz\r\nL0NvdW50IDEvS2lkc1sxIDAgUl0+PgplbmRvYmoKOSAwIG9iajw8L05hbWVzWyhKUl9QQUdFX0FO\r\nQ0hPUl8wXzEpIDYgMCBSXT4+CmVuZG9iagoxMCAwIG9iajw8L0Rlc3RzIDkgMCBSPj4KZW5kb2Jq\r\nCjExIDAgb2JqPDwvTmFtZXMgMTAgMCBSL1R5cGUvQ2F0YWxvZy9QYWdlcyA1IDAgUj4+CmVuZG9i\r\nagoxMiAwIG9iajw8L0NyZWF0b3IoSmFzcGVyUmVwb3J0cyBcKHBheU9mZkRhdGFcKSkvUHJvZHVj\r\nZXIoaVRleHQxLjMuMSBieSBsb3dhZ2llLmNvbSBcKGJhc2VkIG9uIGl0ZXh0LXBhdWxvLTE1NFwp\r\nKS9Nb2REYXRlKEQ6MjAxODA3MjYxMDQ0NTcrMDgnMDAnKS9DcmVhdGlvbkRhdGUoRDoyMDE4MDcy\r\nNjEwNDQ1NyswOCcwMCcpPj4KZW5kb2JqCnhyZWYKMCAxMwowMDAwMDAwMDAwIDY1NTM1IGYgCjAw\r\nMDAwMDA3MzggMDAwMDAgbiAKMDAwMDAwMDkzNyAwMDAwMCBuIAowMDAwMDAxMzk2IDAwMDAwIG4g\r\nCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMTUxOSAwMDAwMCBuIAowMDAwMDAwOTAzIDAwMDAw\r\nIG4gCjAwMDAwMDEwMjQgMDAwMDAgbiAKMDAwMDAwMTIxNCAwMDAwMCBuIAowMDAwMDAxNTY5IDAw\r\nMDAwIG4gCjAwMDAwMDE2MjIgMDAwMDAgbiAKMDAwMDAwMTY1NCAwMDAwMCBuIAowMDAwMDAxNzEy\r\nIDAwMDAwIG4gCnRyYWlsZXIKPDwvUm9vdCAxMSAwIFIvSUQgWzxlMzM3ZTY1OTM0ZGJmNGM2ODRh\r\nZDI3OTk5NWExODNmMD48ZTMzN2U2NTkzNGRiZjRjNjg0YWQyNzk5OTVhMTgzZjA+XS9JbmZvIDEy\r\nIDAgUi9TaXplIDEzPj4Kc3RhcnR4cmVmCjE5MDYKJSVFT0YK",
"fileName": "贷款一次性结清证明打印",
"upperCase": "pdf"
},
"success": "true",
"time": 250980
}
现在拿到文件的字节流了
新建一个HTML文件
<html>
<head></head>
<body>
//这里的file即上面接受的file的值
//这里要注意三点:
1.使用时需要添加“data:application/pdf;base64” 表明file文件格式
2.使用字符串替换,去除'\r\n'(换行符),这个会影响到前端对base64的解析(IE下影响最大);
3.使用字符串替换,在base64中有码值‘+',需要替换成‘%2B’(在JAVA8中会自动处理为'_')
<iframe src="data:application/pdf;base64,file">
</iframe>
<img src ="data:application/pdf;base64,JVBERi0xLjQKJeLjz9MKNCAwIG9iaiA8PC9MZW5ndGggNjU2L0ZpbHRlci9GbGF0ZURlY29kZT4+c3RyZWFtCnicrVbPaxNBGF0FFfbsqZfMSaPgOr9n10MFRYUi26aJFEmqkLaJmMRDjcRQKPYooaVePAo9i+A5N/EPEPEv8FAQL4IecpL6fbtrjWJ2s7th2JlZZmfe+94382Y5WbCvVWxGKBSsXclJpWNfvskIg17DLl6oPLRvjH9CyVpnfBLTLjEed7QIZ3LCXJxJg/HNpl1cXKxfLbX731589C/6w13Tmt/+9OjU/lzvsHwHl6ek+R+I6iq06zYHiv+MzP7DsXCUINp4DnWPo5F/R7NUaM37wyy8x1C4qxyVALT32v85eFcePT2REwxCUp4bg7RSK949X+pWn9dqb1Zo+UqYrK2D7mn/0v33T8RghIn7k0ZMYV5OnCgVxwkxmoWXSzlxmHETgJqFo1pj52tOHKFMUkC9nR8zSCQzMRiP3w4Ot86idKvf/b28e9R4CXClB/tf8CjTk3mzRD0ipXCMmQS12W+to2PkhuKeJsLIGKjtDxbBsvwqbP3h0Vze+ABDG+14E6V89tlvtN3JMBTsogdjC9Gc5Vu/kaO1ScfmWgS9tl2ectPqJA+ymCUsHjwK+p5loMZC4ZFQhGWykA6RkbSSNB1pNGgRxxm3/+658mgWOYsFAhGUpUEIDoUGRQZ1KI1n0cz5FMfSiBTSSCkTnH7ttn+mdH2jm4WYpLi6iohhb2piTGhHJPgjaGgsnVUxpZBY6PYpiCnmJdBq1XNbjqQa/44Sw6d4yu51oXWbtTq8sI3DTIfLdSM9wvBS6MGlcthUVIHsDKhyriOqQqVMHTM0UDX2hoqoaqAKroVUwbqyUWUKr0OJPgt2hb00PotU8adv8rUTUGWWG6hqQlV1HNXprzs4fZNxqwf1/tRX3C+tO4RgCmVuZHN0cmVhbQplbmRvYmoKMSAwIG9iajw8L1BhcmVudCA1IDAgUi9Db250ZW50cyA0IDAgUi9UeXBlL1BhZ2UvUmVzb3VyY2VzPDwvUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0vRm9udDw8L0YxIDIgMCBSL0YyIDMgMCBSPj4+Pi9NZWRpYUJveFswIDAgNTk1IDg0Ml0+PgplbmRvYmoKNiAwIG9ialsxIDAgUi9YWVogMCA4NTQgMF0KZW5kb2JqCjIgMCBvYmo8PC9CYXNlRm9udC9IZWx2ZXRpY2EvVHlwZS9Gb250L0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9TdWJ0eXBlL1R5cGUxPj4KZW5kb2JqCjcgMCBvYmo8PC9Gb250QkJveCBbLTI1IC0yNTQgMTAwMCA4ODBdL0NhcEhlaWdodCA4ODAvU3R5bGU8PC9QYW5vc2UoAQUCAgQAAAAAAAAAKT4+L1R5cGUvRm9udERlc2NyaXB0b3IvU3RlbVYgOTMvRGVzY2VudCAtMTIwL0ZsYWdzIDYvRm9udE5hbWUvU1RTb25nLUxpZ2h0L0FzY2VudCA4ODAvSXRhbGljQW5nbGUgMD4+CmVuZG9iago4IDAgb2JqPDwvQmFzZUZvbnQvU1RTb25nLUxpZ2h0L0NJRFN5c3RlbUluZm88PC9PcmRlcmluZyhHQjEpL1JlZ2lzdHJ5KEFkb2JlKS9TdXBwbGVtZW50IDQ+Pi9XIFsxWzIwN10xNyAyNiA0NjJdL1R5cGUvRm9udC9TdWJ0eXBlL0NJREZvbnRUeXBlMC9Gb250RGVzY3JpcHRvciA3IDAgUi9EVyAxMDAwPj4KZW5kb2JqCjMgMCBvYmo8PC9EZXNjZW5kYW50Rm9udHNbOCAwIFJdL0Jhc2VGb250L1NUU29uZy1MaWdodC1VbmlHQi1VQ1MyLUgvVHlwZS9Gb250L0VuY29kaW5nL1VuaUdCLVVDUzItSC9TdWJ0eXBlL1R5cGUwPj4KZW5kb2JqCjUgMCBvYmo8PC9UeXBlL1BhZ2VzL0NvdW50IDEvS2lkc1sxIDAgUl0+PgplbmRvYmoKOSAwIG9iajw8L05hbWVzWyhKUl9QQUdFX0FOQ0hPUl8wXzEpIDYgMCBSXT4+CmVuZG9iagoxMCAwIG9iajw8L0Rlc3RzIDkgMCBSPj4KZW5kb2JqCjExIDAgb2JqPDwvTmFtZXMgMTAgMCBSL1R5cGUvQ2F0YWxvZy9QYWdlcyA1IDAgUj4+CmVuZG9iagoxMiAwIG9iajw8L0NyZWF0b3IoSmFzcGVyUmVwb3J0cyBcKHBheU9mZkRhdGFcKSkvUHJvZHVjZXIoaVRleHQxLjMuMSBieSBsb3dhZ2llLmNvbSBcKGJhc2VkIG9uIGl0ZXh0LXBhdWxvLTE1NFwpKS9Nb2REYXRlKEQ6MjAxODA3MjYxMDQ0NTcrMDgnMDAnKS9DcmVhdGlvbkRhdGUoRDoyMDE4MDcyNjEwNDQ1NyswOCcwMCcpPj4KZW5kb2JqCnhyZWYKMCAxMwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDA3MzggMDAwMDAgbiAKMDAwMDAwMDkzNyAwMDAwMCBuIAowMDAwMDAxMzk2IDAwMDAwIG4gCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMTUxOSAwMDAwMCBuIAowMDAwMDAwOTAzIDAwMDAwIG4gCjAwMDAwMDEwMjQgMDAwMDAgbiAKMDAwMDAwMTIxNCAwMDAwMCBuIAowMDAwMDAxNTY5IDAwMDAwIG4gCjAwMDAwMDE2MjIgMDAwMDAgbiAKMDAwMDAwMTY1NCAwMDAwMCBuIAowMDAwMDAxNzEyIDAwMDAwIG4gCnRyYWlsZXIKPDwvUm9vdCAxMSAwIFIvSUQgWzxlMzM3ZTY1OTM0ZGJmNGM2ODRhZDI3OTk5NWExODNmMD48ZTMzN2U2NTkzNGRiZjRjNjg0YWQyNzk5OTVhMTgzZjA+XS9JbmZvIDEyIDAgUi9TaXplIDEzPj4Kc3RhcnR4cmVmCjE5MDYKJSVFT0YK">
</body>
</html>
HTML显示如下:
右键图片img在新标签页打开
注意前台拿到base64格式字节流后需要做以下处理
1.前端拿到了服务端的base64流字符串,要怎么处理呢,如果直接使用的话,那怕是要反水水,因为,ta真的只是字符串~,这时候我们需要对字符串处理一下,给ta加上数据类型:"data:application/pdf;base64,",指明ta是什么类型的数据。
2.
流程:
在工作中遇到了在线预览PDF的需求,因为服务端的特殊原因,我选择了将pdf文件转为了base64流传给前端,前端拿到base64流在线展示pdf。
base64是一种编码格式。该要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。由于几乎任何文件流都可以转成base64流(就是字符串啦),十分方便在网络传输,所以很受欢迎。
以JAVA代码为例,创建读入文件流,转成byte数组,然后对自己数组进行base64编码。(推荐使用JAVA8自带的BASE64处理,特好用)
这里注意一下,转化之后的base64文件大小通常要比原文件要大,会涉及到一些性能问题,这里不做更多阐述。
特别注意:
出于网络传输,以及对前端友好的目的。需要对得到的base64字符串要进行处理。
1.使用字符串替换,去除'\r\n'(换行符),这个会影响到前端对base64的解析(IE下影响最大);
2.使用字符串替换,在base64中有码值‘+',需要替换成‘%2B’(在JAVA8中会自动处理为'_')
前端拿到了服务端的base64流字符串,要怎么处理呢,如果直接使用的话,那怕是要反水水,因为,ta真的只是字符串~,这时候我们需要对字符串处理一下,给ta加上数据类型:"data:application/pdf;base64,",指明ta是什么类型的数据。
给数据添加类型后,接下来使用就简单了,直接将拼接的字符串复制给html标签的src属性即可。(这里提供embed标签和iframe标签,我在关联经验里有写到)
jasper打印实例2 ----通过文件字节流获得PDF格式图片的更多相关文章
- ofd格式文件转换成pdf格式的方法
ofd格式文件很多人还比较陌生,很多人接收到文件都不知如何打开阅读,把文件发给对方,还需要对方安装个专门的阅读软件,我们还有另一个办法,就是将OFD文件转换为PDF格式文件,然后把PDF格式文件发给对 ...
- dvi文件和将dvi文件转换成pdf格式
dvi文件和将dvi文件转换成pdf格式 Latex只能把tex文件编译成dvi文件, 在cmd 中: 使用xdvi查看dvi格式的文件 若用texstudio编辑tex文件,则可直接将已编译成功的. ...
- pdf.js 使用实例(app直接预览pdf格式的文档)
pdf.js可以实现在html下直接浏览pdf文档,是一款开源的pdf文档读取解析插件 pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,,一个负责API解析,一个负责 ...
- 如何将位图格式图片文件(.bmp)生成geotiff格式图片?
一.位图格式信息 位图BITMAPINFOHEADER 与BITMAPFILEHEADER: 先来看BITMAPINFOHEADER,只写几个主要的 biSize包含的是这个结构体的大小(包括颜色表) ...
- HTTP使用 multipart/form-data 上传多个字段(包括文件字节流 octet-stream)
自己用到的一个向服务器上传多个字段的实例,代码不全,仅做参考. 用的是WinINet,上传的字段中包括文件字节流 /* PHttpRequest中自行组装body之后,HttpSendRequest中 ...
- Java学习-013-文本文件读取实例源代码(两种数据返回格式)
此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代 ...
- Jquery调用从ashx文件返回的jsonp格式的数据处理实例
开发环境:vs2010+jquery-1.4.min.js 解决问题:网上代码比较少,好多调试不通,返回数据不用json而用jsonp主要考虑解决跨域问题 开发步骤:打开VS2010,新建一web站点 ...
- 内核编程实例,多文件的Makefile
内核编程实例,多文件的Makefile 经典的hello word测试 ////# cat hello.c #include <linux/module.h> #include <l ...
- JASPER打印单据,标签开发培训, 界面开发培训
JASPER打印单据,标签开发培训软件:TIBC JASPER Studio.Jaspersoft Studio是一个专为JasperReports报表引擎而开发的报表设计器,是 iReport设计器 ...
随机推荐
- 04.给linux用户添加sudo权限
linux给用户添加sudo权限: 有时候,linux下面运行sudo命令,会提示类似: xxxis not in the sudoers file. This incident will be r ...
- office2016系列产品关闭时卡顿
关闭Print Spooler服务其方法如下: win+r键–>输入services.msc点击确定如下图 单击word中的文件-选项-加载项-COM加载项-转到,将所有加载项前面的勾都去掉(不 ...
- AIR程序调用本地默认应用程序打开本地文件
当我用下面语句的时候,可以成功打开桌面文件夹下面的文件: var file:File = File.desktopDirectory.resolvePath("test.jpg") ...
- js乱码问题解决
乱码有可能出现在下面两种情况 1.高级浏览器直接访问js路径 2.jsp引用js 针对上述两种情况的解决方式: 1.查看设置浏览器的字符集 2.查看web服务器的字符集,比如Tomcat 配置UTF- ...
- Redis入门高级部分
Redis: redis批量删除 redis数据备份和恢复 redis安全 redis性能测试 Redis 客户端连接 redis管道技术 redis分区 java操作redis redis批量删除 ...
- copyOnWriteArray 并发包下的不安全(数组)集合
copyOnWriteArray 记录一下 package java.util.concurrent;//你没有看错,是这个包 private transient volatile Object[] ...
- 解析swf文件头,获取flash的原始尺寸
要想解析swf文件头,首先要弄清楚的当然是swf文件格式规范.规范中对swf文件格式作了详细的说明.关于swf文件头,它是由以下几个部分组成:+-------+---+--------+------- ...
- 8张思维导图学习javascript
分别归类为: javascript变量 javascript运算符 javascript数组 javascript流程语句 javascript字符串函数 javascript函数基础 javascr ...
- idea git 从github上拉取项目 更改上传
更改上传: 新增文件上传时注意:
- Docker网络及命令
Docker常用命令 docker version #查看版本 docker search centos #搜索可用docker镜像 docker images 查看当前docker所有镜像 dock ...