2012-10-11 111 views
2

在Chrome下工作,但iframe中的內容是空白在Firefox 15和IE 9流PDF到iframe中使用dataurl - 只能在Chrome

<html> 
    <head></head> 
    <body> 
    <p>this n that</p> 
    <iframe type="application/pdf" 
      width="95%" 
      height="95%" 
      src="data:application/pdf;base64,<?php echo base64_encode(file_get_contents('memlist.pdf'));?>"> 
     Oops, you have no support for iframes. 
    </iframe> 
    <p>this n that</p> 
    </body> 
</html> 

這個問題似乎是dataurl。如果我將它改爲src =「memlist.pdf」,那麼它可以在任何地方使用。 PDF大小爲75kb。

daturls是否存在一些(當前)瀏覽器限制?

(我試圖避免回調到服務器,因爲一些認證併發症的HTTP URL)

回答

0

我只是複製源逐字,交換在PHP輸出編碼PDF中的部分對於我從一個在線編碼器返回的字符串。

原始PDF是141KB,而編碼字符串是194065個字節 - 使相當大的網址..

這工作就好在Chrome的是,正如它給你的。同樣,歌劇院也不會有這個問題。

因此,我從iframe標記中刪除了type ='application/pdf'屬性。現在Chrome和Opera都會顯示該文件,而IE9仍然拒絕。

我試圖通過JavaScript更改src(以防萬一),通過Opera/Chrome沒有問題,但仍然沒有去與IE瀏覽器。

過去,我用php創建了pdf,並簡單地將iframe的src設置爲php文件的url,並使用GET參數完成。這只是正常工作與IE6(和歌劇,鉻和FF - 從來沒有嘗試過在移動設備上,它結束了前5年)

一些舊的,例如代碼,我希望能幫助:

( 1)Javascript來插入的IFRAME pdfTimetable.php

function showPdfTt(studentId) 
{ 
    var url, tgt; 
    title = byId("popupTitle"); 
    title.innerHTML = "Timetable for " + studentId; 
    tgt = byId("popupContent"); 
    url = "pdftimetable.php?"; 
    url += "id="+studentId; 
    url += "&type=Student"; 
    tgt.innerHTML = "<iframe onload=\"centerElem(byId('box'))\" src='"+url+"' width=\"700px\" height=\"500px\"></iframe>"; 
} 

輸出部分

$pdfStr = $pdf->output(); 
$myFile = fopen("lastRequested.pdf", "wb"); // just here for debugging purposes 
fwrite($myFile, $pdfStr); 
fclose($myFile); 

$pdf->ezStream(); // send output to stdout (the browser) - uses fpdf for generation 
exit; 

fpdf的輸出部分

 if(php_sapi_name()!='cli') 
     { 
      //We send to a browser 
      header('Content-Type: application/pdf'); 
      if(headers_sent()) 
       $this->Error('Some data has already been output, can\'t send PDF file'); 
      header('Content-Length: '.strlen($this->buffer)); 
      header('Content-Disposition: inline; filename="'.$name.'"'); 
      header('Cache-Control: private, max-age=0, must-revalidate'); 
      header('Pragma: public'); 
      ini_set('zlib.output_compression','0'); 
     } 
     echo $this->buffer; 
     break;