Jasper reports 如何在服务器上保存html或pdf文件时预览jsp页面中的报表?
以下是我在portletAction中的ServerSource方法中调用的函数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
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);