0 0

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
  • 大小: 33 KB

1个答案 按时间排序 按投票排序

0 0

很不错,跑这上面来发帖来了,我也再找原因

2012年12月12日 11:26

相关推荐

    struts2+Ireport+Jasperreport实现报表导出

    在这个项目中,JasperReport是报表生成的核心,它接收来自Struts2的请求,结合业务数据填充iReport模板,最后生成可供用户下载的报表。 **报表导出功能**: 项目中包含的"Highcharts报表导出功能所需jar包"可能指的...

    java报表(jasperreport_ireport+struts2)

    Java报表系统是企业级应用中不可或缺的一部分,它用于生成、展示和打印各种复杂的数据报告。在本主题中,我们将深入探讨如何使用JasperReport、iReport以及Struts2框架来构建一个强大的报表解决方案。 JasperReport...

    Struts2 + JasperReport应用一:导PDF,Excel,HTML显示

    当用户请求这个Action时,Struts2会调用相应的Action方法,执行上述步骤,最后将生成的PDF文件响应给客户端。 总结起来,这篇博文会介绍如何在Struts2中集成JasperReport,通过编写Action类和配置Struts2的XML文件...

    整合Struts2.1+jasperreport

    Struts2.1和JasperReport的整合是Java Web开发中的一个重要话题,它涉及到Web应用程序的MVC(模型-视图-控制器)架构和数据报告的生成。Struts2.1是一个强大的MVC框架,而JasperReport则是一个用于创建复杂报表的...

    ireport+struts2实现web开发

    - 使用Struts2的Result类型,如stream或freemarker,将报表以流形式发送到客户端浏览器。 4. 示例代码: 一个简单的Action类方法可能如下所示: ```java public String generateReport() throws Exception { ...

    JasperReport+SSH

    它支持多种数据源,如数据库、CSV文件等,并能导出报表为PDF、HTML、Excel等多种格式。开发者可以使用iReport(现已被Jaspersoft Studio取代)这个可视化编辑器来设计报表模板。 2. **Struts**:Struts是Apache软件...

    struts2整合jasperreport

    Struts2是一个流行的Java Web应用程序框架,它提供了MVC(模型-视图-控制器)架构,而JasperReport则是一个强大的报表生成库,可以生成多种格式的报表,如PDF、HTML、Excel等。iReport是JasperReport的可视化设计...

    struts2利用jasperreport导出excel

    在这个主题中,我们将深入探讨如何在Struts2中集成JasperReport来导出Excel。 首先,我们需要理解Struts2的工作原理。Struts2框架基于拦截器模型,通过Action类处理用户请求,并返回结果到视图层。为了实现导出...

    Struts2与Jasperreport报表结合

    Struts2作为MVC(模型-视图-控制器)架构的一部分,主要用于处理HTTP请求并管理应用程序流程,而JasperReport则是一个强大的报告生成工具,能够创建复杂的报表设计,并以各种格式如PDF、HTML、Excel等导出。...

    MyEclipse iReport JasperReport Struts2.doc

    - 在Action中调用JasperReport API,如`JasperFillManager.fillReport()`填充报表数据,`JasperExportManager.exportReportToPdfStream()`导出为PDF格式。 - 将生成的报表响应给客户端,通常以流形式返回。 7. 注意...

    Struts2_JasperReport整合的例子

    Struts2是一个强大的MVC框架,用于构建动态、数据驱动的Web应用程序,而JasperReport则是一个开源的报表工具,可以生成丰富的报表,支持多种输出格式如PDF、HTML、Excel等。下面我们将深入探讨这两者如何整合以及...

    struts2 + JasperReport项目

    struts2结合jasperreport的一个小项目,做了一张销售统计表,导出方式有5种(html,xml,pdf,cvs,xls)。 主要用到MyEclipse插件JasperAssistant图形开发工具来设计报表,设计的报表有源文件jasperDemo.jrxml和编译后...

    Struts2与jasperReport简单示例

    配置中需要指定Content-Type(如application/pdf)和文件名称,以便浏览器能够正确识别和下载。 6. **展示或下载报表**:在视图(通常是JSP)中,根据Action返回的报表实例,使用Struts2的标签库或自定义标签来输出...

    struts+ireport报表在页面显示,导出,打印功能

    5. **文件导出**:Struts的Action可以处理导出请求,根据用户的选择(如PDF、Excel或Word),调用相应的导出方法。导出的文件通常会被保存在服务器的临时目录,然后通过HTTP响应流发送到客户端进行下载。 6. **报表...

    Struts2整合JasperReport所需要的jar包

    - `jfreechart.jar`:用于图表生成,JasperReport的一部分。 - `jasperreports-fonts.jar`(可选):包含额外的字体文件,用于报表中的特殊字体需求。 3. **依赖库**: - `commons-beanutils.jar`、`commons-...

    jasperreport的操作步骤

    为了在Struts2中使用JasperReport,需要在 `struts.xml` 文件中进行配置: ```xml &lt;result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/&gt; ...

    SSH+JASPERREPORT整合例

    5. 设置报表输出格式,然后通过流式响应返回给前端,用户可以在浏览器中查看或下载报表。 在实际应用中,常常会结合两种方式,先使用JDBC获取基础数据,再通过Struts2进行数据处理和展示控制,以实现更丰富的功能。...

Global site tag (gtag.js) - Google Analytics