解决Jasperreport的web打印另一种方法

Report Services 谷歌浏览器兼容性优化 <script src="js/Common/jquery2.2.min.js" type="text/javascript"></script> <script src="js/Common/jquery-ui.min.js"></script> <script src="js/Common/jquery.blockUI.min.js" type="text/javascript"></script> ... 阅读详情

昨天下了jasperreport的最新版本3.7.3看了下。弄了半天还是没能习惯他的报表制作方式。看了下他的打印是利用applet的来打印的。而且还需要客户端安装 十几MB的 jre 关于这个好坏,每个人都有自己的看法。今天我这里要说的是利用jatoolsprinter控件来打印jasperreport的报表。控件大小只有100k左右         关于jasperreport的报表制作这里不做说明,我是在环境中跑了下jasperreport的demo运行界面如下



运行JSP Example 如下图


下面我们对demo中的html.jsp进行修改 用jatoolsprinter来打印Jasperreport 的报表
蓝色部分为控件需要的内容
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%@ page errorPage="error.jsp" %>
<%@ page import="datasource.*" %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="net.sf.jasperreports.j2ee.servlets.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<html>
<head>

<!-- 插入打印控件 -->
<OBJECT ID="jatoolsPrinter" CLASSID="CLSID:B43D3361-D975-4BE2-87FE-057188254255"
codebase="jatoolsPrinter.cab#version=5,3,0,0"></OBJECT>
</head>
<script type="text/javascript">
function doPrint(how)
{
   
//打印文档对象
    var myDoc ={
        documents: document,    // 打印页面(div)们在本文档中
        copyrights :    '杰创软件拥有版权
[url=]www.jatools.com'[/url]              // 版权声明,必须

       };
         
    // 调用打印方法
    if(how == '打印预览...')
    jatoolsPrinter.printPreview(myDoc,true );   // 打印预览
                 
   else if(how == '打印...')
      jatoolsPrinter.print(myDoc ,true);   // 打印前弹出打印设置对话框
               
   else
      jatoolsPrinter.print(myDoc ,false);       // 不弹出对话框打印
}
</script>
<body>

<br>
<input type="button" value="打印预览...">
<input type="button" value="打印...">
<input type="button" value="打印">
<br>


<%
File reportFile = new File(application.getRealPath("/reports/WebappReport.jasper"));
    if (!reportFile.exists())
   throw new JRRuntimeException("File WebappReport.jasper not found. The report design must be compiled first.");
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
Map parameters = new HashMap();
parameters.put("ReportTitle", "Address Report");
parameters.put("BaseDir", reportFile.getParentFile());
   
JasperPrint jasperPrint =
   JasperFillManager.fillReport(
    jasperReport,
    parameters,
    new WebappDataSource()
    );
   
JRHtmlExporter exporter = new JRHtmlExporter();
session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image=");

exporter.exportReport();
%>
</body>
</html>


因为jatoolsprinter的打印是根据<div id='page'+数字>来区分打印的页的。而Jasperreport生成的html页面中又没有包含这些信息,所以我们就需要修改下Jasperreport的源码
由生成的报表页面的源码中我们可以看到Jasperreport是利用<a name="JR_PAGE_ANCHOR_?_?"></a>来区分页数的我们可以找到package net.sf.jasperreports.engine.export 下的JRHtmlExporter.java 找到代码中的exportReportToWriter方法里的如下片段
writer.write("<a name=/"" + JR_PAGE_ANCHOR_PREFIX + reportIndex + "_" + (pageIndex + 1) + "/"></a>/n");
在这段代码之后加上
writer.write("<div id='page"+ (pageIndex + 1)+"'>/n");
然后找到源码中的
exportPage(page);
在他之后加上div的结束标志
writer.write("</div>/n");
以上代码蓝色部分为后添加的内容



修改之后的代码如下
writer.write("<a name=/"" + JR_PAGE_ANCHOR_PREFIX + reportIndex + "_" + (pageIndex + 1) + "/"></a>/n");
     
     writer.write("<div id='page"+ (pageIndex + 1)+"'>/n");
     

      /*   */
      exportPage(page);
     
     
