【问题标题】:the pdf file is created but cannot be openedpdf文件已创建但无法打开
【发布时间】:2015-06-08 12:23:26
【问题描述】:

我想从我的 PHP 页面创建/启动一个 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文件无法打开!那么有什么问题呢?

【问题讨论】:

  • java/Java.inc 导入的 java 目录在哪里?
  • 文件中有什么有用的吗?使用十六进制查看器进行检查 - 有时当我认为我下载了 PDF 时,我得到的只是 HTML。如果文件看起来是 PDF,您可以将其发布在公共服务器上并给我们一个链接吗?如果 PDF 有一些内部错误,我们或许能够找出问题所在,这反过来可能会为您提供提示。

标签: php pdf birt


【解决方案1】:

这不是 BIRT 问题,而是 PHP 问题。

结果中的“PDF”可能包含异常回溯、HTML 错误页面或类似内容。

你现在应该做的是:

  • 修复 PHP 导入错误!虽然我不懂 PHP,但我想 config.inc.php 文件应该放在 D:\wamp\www\bazarmada !?

  • 将响应保存到本地文件并使用十六进制编辑器或文本编辑器查看此文件。这应该可以帮助您找出脚本中还有什么问题。

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多