-
jasperreport+struts导出pdf文件,部分浏览器无法下载10
最近在做一个项目的财务单据打印,业主要求生产pdf格式的文件然后打印
jasperreport用的是4.0.1
struts配置的是2.0.9
struts配置:
<action name="createStokeInPDF" method="createStokeInPDF" class="createPdfAction">
<result name="success" type="jasper">
<!-- 编译后的jasper文件路径 -->
<param name="location">/report/${styleType}.jasper</param>
<!-- 视图界面中显示的数据的数据源 -->
<param name="dataSource">stokeInList</param>
<!-- 报表生成格式 -->
<param name="format">PDF</param>
<param name="documentName">${fileName}</param>
</result>
<result name="error">/jsp/error.jsp</result>
</action>
action代码:
package com.freshpower.bid.report.action;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import com.freshpower.bid.ma.model.MaterialClass;
import com.freshpower.bid.mf.biz.MFBillMgr;
import com.freshpower.bid.mf.biz.MFMaterialMgr;
import com.freshpower.bid.mf.biz.MFReportMgr;
import com.freshpower.bid.mf.model.MFStoreBill;
import com.freshpower.bid.mf.model.MaterialStore;
import com.freshpower.bid.report.model.StokeInBean;
import com.opensymphony.xwork2.ActionSupport;
public class CreatePDFAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private List<StokeInBean> stokeInList = new ArrayList<StokeInBean> ();
private StokeInBean stokeIn;
private String idtemp;
private String printType;
private MFMaterialMgr mfmaterialmgr;
private MFBillMgr mfbillmgr;
private MFReportMgr mfreportmgr;
private String fileName;
private String styleType;
/**
* 取到入库验收信息
* @return
* @throws Exception
*/
private StokeInBean getStockInDateSouce() throws Exception{
try{
MFStoreBill stbill = new MFStoreBill();
stbill.setStoreBillId(Long.valueOf(idtemp));
stbill=this.mfbillmgr.getMFStoreBillById(stbill);
MaterialStore mastore = new MaterialStore();
mastore.setLinkId(Long.valueOf(idtemp));
List<MaterialStore> mastoreList = this.mfmaterialmgr.getList(mastore, "getAllMaterialStore");
mastore=mastoreList.get(0);
stokeIn = new StokeInBean();
stokeIn.setTitleName(getInTitleName(printType));
stokeIn.setProjectName(stbill.getProjectName());
stokeIn.setStationName(stbill.getSendPlace());
stokeIn.setMaterialType(mastore.getMaterialNo());
stokeIn.setSignDate(new SimpleDateFormat("yyyy-MM-dd").format(stbill.getSignDate()));
stokeIn.setBillNo(stbill.getStoreBillNo());
stokeIn.setSendUnit(stbill.getSendPlace());
stokeIn.setArriveNo(stbill.getSendNo());
stokeIn.setReceiveDate(new SimpleDateFormat("yyyy-MM-dd").format(stbill.getGetMFDate()));
if(stbill.getCreateDate()!=null){
stokeIn.setCreateDate(new SimpleDateFormat("yyyy-MM-dd").format(stbill.getCreateDate()));
}else{
stokeIn.setCreateDate(stokeIn.getSignDate());
}
stokeIn.setProviderName(stbill.getProviderName());
stokeIn.setPactNo(stbill.getPactNo());
if(stbill.getCarNo()!=null){
stokeIn.setCarNo(stbill.getCarNo());
}else{
stokeIn.setCarNo("");
}
stokeIn.setMaterialType(coverMaterialType(mastore.getMaterialNo()));
stokeIn.setMaterialNo(mastore.getMaterialNo());
if(mastore.getMaterialSpec()==null){
mastore.setMaterialMade("");
}
if(mastore.getMaterialType()==null){
mastore.setMaterialType("");
}
stokeIn.setMaterialDetail(mastore.getMaterialName()+" "+mastore.getMaterialSpec()+ " "+mastore.getMaterialType());
stokeIn.setMaterialUnit(mastore.getMaterialUnit());
stokeIn.setShouldAcount(mastore.getMaterialAcount());
stokeIn.setInfactAcount(mastore.getMaterialAcount());
stokeIn.setPlanPrice(mastore.getPlanPrice());
stokeIn.setPlanMoney(mastore.getPlanMoney());
stokeIn.setStationManager(stbill.getStationManager());
stokeIn.setKeeper(stbill.getKeeper());
stokeIn.setBillMaker(stbill.getBillMaker());
if(mastore.getSendmId()!=null){
MaterialSend send = new MaterialSend();
send.setMaterialId(mastore.getSendmId());
send=this.mfmaterialmgr.getMaterialSendById(send);
stokeIn.setShouldAcount(send.getMaterialAcount());
}else{
stokeIn.setShouldAcount(stokeIn.getInfactAcount());
}
if(isGangGuan(stokeIn.getMaterialNo())){//如果是钢管 计算 件数长度
stokeIn.setInfactLength("");
stokeIn.setShouldLength("");
stokeIn.setShouldRoot("");
if(mastore.getMaterialRoot()!=null){
stokeIn.setInfactRoot(mastore.getMaterialRoot());
}else{
stokeIn.setInfactRoot("");
}
}
if(stbill.getNotes()==null){
stokeIn.setNotes("");
}else{
stokeIn.setNotes(stbill.getNotes());
}
//导出的文件名
//fileName=stbill.getProjectName()+mastore.getMaterialName()+"物资验收单";
fileName=stbill.getStoreBillNo();
return stokeIn;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 打印入库验收单
* @return
* @throws Exception
*/
public String createStokeInPDF() throws Exception {
if(printType.equals("4")){
for(int i=0;i<3;i++){
stokeIn=getStockInDateSouce();//取到数据源
stokeIn.setTitleName(getInTitleName(String.valueOf(i+1)));
stokeInList.add(stokeIn);
}
}else{
stokeIn=getStockInDateSouce();//取到数据源
stokeIn.setTitleName(getInTitleName(printType));
stokeInList.add(stokeIn);
}
getInStyleType(stokeIn);
return SUCCESS;
}
/**
*
* @param printType
* @return
*/
public String getInTitleName(String printType){
String result="";
if(printType.equals("1")){
result="一 制单存";
}
if(printType.equals("2")){
result="二 财务记帐";
}
if(printType.equals("3")){
result="三 采办处";
}
if(printType.equals("4")){
result="全套三联";
}
return result;
}
/**
* 得到返回结果(打印样板文件名称)
* @return
*/
public void getInStyleType(StokeInBean stokeIn){
String pro = stokeIn.getProjectName();
String notemp=stokeIn.getMaterialNo().substring(0,4);
if(pro.equals("中卫-贵阳联络线(渝黔段)及支线管道工程(六标段)")){//中贵六标格式
if(notemp.equals("0309")||notemp.equals("0310")){//如果是钢管
//styleType="stoke_in_zg6_0309";
styleType="stoke_in_zg6_0309";
}else{ //如果不是钢管
styleType="stoke_in_zg6_other";
}
}
else{//老系统格式
if(notemp.equals("0309")||notemp.equals("0310")){//如果是钢管
styleType="stoke_in_old_0309";
}else{ //如果不是钢管
styleType="stoke_in_old_other";
}
}
}
//-------------------------------------
public List<StokeInBean> getStokeInList() {
return stokeInList;
}
public void setStokeInList(List<StokeInBean> stokeInList) {
this.stokeInList = stokeInList;
}
public String getIdtemp() {
return idtemp;
}
public void setIdtemp(String idtemp) {
this.idtemp = idtemp;
}
public String getPrintType() {
return printType;
}
public void setPrintType(String printType) {
this.printType = printType;
}
public MFMaterialMgr getMfmaterialmgr() {
return mfmaterialmgr;
}
public void setMfmaterialmgr(MFMaterialMgr mfmaterialmgr) {
this.mfmaterialmgr = mfmaterialmgr;
}
public MFBillMgr getMfbillmgr() {
return mfbillmgr;
}
public void setMfbillmgr(MFBillMgr mfbillmgr) {
this.mfbillmgr = mfbillmgr;
}
public StokeInBean getStokeIn() {
return stokeIn;
}
public void setStokeIn(StokeInBean stokeIn) {
this.stokeIn = stokeIn;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public MFReportMgr getMfreportmgr() {
return mfreportmgr;
}
public void setMfreportmgr(MFReportMgr mfreportmgr) {
this.mfreportmgr = mfreportmgr;
}
public StokeOutBean getStokeout() {
return stokeout;
}
public void setStokeout(StokeOutBean stokeout) {
this.stokeout = stokeout;
}
public String getStyleType() {
return styleType;
}
public void setStyleType(String styleType) {
this.styleType = styleType;
}
public List<StokeOutBean> getStokeOutList() {
return stokeOutList;
}
public void setStokeOutList(List<StokeOutBean> stokeOutList) {
this.stokeOutList = stokeOutList;
}
}
导出的话ie9和谷歌浏览器没有问题,部分浏览器比如ie6,ie7,ie8导出的时候页面空白什么都不显示,
截图入下
360浏览器部分电脑上可以下载,部分电脑不能下载
最开始的时候多点几次 tomcat服务器直接内存溢出了,在网上找了相关文件是
导出pdf报表的时候容易内存溢出
因为pdf文件过大导致的
修改一下tomcat配置即可解决
-Xms512m -Xmx512m -XX:MaxNewSize=512m -XX:MaxPermSize=512m
现在内存溢出问题解决了,但是很多用户正常使用的浏览器无法导出pdf文件,用户的使用很不方便而且满意度差
一直苦苦钻研不知道原因何在,
希望各位前辈和高手不吝赐教,帮我解决问题!
qq:312383161
2012年11月25日 10:24
相关推荐
在这个项目中,JasperReport是报表生成的核心,它接收来自Struts2的请求,结合业务数据填充iReport模板,最后生成可供用户下载的报表。 **报表导出功能**: 项目中包含的"Highcharts报表导出功能所需jar包"可能指的...
Java报表系统是企业级应用中不可或缺的一部分,它用于生成、展示和打印各种复杂的数据报告。在本主题中,我们将深入探讨如何使用JasperReport、iReport以及Struts2框架来构建一个强大的报表解决方案。 JasperReport...
当用户请求这个Action时,Struts2会调用相应的Action方法,执行上述步骤,最后将生成的PDF文件响应给客户端。 总结起来,这篇博文会介绍如何在Struts2中集成JasperReport,通过编写Action类和配置Struts2的XML文件...
Struts2.1和JasperReport的整合是Java Web开发中的一个重要话题,它涉及到Web应用程序的MVC(模型-视图-控制器)架构和数据报告的生成。Struts2.1是一个强大的MVC框架,而JasperReport则是一个用于创建复杂报表的...
- 使用Struts2的Result类型,如stream或freemarker,将报表以流形式发送到客户端浏览器。 4. 示例代码: 一个简单的Action类方法可能如下所示: ```java public String generateReport() throws Exception { ...
它支持多种数据源,如数据库、CSV文件等,并能导出报表为PDF、HTML、Excel等多种格式。开发者可以使用iReport(现已被Jaspersoft Studio取代)这个可视化编辑器来设计报表模板。 2. **Struts**:Struts是Apache软件...
Struts2是一个流行的Java Web应用程序框架,它提供了MVC(模型-视图-控制器)架构,而JasperReport则是一个强大的报表生成库,可以生成多种格式的报表,如PDF、HTML、Excel等。iReport是JasperReport的可视化设计...
在这个主题中,我们将深入探讨如何在Struts2中集成JasperReport来导出Excel。 首先,我们需要理解Struts2的工作原理。Struts2框架基于拦截器模型,通过Action类处理用户请求,并返回结果到视图层。为了实现导出...
Struts2作为MVC(模型-视图-控制器)架构的一部分,主要用于处理HTTP请求并管理应用程序流程,而JasperReport则是一个强大的报告生成工具,能够创建复杂的报表设计,并以各种格式如PDF、HTML、Excel等导出。...
- 在Action中调用JasperReport API,如`JasperFillManager.fillReport()`填充报表数据,`JasperExportManager.exportReportToPdfStream()`导出为PDF格式。 - 将生成的报表响应给客户端,通常以流形式返回。 7. 注意...
Struts2是一个强大的MVC框架,用于构建动态、数据驱动的Web应用程序,而JasperReport则是一个开源的报表工具,可以生成丰富的报表,支持多种输出格式如PDF、HTML、Excel等。下面我们将深入探讨这两者如何整合以及...
struts2结合jasperreport的一个小项目,做了一张销售统计表,导出方式有5种(html,xml,pdf,cvs,xls)。 主要用到MyEclipse插件JasperAssistant图形开发工具来设计报表,设计的报表有源文件jasperDemo.jrxml和编译后...
配置中需要指定Content-Type(如application/pdf)和文件名称,以便浏览器能够正确识别和下载。 6. **展示或下载报表**:在视图(通常是JSP)中,根据Action返回的报表实例,使用Struts2的标签库或自定义标签来输出...
5. **文件导出**:Struts的Action可以处理导出请求,根据用户的选择(如PDF、Excel或Word),调用相应的导出方法。导出的文件通常会被保存在服务器的临时目录,然后通过HTTP响应流发送到客户端进行下载。 6. **报表...
- `jfreechart.jar`:用于图表生成,JasperReport的一部分。 - `jasperreports-fonts.jar`(可选):包含额外的字体文件,用于报表中的特殊字体需求。 3. **依赖库**: - `commons-beanutils.jar`、`commons-...
为了在Struts2中使用JasperReport,需要在 `struts.xml` 文件中进行配置: ```xml <result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/> ...
5. 设置报表输出格式,然后通过流式响应返回给前端,用户可以在浏览器中查看或下载报表。 在实际应用中,常常会结合两种方式,先使用JDBC获取基础数据,再通过Struts2进行数据处理和展示控制,以实现更丰富的功能。...