2010-05-08 15 views
6

पृष्ठभूमिब्राउज़र को बाइनरी धारा पीएचपी

का उपयोग कर ब्राउज़र को पीएचपी के माध्यम से यात्रा करना का उपयोग करके लिखा एक पीडीएफ रिपोर्ट स्ट्रीम करने के लिए कोशिश कर रहा है लिखें। सामान्य समस्या यह है कि आप 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; 

प्रश्न

मैं कैसे फ़ाइल के लिए लिख के बीच कदम बाहर ले जाना और लिख सकते हैं सीधे ब्राउज़र पर ताकि पीडीएफ हो दूषित नहीं है?

अद्यतन

पीडीएफ फाइल आकार:

  • कार्य: 594,778 बाइट्स
  • गैर काम: 1,059,365 बाइट्स

धन्यवाद!

+0

सभी हेडर है कि आप पहले काम से बाहर काट जोड़ने करता है? –

+0

@ कैसी: हेडर हमेशा दोनों मामलों में समान रहे हैं। संशोधित समस्या देखें। –

+0

अहह जलवायु रिपोर्ट है! कोई चिंता नहीं, यह सामान्य है। वे हमेशा * बग्गी *;) –

उत्तर

2

मैंने पहले जावा से लिखने में समस्याएं अनुभव की हैं क्योंकि यह यूटीएफ -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; 
+0

आप सही हैं। क्षमा करें मैंने कोशिश नहीं की। किसी भी मामले में, मैंने file_get_contents के माध्यम से पीडीएफ लाल के साथ अपना कोड आजमाया और समस्या के बिना काम गूंजता है। एक घंटी बजने वाली एकमात्र चीज जावा (PHP) का मिश्रण है (मुझे लगता है)।मैंने पहले जावा से लिखने में समस्याएं अनुभव की हैं क्योंकि यह यूटीएफ -16 का उपयोग करेगा जिससे स्ट्रिंग में बहुत सारे शोर/हवा डालेंगे। शायद, एक फ़ाइल को लिखना इस एन्कोडिंग को समाप्त करता है और यह आकारों में अंतर बताता है और यदि आप इसे सीधे करते हैं तो यह क्यों काम नहीं करता है। मेरे पास PHP-Java पुल इंस्टॉल नहीं है इसलिए मुझे खेद है कि मैं अधिक अंतर्दृष्टि प्रदान नहीं कर सकता। – Paolo

+0

अरे ... वास्तव में चारों ओर घूमते हुए मुझे लगता है कि यह हो सकता है। इस की जाँच करें: http://www.php.net/manual/es/function.pdf-utf16-to-utf8.php – Paolo

+1

इससे भी अधिक (खेद ... गूगल में अच्छी चीजें खोजने एक बार आप एक सुराग रखने क्या देखना है): इसे जांचें: http://zeronine.org/lab/index.php/Using_Jasper_report_with_PHP विशेष रूप से आउटपुट पीडीएफ नामक फ़ंक्शन। यह java_set_file_encoding ("आईएसओ -885 9 -1") का उपयोग करता है; और फिर कुछ अतिरिक्त जादू :) आशा इस मदद करता है – Paolo

0

आप बस आउटपुट लिखते हैं।

  • सही हेडर स्थापित किए गए हैं
  • कोई अन्य चरित्र गलती से पहले या द्विआधारी के बाद मुद्रित किया गया है (इस खाली स्थान के शामिल है): होना सुनिश्चित करें।
+0

हेडर मेरे लिए सही लग रहे हैं। कोई अन्य पात्र नहीं लिखा गया है। –

+1

और आकस्मिक न्यूलाइन के बारे में जागरूक रहें। यह फाइलों को शामिल करने के बाद newlines के साथ होता है। –

संबंधित मुद्दे