views:

308

answers:

1

Hi fellow programmer

I have created this report using BIRT and 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());


?>

The report viewed perfectly inside Internet Explorer 8.0 as it triggered the Adobe Acrobat plugin. The problem is when I opened the report inside Mozilla Firefox 3.5.4 and Google Chrome 4.0.233 it showed me the binary string content of the pdf file, instead of triggering the Adobe Acrobat plugin.

I have checked this by putting a pdf file in the htdoc folder and call it from Firefox and Chrome, it worked just fine. But why the header wont work for the report?

*Also why the header only work for IE 8.0? I need the report to be viewed in all major browser

+1  A: 

Content-type should be "application/pdf"

(or "application/x-pdf", for more recent pdf formats)

I think that if you change

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

in the code above, the browsers mentioned should start rendering the pdf documents properly (provided they are so configured), and IE will continue working ok (IE has some Automatic MIME Type Detection (based on the first few hundred bytes of content), which is a mixed blessing...)

mjv
ahh my bad I was too quickly blame it on the browser. Thank you
Erwin