JasperReport 导出PDF不能加载

23 篇文章 0 订阅
2 篇文章 1 订阅

JasperReport 导出PDF不能加载。

项目JasperReport模板导出PDF,最近在浏览器不能打开了。
提示【未能加载PDF文档】,但不是JasperReport导出的PDF却正常。

一、调查:

1、调查发现,通过代码生成的PDF版本为1.4
而能正常显示的PDF版本为1.7。

2、新问题:发现直接打开pdf文件能显示,但是使用项目中还是有问题。
项目中加载PDF是通过controller读取文件后,用ResponseEntity返回,
修改为reponse直接返回。

二、对策:

1、代码中生成PDF时,指定PDF版本,如下:

String outputFile = "c://jasper//test.pdf";
String templateFile = "c://jasper//template.jrxml"
Map<String, Object> params = new HashMap<Sring, Object>();
List<Object> dataList = new ArrayList<Object>();

// 加载模板
JasperDesign design = JRXmlLoader.load(templateFile);
JasperReport report = JasperCompileManager.compileReport(design);

// 填充数据
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataList);
JasperPrint print = JasperFillManager.fillReport(report, params, dataSource);

// 设置样式,支持中文
JRStyle style = new JRBaseStyle();
style.setPdfEmbedded(Boolean.TRUE);
style.setPdfFontName("STSong-Light");
style.setPdfEncoding("UniGB-UCS2-H");
print.setDefaultStyle(style);

// 构建PDF导出对象
JRPdfExporter exporter = new JRPdfExporter(); 
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
configuration.setPdfVersion(PdfVersionEnum.VERSION_1_7); // 指定pdf版本
exporter.setConfiguration(configuration);

// 指定输入对象
ExporterInput exporterInput = new SimpleExporterInput(print);
exporter.setExporterInput(exporterInput);

// 指定导出对象
OutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(outputFile);
exporter.setExporterOutput(exporterOutput);

// 导出PDF
exporter.exportReport();

2、修改返回pdf流的方式。

response.setContentType("application/pdf");

File file = new File("c://jasper//test.pdf");
FileInputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte[] b = new byte[512];
while ((in.read(b)) != -1) {
	out.write(b);
}
out.flush();
in.close();
out.close();

注意:一定不要加response.setHeader(“content-disposition”,“attachment;filename=”+filename);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值