Struts2整合JasperReport預覽HTML格式不顯示圖片問題解決方案

    關於怎麼整合網上到處都是例子、apache也有比較詳細的例子說明,我是參考這篇文章的http://www.blogjava.net/sterning/archive/2008/01/02/172317.html我使用他的源碼HTML預覽時還是不能正常顯示,images/px(網上的一種解決方案)都有還是不能正常顯示,無奈之下只有查看源代碼了。
Struts2對通過JasperReportsResult.java類的doExecute方法對JasperReport進行了簡單的整合,這個方法對JasperReport的API簡單的包裝(車輪理論^_^)

JasperReport jasperReport = (JasperReport) JRLoader.loadObject(systemId);
            jasperPrint 
= JasperFillManager.fillReport(jasperReport, parameters, stackDataSource);
其中systemId是這樣來的
String systemId = servletContext.getRealPath(finalLocation);
也就是導入的是Jasper文件的絕對路徑,Struts2直接使用的jasper文件(編譯報表很耗時!不推薦使用jrxml文件)
<param name="location">/jasper/notification.jasper</param>
至於Action的代碼就不必寫的那麼複雜了
package org.bulktree.jasper;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 
 * @author bulktree Email: [email protected] @ Nov 26, 2008
 */
public class JasperAction extends ActionSupport {

    private JRDataSource reportDataSource;

    @Override
    public String execute() throws Exception {
        
        //定義一個自定義的數據源

        reportDataSource = new JREmptyDataSource();
        
        /*編譯很耗時,Ireport可以編譯jrxml文件可以減少程序運行的壓力
         * 下面一段代碼可以不寫直接使用Ireport編譯好的jasper文件
         * 
         */

/*        ServletActionContext.getRequest().setAttribute("name", "LAOSHULIN");
        String path = ServletActionContext.getServletContext().getRealPath("/jasper");
        System.out.println(path);
        String sourceFileName = path + "\\" + "CarInstance.jrxml";
        String destFileName = path + "\\" + "CarInstance.jasper";

        JasperCompileManager.compileReportToFile(sourceFileName, destFileName);*/

        return SUCCESS;
    }

    public JRDataSource getReportDataSource() {
        return reportDataSource;
    }
}
被註釋的代碼只是指定jrxml文件和jasper文件的路徑及編譯過程,現實中不建議使用,關於jasperReport的各種強大功能本人會在項目結束後進行整理髮布。
    繼續吧!採用HTML格式預覽時,莫名的出現一些圖片的xx,但是我們並沒有使用圖片啊,關於這個爲什麼網上的資料很詳細本人只是解讀一下Struts2這個插件的源碼最終解決圖片顯示問題
protected String imageServletUrl = "\images\";

 exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
                exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() 
+ imageServletUrl);
現在明白爲什麼要新建一個images目錄複製象素圖片了吧!
對於HTML預覽時右擊查看源代碼出現的是相對路徑,但是大多數情況下根據生成的路徑不能指定到px圖片,不知道是不是這個插件包本身的問題還是其它的原因,總之先做出效果來、修改上句換成絕對路徑吧!
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, servletContext.getRealPath(File.separator) + imageServletUrl);
這個圖片xx問題自然就會解決了。 
       好久都沒寫文章了,感覺思路混亂不知道寫了些什麼,大家要是有不明白的可直接提出來。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章