Jasper reports 如何在服务器上保存html或pdf文件时预览jsp页面中的报表?

Jasper reports 如何在服务器上保存html或pdf文件时预览jsp页面中的报表?,jasper-reports,report,liferay,portlet,liferay-6,Jasper Reports,Report,Liferay,Portlet,Liferay 6,以下是我在portletAction中的ServerSource方法中调用的函数 public String ajax_GenerateReportsforCampaignAdvertiseDateRangeWithCustomQuery( ResourceRequest request, ResourceResponse response, String str_camp_id) throws Exception { Port

以下是我在portletAction中的ServerSource方法中调用的函数

public String ajax_GenerateReportsforCampaignAdvertiseDateRangeWithCustomQuery(
            ResourceRequest request, ResourceResponse response,
            String str_camp_id) throws Exception {


        PortletContext pc = request.getPortletSession().getPortletContext();
        String Pathjrxml = pc
                .getRealPath("/src_reports/Campaign_Advertise_DateRange_Report.jrxml");
        String pathjasper = pc
                .getRealPath("/src_reports/Campaign_Advertise_DateRange_Report.jasper");

        _report_path = pc.getRealPath("htmlreport/report");
        _report_name = Calendar.getInstance().getTimeInMillis() + "";
        _report_path = _report_path + _report_name;

        String str_start_date = request.getParameter("f_start_date");
        String str_end_date = request.getParameter("f_end_date");
        Date filter_start_date = null;
        Date filter_end_date = null;

        List<CampaignReport> temp_campReportList = new ArrayList<CampaignReport>(
                8);

        log.info("ajax_Generate Reports For Campaign Advertise With Date Range Enter");

        /** Dateformat which will convert filter date string in to specified **/

        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");

        filter_start_date = dateFormat.parse(str_start_date);

        filter_end_date = dateFormat.parse(str_end_date);

        str_end_date = dateFormat.format(filter_end_date);

        log.info("Filter Start Date : " + filter_start_date);
        log.info("Filter End Date : " + filter_end_date);

        ReportCustomQuery cust = new ReportCustomQuery();
        String pathImage = request.getContextPath()
                + "/eMenuAdvertise-portlet/img/eMenu Logo_1.png";
        temp_campReportList = cust.GetAdvertiseListByCampaignsForReports(
                Long.parseLong(str_camp_id), filter_start_date,
                filter_end_date, pathImage);



        System.setProperty("java.awt.headless", "true");

        JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(
                temp_campReportList);
        System.out.println(" bean collection "
                + beanCollectionDataSource.getRecordCount());
        System.out.println("Compile Start");





        JasperCompileManager.compileReportToFile(Pathjrxml, pathjasper);
        JasperPrint jasperPrint = JasperFillManager.fillReport(pathjasper,
                new HashMap<String, Object>(), beanCollectionDataSource);

        log.info("Compile End");
        log.info(" report path " + _report_path);


        JasperExportManager.exportReportToHtmlFile(jasperPrint, _report_path
                + ".html");
        JasperExportManager.exportReportToPdfFile(jasperPrint, _report_path
                + ".pdf");

        log.info("ajax_GenerateReports Leave");
        return _report_name;
    }
public String ajax\u GenerateReports用于CompaignAdvertiseDateRangeWithCustomQuery(
ResourceRequest请求,ResourceResponse响应,
字符串str_camp_id)引发异常{
PortletContext pc=request.getPortletSession().getPortletContext();
字符串路径jrxml=pc
.getRealPath(“/src_reports/Campaign_advertive_DateRange_Report.jrxml”);
字符串路径jasper=pc
.getRealPath(“/src_reports/Campaign_advertive_DateRange_Report.jasper”);
_report_path=pc.getRealPath(“htmlreport/report”);
_report_name=Calendar.getInstance().getTimeInMillis()+“”;
_报告路径=\u报告路径+\u报告名称;
字符串str_start_date=request.getParameter(“f_start_date”);
字符串str_end_date=request.getParameter(“f_end_date”);
日期过滤器\开始\日期=空;
日期过滤器\结束\日期=空;
List temp\u campReportList=新数组列表(
8);
log.info(“ajax_生成活动广告报告,输入日期范围”);
/**Dateformat,用于将中的筛选日期字符串转换为指定的**/
DateFormat DateFormat=新的简化格式(“MM/dd/yyyy”);
filter\u start\u date=dateFormat.parse(str\u start\u date);
filter\u end\u date=dateFormat.parse(str\u end\u date);
str\u end\u date=dateFormat.format(过滤结束日期);
日志信息(“过滤器开始日期:+过滤器开始日期”);
日志信息(“过滤器结束日期:+过滤器结束日期”);
ReportCustomQuery cust=新建ReportCustomQuery();
字符串pathImage=request.getContextPath()
+“/eMenuAdvertiseportlet/img/eMenu Logo_1.png”;
temp_campReportList=cust.GetAdvertiseListByActivationForReports(
Long.parseLong(str\u camp\u id),filter\u start\u date,
过滤器(结束日期,路径图像);
setProperty(“java.awt.headless”、“true”);
JRBeanCollectionDataSource beanCollectionDataSource=新的JRBeanCollectionDataSource(
临时报告表);
System.out.println(“bean集合”
+beanCollectionDataSource.getRecordCount());
System.out.println(“编译开始”);
jaspecompilemanager.compileReportToFile(Pathjrxml,pathjasper);
JasperPrint JasperPrint=JasperFillManager.fillReport(pathjasper,
新的HashMap(),beanCollectionDataSource);
log.info(“编译结束”);
log.info(“报告路径”+_报告路径);
JasperExportManager.exportReportToHtmlFile(jasperPrint,报告路径)
+“.html”);
JasperExportManager.exportReportToPdfFile(jasperPrint,_报告_路径)
+“.pdf”);
log.info(“ajax_GenerateReports离开”);
返回报告名称;
}
调用此方法的ajax调用如下

