1

我使用 BIRT 和 phpjavabridge 创建了这份报告

<?php

header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=downloaded.pdf");

require_once("http://127.0.0.1:8080/JavaBridge/java/Java.inc");
header("Content-type: text/html");



// the report file to render
$myReport = "test.rptdesign";

// load resources, .rpt files and images from the current working dir
$here = getcwd();

$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());


// Create a HTML render context

try{

// Load the report design
$design = $birtReportEngine->openReportDesign("${here}/${myReport}");
$task = $birtReportEngine->createRunAndRenderTask( $design );
$task->setParameterValue("sample", new java("java.lang.String", "Hello world!"));

// Add HTML render options
$options = new java("org.eclipse.birt.report.engine.api.PDFRenderOption");
$options->setOutputFormat($options->OUTPUT_FORMAT_PDF);

// Create the output
$out = new java("java.io.ByteArrayOutputStream");
$options->setOutputStream($out);
$task->setRenderOption($options);
$task->run ();
$task->close();

} catch (JavaException $e) {
    echo $e; //"Error Calling BIRT";

}


// Return the generated output to the client
echo java_values($out->toByteArray());


?>

该报告在 Internet Explorer 8.0 中完美显示,因为它触发了 Adob​​e Acrobat 插件。问题是当我在 Mozilla Firefox 3.5.4 和 Google Chrome 4.0.233 中打开报告时,它向我显示了 pdf 文件的二进制字符串内容,而不是触发 Adob​​e Acrobat 插件。

我通过将 pdf 文件放在 htdoc 文件夹中并从 Firefox 和 Chrome 调用它来检查这一点,它工作得很好。但为什么标题不适用于报告?

*还有为什么标题只适用于 IE 8.0?我需要在所有主要浏览器中查看报告

4

1 回答 1

1

内容类型应为“应用程序/pdf”

(或“application/x-pdf”,用于更新的 pdf 格式)

我认为如果你改变

header("Content-type: text/html");
to
header("Content-type: application/pdf");

在上面的代码中,提到的浏览器应该开始正确地渲染 pdf 文档(如果它们是这样配置的),并且 IE 将继续正常工作(IE 有一些自动 MIME 类型检测(基于前几百字节的内容),这是喜忧参半……)

于 2009-10-29T06:36:07.100 回答