gpt4 book ai didi

java - 使用 PHP 将二进制流写入浏览器

转载 作者:可可西里 更新时间:2023-11-01 13:29:04 28 4
gpt4 key购买 nike

背景

尝试通过 PHP 将使用 iReport 编写的 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 );

非工作代码

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;

问题

如何去掉写入文件的中间步骤,直接写入浏览器,使PDF不被损坏?

更新

PDF 文件大小:

  • 工作:594778 字节
  • 非工作:1059365 字节

谢谢!

最佳答案

我以前在用 Java 编写时遇到过问题,因为它会使用 UTF-16。 http://zeronine.org/lab/index.php 中的函数 outputPDF使用 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;

关于java - 使用 PHP 将二进制流写入浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792953/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com