writer.write("</div>/n");
修改完这些之后我们就把jatoolsPrinter.cab放在项目中html.jsp
<OBJECT ID="jatoolsPrinter" CLASSID="CLSID:B43D3361-D975-4BE2-87FE-057188254255"
codebase="jatoolsPrinter.cab#version=5,3,0,0"></OBJECT>


codebase指定的位置这里指定的是和html.jsp同一路径


现在打开IE 运行 demo
第一次运行会提示安装jatoolsprinter控件 选择安装ActiveX控件


点击安装


点击打印预览效果如下




到此就可以在web页面中直接打印Jasperreport 报表了。

1-JasperReport基础使用方法 JasperReport是一款基于Java的报表生成工具,支持导出PDF/HTML/XML等多种格式。其工作流程分为设计、执行和输出三个阶段,通过Jaspersoft Studio可视化工具可以创建包含静态文本、动态字段等元素的模板,并编译为.jasper文件。Java项目中需引入相关依赖,处理中文字体需额外导入字体jar包。该工具适用于J2EE和Web应用,能够灵活生成各类动态报表。 阅读详情

相关推荐

Joern实战:从代码导入到Python分析的全流程避坑指南(附常见错误解决方案)

本文详细介绍了Joern静态分析工具从代码导入到Python分析的全流程实践指南,包括环境配置、代码导入技巧、数据库服务优化、Python交互分析及性能调优等关键步骤。特别针对常见错误提供了实用解决方案,帮助开发者高效进行代码安全分析和漏洞挖掘。

weixin_28309571的博客 141

关于Web报表FineReport打印的开发应用案例

报表打印是报表使用和开发过程中经常碰到的问题,这里汇总了关于Web报表开发打印功能的一些典型应用案例,以应用最广泛的FineReport为例。

小小博客爱分享 4996

从零开始:用Xilinx FPGA实现RISC-V单周期CPU(附完整Verilog代码)

本文详细介绍了如何使用Xilinx FPGA从零开始实现RISC-V单周期CPU,包括开发环境搭建、核心架构设计、Verilog代码实现及功能验证。通过实战指南和完整代码示例,帮助开发者掌握RISC-V CPU设计的关键技术,适用于嵌入式系统和定制化计算场景。

weixin_30664051的博客 547

使用JasperReport+iReport进行WEB开发

一、JasperReport和iReport简介:   1、JasperReport简介   JasperReport是一个强大、灵活的报表生成工具,是开放源代码组织sf.net中的一个java 报表打印工程。能够展示丰富的页面内容,并将之转换成PDF,HTML,XML,E

Channing 1万+

【四足机器人项目实战】四足机器人支撑腿反作用力规划之VMC解耦控制方法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、基于模型的工作空间控制框图二、原理三、缺点 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对未简化的动力学模型规划反作用力+运动学模型雅可比+虚功原理规划关节扭矩方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、基于模型的工作空间控制框图 . . 二、原理 基于机器人的动力学模

qq_35635374的博客 6598

损失函数大汇总(五十三)(Boundary Loss附公式推导与代码)

摘要 Boundary Loss是一种针对图像分割任务的新型损失函数,特别适用于高度类别不平衡的细粒度分割场景。与传统的区域型损失(如Dice、交叉熵)不同,它通过计算预测边界与真实边界之间的距离来优化模型,更关注边界精度而非区域重叠。核心思想是利用距离图(distance map)将边界约束转化为区域积分形式,实现端到端训练。具体实现中,损失函数为预测概率与距离图的点积,梯度仅取决于距离图,具有明确的空间引导性。相比区域型损失,Boundary Loss能更好处理小目标、细长结构等边界敏感任务,可与Dic

悦学共鸣,温柔以待,汇聚光芒,共同成长 240

整合Struts2+JasperReport Web报表应用示例

  整合Struts2+JasperReport Web报表应用示例 JasperReports作为一种优秀且开源的报表引擎,不利用太可惜了。同时,借助开源的JasperReports模板设计利器iReports,可以可视化的设计报表模板。基于Web的报表在很多项目中都是需要的。而随着Struts2的流行,就应该研究一下在Struts2下如何利用JasperReports进行报表输出。

鹏飞的专栏 2019

Python量化- Black-Litterman 模型

