2010-05-08 34 views
6

nềnViết dòng nhị phân để trình duyệt sử dụng PHP

Đang cố gắng để dòng một báo cáo PDF được viết bằng iReport qua PHP để trình duyệt. Vấn đề chung là: làm thế nào để bạn viết dữ liệu nhị phân cho trình duyệt bằng cách sử dụng PHP?

Mã Working

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

không làm việc Mã

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; 

Câu hỏi

Làm thế nào tôi có thể đưa ra các bước giữa văn bản cho các tập tin và viết trực tiếp đến trình duyệt để PDF không bị hỏng?

Cập nhật

PDF tập tin kích thước:

  • làm việc: 594.778 byte
  • không làm việc: 1.059.365 byte

Cảm ơn bạn!

+0

Có thêm tất cả các tiêu đề bạn đã cắt ra khỏi tác phẩm đầu tiên không? –

+0

@Casey: Tiêu đề luôn giống nhau trong cả hai trường hợp. Xem vấn đề đã sửa đổi. –

+0

Ahh đó là báo cáo khí hậu! Đừng lo, điều đó bình thường. Chúng luôn luôn * buggy *;) –

Trả lời

2

Trước đây tôi đã gặp sự cố khi viết từ Java vì nó sẽ sử dụng UTF-16. Hàm outputPDF từ http://zeronine.org/lab/index.php sử dụng java_set_file_encoding("ISO-8859-1");. Do đó:

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; 
+0

Bạn nói đúng. Xin lỗi tôi đã không thử nó. trong mọi trường hợp, tôi đã thử mã của bạn bằng PDF đỏ thông qua file_get_contents và công việc echo mà không có vấn đề gì. Điều duy nhất đổ chuông ở đây là (tôi nghĩ) sự kết hợp giữa Java và PHP.Tôi đã từng gặp vấn đề khi viết từ Java vì nó sẽ sử dụng UTF-16 do đó chèn rất nhiều nhiễu/không khí trong chuỗi. Có lẽ, ghi vào một tập tin loại bỏ mã hóa này và điều này giải thích sự khác biệt về kích thước và lý do tại sao nó không hoạt động nếu bạn làm điều đó trực tiếp. Tôi không có cài đặt cầu PHP-Java nên xin lỗi tôi không thể cung cấp thêm thông tin chi tiết. – Paolo

+0

Hey ... thực sự googling xung quanh tôi nghĩ rằng điều này có thể được nó. Hãy xem điều này: http://www.php.net/manual/es/function.pdf-utf16-to-utf8.php – Paolo

+1

Thậm chí nhiều hơn (xin lỗi ... tiếp tục tìm kiếm nội dung hay trong Google khi bạn có một đầu mối về những gì cần tìm): Kiểm tra điều này: http://zeronine.org/lab/index.php/Using_Jasper_report_with_PHP Đặc biệt là hàm gọi là outputPDF. Nó sử dụng java_set_file_encoding ("ISO-8859-1"); và sau đó một số phép thuật bổ sung :) Hy vọng điều này sẽ giúp – Paolo

0

Bạn chỉ cần viết đầu ra. Hãy chắc chắn rằng:

  • tiêu đề chính xác đã được thiết lập
  • không có nhân vật khác đã được vô tình in trước hoặc sau khi nhị phân (kể cả khoảng trắng).
+0

Các tiêu đề trông chính xác với tôi. Không có nhân vật nào khác được viết. –

+1

Và hãy lưu ý đến các dòng mới vô tình. Điều này xảy ra với các dòng mới sau?> Trong các tệp bao gồm. –

Các vấn đề liên quan