pdf 文件已创建但无法打开
the pdf file is created but cannot be opened
我想从我的 PHP 页面 create/launch a BIRT
report
:
...
new runReport("rptPrixParDaty.rptdesign", array(), "prixpardaty");
该报告基于 view
。
/birt/ 中的 runReport 代码:
<?php
include("../config.inc.php");
require_once("java/Java.inc");
class runReport {
function runReport($report, $param, $output) {
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=".$output.".pdf");
$report_name = RP_REPORT . $report;
$ctx = java_context()->getServletContext();
$birtReportEngine = java("org.eclipse.birt.php.birtengine.BirtEngine")->getBirtEngine($ctx);
java_context()->onShutdown(java("org.eclipse.birt.php.birtengine.BirtEngine")->getShutdownHook());
try{
$connect = new Java("connectDb");
$report = $birtReportEngine->openReportDesign($report_name);
$task = $birtReportEngine->createRunAndRenderTask($report);
foreach ($param as $key => $value) {
$task->setParameterValue($key, new java("java.lang.String",$value));
}
$taskOptions = new java("org.eclipse.birt.report.engine.api.PDFRenderOption");
$outputStream = new java("java.io.ByteArrayOutputStream");
$taskOptions->setOutputStream($outputStream);
$taskOptions->setOutputFormat("pdf");
$task->setRenderOption( $taskOptions );
$task->getAppContext()->put("OdaJDBCDriverPassInConnection", $connect->getConnection(BDD_SERVER, BDD_PORT, BDD_NAME, BDD_USER, BDD_PWD));
$task->run();
$task->close();
} catch (JavaException $e) {
echo $e; //"Error Calling BIRT";
}
echo java_values($outputStream->toByteArray());
}
}
?>
config.inc.php
文件包含常量,它驻留在 Web 项目的 root
目录中。 Web 应用程序生成的日志文件包含此警告行:PHP Warning: include(../config.inc.php): failed to open stream: No such file or directory in D:\wamp\www\bazarmada\birt\runReport.php on line 3
尽管文件 config.inc.php 位于根目录中,而 runReport.php 文件位于 /birt 目录中!
在运行时执行下载,pdf 文件大小为 3Kb,但无法打开 pdf
文件!那怎么了?
这不是 BIRT 问题,而是 PHP 问题。
结果中的 "PDF" 可能包含异常回溯、HTML 错误页面或类似内容。
你现在应该做的是:
修复 PHP 导入错误!虽然我不知道 PHP,但我猜 config.inc.php 文件应该放在 D:\wamp\www\bazarmada !?
将响应保存到本地文件,然后用十六进制编辑器或文本编辑器查看此文件。这应该可以帮助您找出脚本中还有什么问题。
我想从我的 PHP 页面 create/launch a BIRT
report
:
...
new runReport("rptPrixParDaty.rptdesign", array(), "prixpardaty");
该报告基于 view
。
/birt/ 中的 runReport 代码:
<?php
include("../config.inc.php");
require_once("java/Java.inc");
class runReport {
function runReport($report, $param, $output) {
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=".$output.".pdf");
$report_name = RP_REPORT . $report;
$ctx = java_context()->getServletContext();
$birtReportEngine = java("org.eclipse.birt.php.birtengine.BirtEngine")->getBirtEngine($ctx);
java_context()->onShutdown(java("org.eclipse.birt.php.birtengine.BirtEngine")->getShutdownHook());
try{
$connect = new Java("connectDb");
$report = $birtReportEngine->openReportDesign($report_name);
$task = $birtReportEngine->createRunAndRenderTask($report);
foreach ($param as $key => $value) {
$task->setParameterValue($key, new java("java.lang.String",$value));
}
$taskOptions = new java("org.eclipse.birt.report.engine.api.PDFRenderOption");
$outputStream = new java("java.io.ByteArrayOutputStream");
$taskOptions->setOutputStream($outputStream);
$taskOptions->setOutputFormat("pdf");
$task->setRenderOption( $taskOptions );
$task->getAppContext()->put("OdaJDBCDriverPassInConnection", $connect->getConnection(BDD_SERVER, BDD_PORT, BDD_NAME, BDD_USER, BDD_PWD));
$task->run();
$task->close();
} catch (JavaException $e) {
echo $e; //"Error Calling BIRT";
}
echo java_values($outputStream->toByteArray());
}
}
?>
config.inc.php
文件包含常量,它驻留在 Web 项目的 root
目录中。 Web 应用程序生成的日志文件包含此警告行:PHP Warning: include(../config.inc.php): failed to open stream: No such file or directory in D:\wamp\www\bazarmada\birt\runReport.php on line 3
尽管文件 config.inc.php 位于根目录中,而 runReport.php 文件位于 /birt 目录中!
在运行时执行下载,pdf 文件大小为 3Kb,但无法打开 pdf
文件!那怎么了?
这不是 BIRT 问题,而是 PHP 问题。
结果中的 "PDF" 可能包含异常回溯、HTML 错误页面或类似内容。
你现在应该做的是:
修复 PHP 导入错误!虽然我不知道 PHP,但我猜 config.inc.php 文件应该放在 D:\wamp\www\bazarmada !?
将响应保存到本地文件,然后用十六进制编辑器或文本编辑器查看此文件。这应该可以帮助您找出脚本中还有什么问题。