​​​​​​​Black-Litterman 模型由 Fischer Black 和 Robert Litterman 于 1992 年开发,采用贝叶斯方法进行资产配置。该模型通过结合先前的回报估计(可以从多个来源得出)并结合投资者对未来回报的独特预期来优化分配权重。

探索人工智能领域 1030

利用jasperReport制作web报表

1)给出自己制作的jasperReport的视图效果,方便对报表工具初期学习的选择。 2)自己制作报表的测试源码和所有相关学习资料,对应所有jar包,jasperReport版本。 3)快速开发报表的一些建议,为方便学习者快速开发,本文特封装了通用接口。 4)在linux下部署jasperReport出现内存溢出的问题解决方案。

leixingbang的专栏 7322

一步步带你用C#开发Modbus通信上位机(附完整代码与工程思路)

Modbus上位机开发指南(C#实现) 本文详细介绍使用C#开发Modbus上位机系统的全过程,覆盖RTU和TCP两种协议。内容包含:1)需求分析与技术选型(WinForms+NModbus4);2)分层架构设计(UI/业务/通信层);3)通信层核心代码实现(串口/以太网连接、数据读写);4)功能模块开发(设备管理、数据采集、远程控制)。提供可直接复用的Modbus RTU客户端代码示例,包含连接管理、线圈读写、寄存器操作等工业场景必备功能。通过系统化的开发流程,帮助开发者快速构建稳定可靠的Modbus监控

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 821

在 SAP S/4HANA 分析模型中添加 Measures,Calculated、Restricted、Currency Conversion 与 Unit Conversion 的建模思路

摘要: SAP S/4HANA分析查询建模中,度量(measure)的加工层级是关键难点,涉及聚合时机、币种/单位语义、过滤上下文等复杂因素。度量不仅是数字字段,还需处理计算口径(Calculated Measures)、上下文绑定(Restricted Measures)和单位转换等问题。Calculated Measures适合派生指标(如毛利率),需注意聚合前后计算差异;Restricted Measures通过固化过滤条件(如区分实际/计划金额)确保业务语义一致性。建模时应将业务逻辑下沉到分析模型层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1024

另辟蹊径之--解决Jasperreport的web打印的一种另类方法

相信接触过ireport报表的程序猿,大多都会被其报表打印功能所困扰,虽然jasperreport有自带的japserPrint的打印功能,代码如下 JasperPrint jasperPrint = getJasperPrint(request, JREPORT_RELATIVE_DIR+__report, null, __report) ; JasperPrintManager.prin

芒果先生 2354

OpenClaw 钉钉和飞书集成方案研究 & OpenClaw 研究分析报告

OpenClaw(原名 Clawdbot,曾用名 Moltbot)是一款开源的个人 AI 智能体,采用"本地优先"设计理念。与传统聊天机器人不同,OpenClaw 具备真正的系统级执行能力,能够实际操作用户的计算机系统,完成各种实际任务。核心优势本地部署:所有数据存储在用户本地设备,隐私零泄露系统级执行:具备完整的系统访问权限,可执行文件操作、命令运行等全渠道交互:支持多种即时通讯平台作为交互界面开源透明:MIT 许可证,代码完全开放,社区驱动开发应用场景个人助理:日程管理、任务提醒、邮件处理。

AI天才研究院 2341

java web报表,jasperReport使用简介

转载请注明出处!!! jasperReport使用简介 需求简介:java web需生成报表,然后打印出来。报表用的jasperReport,编辑报表的可视化工具用的iReport。其次,web的打印是个比较棘手的问题,网上有很多第三方控件,经过不懈努力,找到了不少控件,但是支持直接打印(不跳预览)的免费版好像没有,无奈,用java手写了一个打印控件。 控件实现的功能:自动使用客户端电脑的默认打印机打印出指定的文件。【直接打印(不展示预览)】。 可指定双面打印。 可执行文件。打开一次后自动设置成开

weiqiang915的博客 5001

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JasperReport在web开发中如何进行打印?

如何在web项目中呈现打印Jasper报表? 我先说一下JASPER报表的特点:jasperReport在设计阶段就已经定义好了打印纸张的大小,横向纵向,边距的大小,它在报表生成时就已经确定了报表中各个元素的位置,高度,宽度,它的分页机制也是基于确定的纸张大小和计算各个元素高度来进行分页的。报表一旦生成就就没有办法在打印时进行调整,所以它无法像birt报表(分页是它的硬伤)一样,在打印时根据...

bighappy1983的专栏 1424

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java applet+jasperReport 实现web端打印

1.首先介绍下背景:    web端套打(精确打印)、针式打印机(批量走纸)    相关的技术:struts2+jQuery easyUI+applet+jasperReport3.7.5,对相关技术不熟的自己去了解。    注:本实践已经在项目中成功运用,且项目已经上线。解决了所有遇到的问题。          由于时间仓促,又时隔一年,暂时只写个大概,请仔细研究代码,以后有时间再补充详...

qq747582024的专栏 771

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

一次 applet 客户端打印 jasperreport 报表任务笔记

 一次 applet 客户端打印 jasperreport 报表任务笔记为了方便更多的人了解、使用 Java 打印,写了这个!也希望高手们不吝赐教,指出其中的不足之处,帮助我们提高项目性能,谢谢!背景:.NET 项目中用 webprint3.0 破解版进行打印。客户反映可否不预览、不弹出打印机对话框,点击“打印”按钮后打印机直接打印?要求:为了使打印精确,不可以使用 IE 的打印功能;另外

Defonds 的专栏 2万+

解决Jasperreport的web 套打

<br /> <br />    前段时间写了一篇 解决Jasperreport的web打印另一种方法 <br />解决Jasperreport的web打印另一种方法<br />    关于在web中的打印 套打是经常被提到的,这个需求很广泛,中间忙了一些其他的事情,到今天才把在Jasperreport实现web套打的内容整理好。<br /> <br />在读这篇文章之前最好先读一下上一篇文章,里面有些设计到jatoolsprinter的内容需要了解一下。<br />        下面开始讲述一下整个套打

旺仔专栏 6099

java web jasperreport+ireport 实现多记录自动分页打印

ireport用来设计一个ireport disign,编辑只有得到.jasper文件。          jasperreport可以读取.jasper转化成html pageEncoding="UTF-8"%> import="java.io.*,net.sf.jasperreports.engine.*,net.sf.jasperreports.engine.util.

towardsfuture的专栏 1万+

利用JasperReport+iReport进行Web报表开发

用JasperReport+iReport进行Web报表开发序言在很多实际的项目里,报表都是其中十分重要的组成部分,例如把查询结果以报表的形式呈现出来。这里所提到的报表可不是简单的二维表,而是拥有复杂表头的、多维的、可以在运行期从数据库中自动读取数据、可自动分页、拥有丰富的页面元素(图片,超连接等)、支持分组和交叉表、支持打印、最好还能导出到Excel或Word…...(汗L)。但是显

薛笛的专栏 10万+

JasperReport+Servlet Web应用之:打印预览

打印预览与打印的准备工作是一样的,第一,二,三,四,五步请参照:JasperReport+Servlet Web应用之:打印  不同之处在于:我们同样要写一个预览的applet如下: import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import javax.swing.JOpt...

我的IT技术杂谈 735

Springboot整合JasperReport报表以及报表打印功能

Springboot整合JasperReport报表以及报表打印功能   本文章主要介绍如何将JasperReport做好的报表整合到springboot项目中。   关于如何下载和使用JasperReport工具做报表这里就不详细介绍了,可以查看该帖子进行下载,配置和操作:https://blog.youkuaiyun.com/dullchap/article/details/51799070   在做好报表以后,运行.jrxml文件,会生成一个pdf格式的.jasper文件,...

s_156的博客 2203

JasperReport+Servlet Web应用之:打印

关于JasperReport的简介大家可以去google上去查,在这里就不作介绍了。   我的开发环境:MyEclipse 5.5 GA+iReport-nb-3.5.2。所用的JasperReport版本也是:jasperreports-3.5.2 所需要的jar可以从下面的lib1,lib2中获得,所有jar包除了iTextAsian.jar外都可以从jasperreports-3.5....

我的IT技术杂谈 449
上一篇: 用父子关系的树状结构数据集作报表
下一篇: Oracle 根据字段查询表名
yangthree
博客等级 码龄20年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值