<script type="text/javascript">
    function GenerateReport(addToDo) {
        var camp_ID = document.getElementById('camp_id').value;
        var f_start_date = document
                .getElementById('Start_validBeforeDatepicker').value;
        var f_end_date = document.getElementById('End_validAfterDatepicker').value;
        $.ajax({
            url : addToDo,
            data : {
                "camp_id" : camp_ID,
                "f_start_date" : f_start_date,
                "f_end_date" : f_end_date,
                "CMD" : camp_ID
            },
            type : "GET",
            timeout : 20000,
            dataType : "text",
            async : false,
            success : function(data) {

                createRenderURL(data);

            }
        });

函数生成器报告(addToDo){
var camp_ID=document.getElementById('camp_ID')。值;
var f_开始日期=文件
.getElementById('Start_validBeforeDatepicker')。值;
var f_end_date=document.getElementById('end_validAfterDatepicker')。值;
$.ajax({
网址:addToDo,
数据:{
“营地id”:营地id,
“f_开始日期”:f_开始日期,
“f_结束日期”:f_结束日期,
“CMD”:营地ID
},
键入:“获取”,
超时:20000,
数据类型:“文本”,
async:false,
成功:功能(数据){
createRenderURL(数据);
}
});
下面是我的creatRenderUrl javascript,它正在为新创建的html文件创建一个动态资源URL,然后我将在iframe中显示该html页面作为预览

function createRenderURL(str_path,contextpath,resourceurl) {



    AUI().use('liferay-portlet-url', function(A) {

        var renderURL = Liferay.PortletURL.createRenderURL();
        renderURL.setParameter("jspPage", "/htmlreport/report" + str_path);
        renderURL.setPortletId("eMenuAdvertise_WAR_eMenuAdvertiseportlet");


        var p= "<%=renderRequest.getContextPath()%>";
        var downloadurl="/eMenuAdvertise-portlet/htmlreport/report"+ str_path+".pdf";

        var x=document.getElementById("outPopUp");
        x.style.visibility="hidden";

        document.getElementById('reportpreview').src = "/eMenuAdvertise-portlet/htmlreport/report"+ str_path+".html";


        $("#download").click(function () {

            DownloadFile(downloadurl,resourceurl);


});

         return downloadurl;

    });

}
函数createRenderURL(str_路径、contextpath、resourceurl){
AUI().use('liferay-portlet-url',函数(A){
var renderURL=Liferay.PortletURL.createRenderURL();
renderURL.setParameter(“jspPage”、“/htmlreport/report”+str_path);
renderURL.setPortletId(“eMenuAdvertise\u WAR\u eMenuAdvertiseportlet”);
var p=“”;
var downloadurl=“/eMenuAdvertise portlet/htmlreport/report”+str_path+”.pdf”;
var x=document.getElementById(“outPopUp”);
x、 style.visibility=“hidden”;
document.getElementById('reportpreview').src=“/eMenuAdvertiseportlet/htmlreport/report”+str_path+”.html”;
$(“#下载”)。单击(函数(){
下载文件(下载URL、资源URL);
});
返回下载URL;
});
}

但是我想做的是在不保存任何文件的情况下预览报表?在运行中?

编译jrxml后,调用JasperUnmanager.runReportToPdf而不是JasperExportManager,它将返回报表的字节数组。您可以将此字节数组返回给客户端,而无需将报表保存在文件中

大概是这样的:

JasperCompileManager.compileReportToFile(Pathjrxml, pathjasper);
byte[] report = JasperRunManager.runReportToPdf(pathjasper, new HashMap<String, Object>(), beanCollectionDataSource);
jaspecompilemanager.compileReportToFile(Pathjrxml,pathjasper);
byte[]report=JasperRunManager.runReportToPdf(pathjasper,new HashMap(),beanCollectionDataSource);