Dav*_*vis 6 php java fopen jasper-reports php-java-bridge
背景
尝试将使用iReport通过PHP编写的PDF报告流式传输到浏览器.一般的问题是:如何使用PHP将二进制数据写入浏览器?
工作守则
header('Cache-Control: no-cache private');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment, filename=climate-report.pdf');
header('Content-Type: application/pdf');
header('Content-Transfer-Encoding: binary');
$path = realpath( "." ) . "/output.pdf";
$em = java('net.sf.jasperreports.engine.JasperExportManager');
$result = $em->exportReportToPdf($pm);
header('Content-Length: ' . strlen( $result ) );
$fh = fopen( $path, 'w' );
fwrite( $fh, $result );
fclose( $fh );
readfile( $path );
Run Code Online (Sandbox Code Playgroud)
非工作准则
header('Cache-Control: no-cache private');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment, filename=climate-report.pdf');
header('Content-Type: application/pdf');
header('Content-Transfer-Encoding: binary');
$path = realpath( "." ) . "/output.pdf";
$em = java('net.sf.jasperreports.engine.JasperExportManager');
$result = $em->exportReportToPdf($pm);
header('Content-Length: ' . strlen( $result ) );
echo $result;
Run Code Online (Sandbox Code Playgroud)
题
我怎样才能找到写入文件的中间步骤并直接写入浏览器以便PDF不会损坏?
更新
PDF文件大小:
谢谢!
我以前在使用 Java 进行编写时遇到过问题,因为它使用 UTF-16。http://zeronine.org/lab/index.phpoutputPDF中的函数使用. 因此:java_set_file_encoding("ISO-8859-1");
java_set_file_encoding("ISO-8859-1");
$em = java('net.sf.jasperreports.engine.JasperExportManager');
$result = $em->exportReportToPdf($pm);
header('Content-Length: ' . strlen( $result ) );
echo $result;
Run Code Online (Sandbox Code Playgroud)