ireport报表怎样实现批量打印,请高手帮忙。

ireport报表怎样实现批量打印,请高手帮忙。,第1张

将需要批量打印的内容生成的结果集传递给报表模板就可以了,会自动批量打印。

不预览循环批量打印要怎样实现?

需要调用打印接口 JasperPrintManager类可以直接实现打印。具体资料你可以参考Api

我用的是printReport 方法。

主要就是先在服务器端生成JasperPrint对象,返回给客户端。

下面代码百度到的,你可以参考。

import java.io.File

import java.io.ObjectOutputStream

import java.util.ArrayList

import java.util.List

import java.util.Map

import javax.naming.Context

import javax.naming.InitialContext

import javax.naming.NameNotFoundException

import javax.servlet.ServletOutputStream

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import javax.sql.DataSource

import net.sf.jasperreports.engine.JRException

import net.sf.jasperreports.engine.JasperFillManager

import net.sf.jasperreports.engine.JasperPrint

import net.sf.jasperreports.engine.JasperPrintManager

import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource

import org.apache.struts.action.Action

import org.apache.struts.action.ActionForm

import org.apache.struts.action.ActionForward

import org.apache.struts.action.ActionMapping

import com.lowagie.text.ExceptionConverter

import com.sofn.struts.dto.UserInfoDTO

import com.sofn.struts.op.UserInfo

import com.sofn.util.UserSessionOperate

public class ReportViewAction extends Action {

(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)

throws Exception {

//已编译文件路径和格式

String fp =this.getServlet().getServletContext().getRealPath("/")+ "report\\jasper\\"+ request.getAttribute("rdoc")+ ".jasper"

File reportFile = new File(fp)

//System.out.println("报表路径!!!!!!!"+reportFile)

Map parameters = (Map) request.getAttribute("paras")

byte[] bytes = null

List list = new ArrayList()

DataSource ds = null

JasperPrint jasperPrint=null

//参数传递

UserSessionOperate uso = new UserSessionOperate()

String user = uso.getUser(request)

UserInfo eidr = new UserInfo()

UserInfoDTO eidrdto = null

String deptname = "物流部门"

String username = "陈云刚"

parameters.put("marker", username)

parameters.put("bumen", deptname)

//数据库连接

try {

String source = "java:comp/env/jdbc/posuse"

Context ic = null

if (ic == null)

ic = new InitialContext()

ds = (DataSource) ic.lookup(source)

if (ds == null) {

System.out.println("Reportview----22222!")

}

} catch (NameNotFoundException nfe) {

nfe.toString())

} catch (Exception ne) {

ne.printStackTrace()

}

//使用数据源

if (request.getAttribute("datasource") != null) {

list = (List) request.getAttribute("reportlist")

JRBeanCollectionDataSource jds =new JRBeanCollectionDataSource(list) //使用数据源

}

//使用SQL查询

try {

jasperPrint =JasperFillManager.fillReport(reportFile.getPath(),parameters,ds.getConnection())//填充报表数据生成JasperPrint对象

JasperPrintManager.printReport(jasperPrint, false)//2008-08-25 直接打印,不用预览PDF直接打印 true为d出打印机选择.false为直接打印.

} catch (JRException jre) {

//System.out.println("Reportview----JRException88888")

jre.printStackTrace()

} catch (ExceptionConverter ec) {

ec.getLocalizedMessage())

ec.printStackTrace()

} catch (NullPointerException npe) {

npe.getLocalizedMessage())

npe.getMessage())

npe.toString())

System.err)

} catch (Exception ee) {

ee.printStackTrace()

}

//输出

response.setContentType("application/octet-stream")

ServletOutputStream ouputStream = response.getOutputStream()

ObjectOutputStream oos = new ObjectOutputStream(ouputStream)

oos.writeObject(jasperPrint)//将JasperPrint对象写入对象输出流中

oos.flush()

oos.close()

ouputStream.flush()

ouputStream.close()

return mapping.findForward("view") //转向

}

}

。主程序文件应完成的任务如下:

①对应用程序的环境进行初始化,如打开数据库、声明变量、设置SET等。

②显示初始的用户界面

③控制事件循环

显示出初始的用户界面后,还需要建立一个事件循环来对用户的 *** 作作出响应。因此主程序中要用READ EVENTS 语句启动事件循环。

当事件循环开始以后,应用程序将控制权交给最后一个显示出来的界面来处理,这个界面退出时要用CLEAR EVENTS语句结束事件循环。

注意:如果在主文件中没有包含READ EVENTS,在VFP环境中可以正确地运行应用程序,但是离开VFP环境运行应用程序时,会出现程序显示片刻就退出的现象。

在日常工作中,我们经常会遇见这种情况:处理的文件主要内容基本都是相同的,只是具体数据有变化而已。在填写大量格式相同,只修改少数相关内容,其他文档内容不变时,我们可以灵活运用Word邮件合并功能,不仅 *** 作简单,而且还可以设置各种格式、打印效果又好,可以满足许多不同客户不同的需求。

1、批量打印信封:按统一的格式,将电子表格中的邮编、收件人地址和收件人打印出来。

2、批量打印信件:主要是换从电子表格中调用收件人,换一下称呼,信件内容基本固定不变。

3、批量打印请柬:同上2。

4、批量打印工资条:从电子表格调用数据。

5、批量打印个人简历:从电子表格中调用不同字段数据,每人一页,对应不同信息。

6、批量打印学生成绩单:从电子表格成绩中取出个人信息,并设置评语字段,编写不同评语。

7、批量打印各类获奖证书:在电子表格中设置姓名、获奖名称和等资,在WORD中设置打印格式,可以打印众多证书。

8、批量打印准考证、准考证、明信片、信封等个人报表。

总之,只要有数据源(电子表格、数据库)等,只要是一个标准的二维数表,就可以很方便的按一个记录一页的方式从WROD中用邮件合并功能打印


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6778065.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存