jarsperreport6.3输出带条码的html。
来源:互联网 发布:openstack 源码 编辑:程序博客网 时间:2024/05/19 18:12
由于jarsperreport生成的pdf格式的报表用针式打印机打印出来非常模糊,所以就换成html格式打印,原由的xml模板不改变的情况下实现输出条形码。
jarspertreport输出html的时候会调用barbecue的api生成图片,HtmlResourceHandler.handleResource 用来保存barbecue生成的图片
HtmlResourceHandler.getResourcePath用来返回前段访问时的图片URL地址
public class ReportUtils {
private static final Logger logger = LoggerFactory.getLogger(ReportUtils.class.getName());
//打印请求
private HttpServletRequest request;
//打印响应
private HttpServletResponse response;
//打印模板的数据来源-JSON
private JSONObjectprintData;
//打印模板的数据来源-JavaBean
private List printBean;
//打印模板的文件名
private String jasperFileName;
public ReportUtils(HttpServletRequest request,
HttpServletResponse response,
List printBean,
String jasperFileName){
this.request=request;
this.response=response;
this.printBean=printBean;
this.jasperFileName=jasperFileName;
}
public ReportUtils(
HttpServletRequest request,
HttpServletResponse response,
JSONObject printData,
String jasperFileName){
this.request=request;
this.response=response;
this.printData=printData;
this.jasperFileName=jasperFileName;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletResponse getResponse() {
return response;
}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
public JSONObject getPrintData() {
return printData;
}
public void setPrintData(JSONObject printData) {
this.printData = printData;
}
public String getJasperFileName() {
return jasperFileName;
}
public void setJasperFileName(String jasperFileName) {
this.jasperFileName = jasperFileName;
}
public void printHtml() throws Exception {
ServletContext context = request.getSession().getServletContext();
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
try
{
final String webAppRealPath=context.getRealPath("/files")+"/";
String subReportPath=context.getRealPath("/WEB-INF/classes/print")+"/";
//String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/public-access/barcode/getImageByBillNo?";
final String imageReqPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/files/";
File reportFile = new File(context.getRealPath("/WEB-INF/classes/print/"+jasperFileName+".jasper"));
logger.debug("reportFile path......"+reportFile.getAbsolutePath());
if (!reportFile.exists())
throw new Exception("未找到文件名为:"+jasperFileName+"的打印模板");
JasperReport jasperReport = (JasperReport)JRLoader.loadObjectFromFile(reportFile.getPath());
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("SUBREPORT_DIR", subReportPath);
//parameters.put("BARCODE_GEN_URL",basePath);//图片保存目录
List<JasperPrint> jasperPrintList = new ArrayList<JasperPrint>();
for(Object bean:printBean){
JRDataSource jrDataSource = new JREmptyDataSource();
if(bean!=null){
List<Object> dataSource=new ArrayList<Object>();
dataSource.add(bean);
jrDataSource = new JRBeanCollectionDataSource(dataSource);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, jrDataSource);
jasperPrintList.add(jasperPrint);
}
}
HtmlExporter exporter = new HtmlExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList));
SimpleHtmlExporterOutput output=new SimpleHtmlExporterOutput(out);
output.setImageHandler(new HtmlResourceHandler() {
@Override
public void handleResource(String id, byte[] data) {
//保存在服务器的位置
try {
logger.debug("xxh the gen barcode image"+imageReqPath+id);
FileOutputStream fos=new FileOutputStream(new File(webAppRealPath,id));
fos.write(data);
} catch (Exception e) {
logger.error("error_gen_image_jarsper",e);
}
}
@Override
public String getResourcePath(String id) {
//前端请求时返回的URL
logger.debug("xxh the gen barcode image"+imageReqPath+id);
return imageReqPath+id;
}
});
exporter.setExporterOutput(output);
exporter.exportReport();
logger.debug("report html generate over....");
}catch(Exception e){
logger.error("print report html error:",e);
throw e;
}
}
};
注意:window.print() 一定要延时处理,setTimeout(function (){ window.print() }) ;
由于打印的页面含有条码图片,生成预览的页面的时候,预览效果已经出来了,但是请求的图片还没返回时,就会导致生成的Html页面存在条码图片,
但是预览时就看不见图片了。
阅读全文
0 0
- jarsperreport6.3输出带条码的html。
- jarsperreport6.3解决pdf在linux无法打印汉字的问题。
- 条码打印机---关于碳带的选择
- 如何设计出带括号的条码
- 使用Struts2标签输出带HTML标签的文本内容
- 使用struts2标签输出带html标签的文本内容
- 输出用JS 输出的HTML显示的带链接的邮件地址,点击后可直接打开邮件程序
- 用jstl输出带尖括号的内容时如何避免被html误解析
- 输出HTML的Servlet
- 带缓冲区的输出流
- 句柄、带颜色的输出
- html静态页面循环输出后台结果,带if判断
- 截取带HTML的内容
- 从用户的文档中创建条形码并自动的打印输出的条码控件 TBarCode
- 什么是条码?使用条码的益处是什么?
- VB.net输出数据至Zebra打印机打印条码的程序
- ZXing生成条码二维码并输出到web页面的示例
- iOS7+系统自带条码扫描
- ZOJ 3827 Information Entropy【水题、简单相加】
- 【I2C设备驱动】必须将id_table[]数组的最后一个元素设置为空的原因
- JavaScript改变div的背景颜色
- 【数据结构】顺序栈(顺序表动态实现)
- shellScript之一个脚本中多个函数
- jarsperreport6.3输出带条码的html。
- 修改hosts上外网的方法
- 链式前向星初探
- 终端与作业控制
- 时间转化及应用
- php常用的排序算法
- 深入理解Spark 2.1 Core (七):Standalone模式任务执行的原理与源码分析
- android 不同主题下不同状态的button 动态改变文字和图片
- 常见的TCP定时器