PHP kullanarak tarayıcıya ikili akışı yazın

2 Cevap java

Background

Tarayıcıya PHP ile İReport kullanılarak yazılmış bir PDF rapor akışı çalışılıyor. Genel bir sorun: nasıl ikili veriler PHP kullanarak tarayıcıya yazıyorsunuz?

Working Code

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

Non-working Code

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;

Question

PDF bozuk değil ki nasıl dosyaya yazma orta adımını dışarı alabilir ve doğrudan tarayıcıya yazmak?

Update

PDF dosya boyutları:

  • Çalışma: 594.778 bayt
  • Non-Çalışma: 1059365 bayt

Teşekkür ederiz!

2 Cevap

UTF-16 kullanmak gerekir, çünkü ben daha önce Java yazmakta problem yaşadım. outputPDF http://zeronine.org/lab/index.php kullanımlar java_set_file_encoding("ISO-8859-1"); dan işlev. Böylece:

  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;

Sadece çıktı yazmak. Emin olun:

  • Doğru başlıklar ayarlanmıştır
  • başka hiçbir karakter yanlışlıkla (bu boşluk dahil) önce veya ikili sonra basılmıştır.