jasperreport+Lodop 实现客户端打印

狼王_ 2017-09-12 02:42:03
我在Servlet 中通过 jasperreport 生成的 html 流,

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
JasperReport jasperReport = null;
JasperPrint jasperPrint = null;

//指定 *.jasper 文件的路径和名称
String jasperFileName = this.getServletContext().getRealPath("/")+ "reports/report_baishi.jasper";

try {
//指定 *.jasper 文件的路径和名称
jasperReport = (JasperReport) JRLoader.loadObjectFromFile(jasperFileName);

//载入报表模板文件
List<GoodsBean> listBean = new ArrayList<GoodsBean>(); // 这个list是最后塞入的数据,必须为List类型
listBean.add(new GoodsBean("刘涛1","13528883876","辽宁省大连市甘井子区大连甘井子区泉水A2区","辽宁-大连-甘井子","番茄直购","夏普Sharp 加湿空气净化器 搭载净离子群 KC-F70-W","50569310205581","50569310205581"));

// 把bean转成jasper的数据源用来下边塞给报表
JRDataSource dataSource = new JRBeanCollectionDataSource(listBean);

HashMap<String,Object> strParameter= new HashMap<String,Object>();

strParameter.put("imgPath", this.getServletContext().getRealPath("/")+ "reports/img/");
jasperPrint=JasperFillManager.fillReport(jasperReport, strParameter,dataSource);

//导出 html
response.setContentType("text/html;charset=GB2312");
//获得输出流 ,这里不能这样response.getOutputStream()
PrintWriter printWriter = response.getWriter();
//创建JRHtmlExporter对象
JRHtmlExporter htmlExporter = new JRHtmlExporter();
//把jasperPrint到Session里面(net.sf.jasperreports.j2ee.jasper_print)
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
//设值jasperPrint
htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);

//设置输出
htmlExporter.setParameter(JRExporterParameter.OUTPUT_WRITER,printWriter);

//设置图片生成的Servlet(生成图片就用这个ImageServlet,并且要在XML文件里面配置 image?image=这个是Servlet的url-pattern)
htmlExporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"http://localhost:8090/threePrint/servlet/image?image=");
//导出
htmlExporter.exportReport();
printWriter.close();

} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

在前台通过 lodop 打印:

<script src="js/LodopFuncs.js"></script>
<script language="javascript" type="text/javascript">
function doTest() {

$.ajax({
url : "servlet/printBaishiServlet",
data : {},
dataType : "text",
async : false,
success : function(data) {
LODOP = getLodop();
LODOP.ADD_PRINT_HTM(0, 0, 0, 0, data);
LODOP.PRINT();
//alert(data);
//$("#form1").formSerialize(data);
}
});
}
</script>

<input type="button" value="测试打印" onclick="doTest();">


我通过ajax 已经获取到了返回的html ,但是传给 lodop 后打印出来是一片空白什么都没有。。
...全文
461 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
狼王_ 2017-12-12
  • 打赏
  • 举报
回复
是 Lodop.exe的版本问题,换了一个Lodop.exe就可以了。
狼王_ 2017-09-12
  • 打赏
  • 举报
回复
引用 1 楼 JJYYyibanhua 的回复:
<object 控件已经加载后 ADD_PRINT_HTM(Top,Left,Width,Height,strHtmlContent) 宽和高 设置一下呢?
的确这块有问题,我现在设置了高和宽,但是现在html 中的图片不显示啊?图片是通过jasperreport的 Servlet生成的
Love_云宝儿 2017-09-12
  • 打赏
  • 举报
回复
不懂帮顶,,
kobe8free 2017-09-12
  • 打赏
  • 举报
回复
<object 控件已经加载后 ADD_PRINT_HTM(Top,Left,Width,Height,strHtmlContent) 宽和高 设置一下呢?

81,091

社区成员

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

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