我使用 iReport 创建了一个报告,该报告从我的数据库中的表中选择数据。
有2个字段fromdate
和todate
。
我尝试了id的参数和客户名称都可以。
问题是:当我想在网址fromdate
和todate
中发送2个参数时,我正在尝试发送日期:2014-02-02
和2017-02-02
。
网址:localhost/reports/getreportservice/2014-02-02&2017-02-02
然后在我的PHP文件中使用strtotime
函数将这些日期从字符串转换为日期并更改格式。然后我将2个参数发送到报告。
在报告中,我将2个参数类型设置为:java.util.Date
,在MySQL中,字段的类型为:DATETIME。
该报告给出了错误:cannot process the report
。每当我们在错误中出错时,都会出现同样的错误。没有更多的日志。
任何人都有解决方案让JasperReports的报告接受这两个参数吗?
我尝试在 iReport 中预览我的报告,它运行正常并获取了我的数据。我尝试了id param并命名一切正常。问题在于从URL接受日期。
<?php
namespace App\Http\Controllers;
use JasperPHP\JasperPHP;
class ReportController extends Controller {
public function getReportTest($fromdate,$todate){
$fromdatee= strtotime($fromdate);
$fromdateee=Date('d/M/y',$fromdatee);
$todatee= strtotime($todate);
$todateee=date('d/M/y',$todatee);
$output = public_path() . '/report/'.time().'_CancelAck';
$output = public_path() . '/report/'.time().'_CancelAck';
$ext = "html";
$data_file = public_path() . '/report/CancelAck.xml';
$driver = 'xml';
$xml_xpath = '/CancelResponse/CancelResult/ID';
\JasperPHP::process(
public_path() . '/report/newreporttest.jrxml',
$output,
array($ext),
array('fromdate' =>$fromdateee, 'todate' =>$todateee),
array(
'driver' => 'mysql',
'username' => 'root',
'password' =>'',
'host' => 'localhost',
'database' => 'test',
'port' => '3306',
),
array('data_file' => $data_file, 'driver' => $driver, 'xml_xpath' => $xml_xpath),
false,
false
)->execute();
// header('Content-Description: File Transfer');
// header('Content-Type: application/octet-stream');
// header('Content-Disposition: attachment; filename='.time().'_CancelAck.'.$ext);
// header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Length: ' . filesize($output.'.'.$ext));
flush();
readfile($output.'.'.$ext);
unlink($output.'.'.$ext);
}
}