Запишите двоичный поток в браузер с помощью PHP

Фон

Попытка передать PDF потоком сообщает о записанном использовании iReport через PHP к браузеру. Общая проблема: как Вы пишете двоичные данные в браузер с помощью 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:

  • Работа: 594 778 байтов
  • Нерабочий: 1 059 365 байтов

Спасибо!

6
задан Dave Jarvis 9 May 2010 в 02:42
поделиться

2 ответа

Ранее я сталкивался с проблемами при написании текста из Java, потому что он использует UTF-16. Функция outputPDF из http://zeronine.org/lab/index.php использует 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;
2
ответ дан 17 December 2019 в 20:29
поделиться

Вы просто пишете вывод. Убедитесь, что:

  • были установлены правильные заголовки
  • никакие другие символы не были случайно напечатаны до или после бинарного файла (это включает пробельные символы).
0
ответ дан 17 December 2019 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: