jasperreport 报表直接打印问题

fenglaile 2015-12-15 08:05:39
@RequestMapping("/reportFmt")
public void printFmt(String fmtKey, String valuemapStr,
HttpServletRequest request, HttpServletResponse response) {
if (StringUtils.isBlank(fmtKey))
return;
Map fmtMap = reportLoadService.loadFmtDetail(fmtKey);
if (fmtMap == null)
return;
String reportName = (String) fmtMap.get("R_CRYSTALNAME");
if (StringUtils.isBlank(reportName))
return;

ServletContext servletContext = request.getSession()
.getServletContext();
try {

String avatarFolder = servletContext.getRealPath("/report");
File file = new java.io.File(avatarFolder, reportName);
if (!file.exists())
return;
reportName = file.getPath();
Map valuemap = JsonTools.parseJSON2Map(valuemapStr);
JasperReport jasperReport = JasperCompileManager
.compileReport(reportName);

byte[] pdfStream = JasperRunManager.runReportToPdf(jasperReport,
valuemap, dataSource.getConnection());
// 输出流
PdfReader reader = new PdfReader(pdfStream);

ByteArrayOutputStream bos = new ByteArrayOutputStream(
pdfStream.length);
try {
// 给pdf加上脚本实现自动打印
StringBuffer script = new StringBuffer();
script.append("this.print({bUI:false,bSilent:true,bShrinkToFit:false});");

PdfStamper stamp = new PdfStamper(reader, bos);
stamp.setViewerPreferences(PdfWriter.HideMenubar
| PdfWriter.HideToolbar | PdfWriter.HideWindowUI);
stamp.addJavaScript(script.toString());

stamp.close();

} catch (DocumentException e) {
logger.error(e.getMessage(), e.getCause());
}


// 输出pdf

byte[] bytes = bos.toByteArray();
if (bytes != null && bytes.length > 0) {
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
ServletOutputStream ouputStream = response.getOutputStream();
try {
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
} finally {
if (ouputStream != null) {
try {
ouputStream.close();
} catch (IOException ex) {
}
}
}
}
} catch (JRException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}

}
生成的pdf 文件流怎么在jsp,html或extjs中怎么显示出来
...全文
388 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
_南天北落 2015-12-18
  • 打赏
  • 举报
回复
以前是用flexpaper生成的,没有用过jasperreport。是不是可以在外面套一个flexpaper然后用flexpaper的打印?
ShanghaiLinda 2015-12-18
  • 打赏
  • 举报
回复
后台函数定义 @RequestMapping("/reportFmt/{fmtKey}/{valuemapStr}") public void printFmt(@PathVariable String fmtKey,@PathVariable String valuemapStr, HttpServletRequest request, HttpServletResponse response) { Extjs代码如下 var reportname='ACTIVE'; var valuemapStr='{"id":"100384"}'; win.down('panel').update("<iframe src='" + sss + "' width='100%' height='100%'></iframe>");
fenglaile 2015-12-18
  • 打赏
  • 举报
回复
ShanghaiLinda 的方法可以用,谢谢,结贴
  • 打赏
  • 举报
回复
fenglaile 2015-12-17
  • 打赏
  • 举报
回复
因为不想下载,所以没有用jre方式
Defonds 2015-12-16
  • 打赏
  • 举报
回复
用 applet 试试。 不过这样的话客户端就得安装 jre 了

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