2013-10-29 367 views
24

我已經使用該標籤嵌入PDF文件。HTML嵌入PDF iframe

<iframe id="iframepdf" src="files/example.pdf"></iframe> 

這正常在Chrome,IE8 +,火狐等,但由於某些原因,當有些人在IE8查看,該文件正在下載,而不是嵌入。我知道這款瀏覽器已經過時,但它是我辦公室內的標準瀏覽器,因此網站必須爲此而設計。

有沒有人有任何想法,爲什麼發生這種情況,我該如何解決它,否則把一個錯誤消息,而不是讓文件下載?

回答

47

已下載它可能是,因爲沒有安裝Adobe Reader插件。在這種情況下,IE(無論哪個版本)不知道如何呈現它,它只會下載文件(例如Chrome,它有自己的嵌入式PDF渲染器)。

這就是說。 不是顯示PDF的最佳方式(不要忘記與移動瀏覽器(例如Safari)兼容)。某些瀏覽器將始終在外部應用程序(或另一個瀏覽器窗口)內打開該文件。我發現的最好和最兼容的方式有點棘手,但適用於我試過的所有瀏覽器(甚至相當過時):

保留您的< iframe>但不顯示PDF內部,它將填充HTML頁面由<object>標籤組成。爲你的PDF創建一個HTML頁面的包裝,它應該看起來像

<html> 
<body> 
    <object data="your_url_to_pdf" type="application/pdf"> 
     <embed src="your_url_to_pdf" type="application/pdf" /> 
    </object> 
</body> 
</html> 

當然,你還需要相應的插件安裝在瀏覽器中。如果您需要在移動設備上支持Safari,請查看this post

1st。爲什麼在<object>裏嵌套<embed>?你會找到答案here on SO。代替嵌套<embed>標記,您可能(應該)爲您的用戶(或內置查看器,請參閱下一段)提供自定義消息。現在<object>可以使用無後顧之憂和<embed>是無用的。

2nd。爲什麼選擇HTML頁面?因此,如果PDF查看器不受支持,您可以提供後備。內部查看器,純HTML錯誤消息/選項等...

檢查PDF支持很棘手,因此您可以爲您的客戶提供備用查看器,看看PDF.JS項目,這很不錯,但渲染質量 - 對於桌面瀏覽器 - 不如原生 PDF渲染器(我想在屏幕尺寸上我沒有看到移動瀏覽器有什麼區別)。

+0

有沒有如果安裝了Adobe Reader插件,y方式只顯示iframe,如果不是,則顯示錯誤消息? – user2931470

+0

是的...不使用「iframe」!在可以提供錯誤信息的地方使用「對象」(或者替代視圖,請參閱我的答案的最後部分)。 –

+0

這現在正在工作,但該文件是放大方式?我正在使用iframe,因爲這允許pdf適合div的寬度。 – user2931470

4

的iFrame

<iframe id="fred" style="border:1px solid #666CCC" title="PDF in an i-Frame" src="PDFData.pdf" frameborder="1" scrolling="auto" height="1100" width="850" ></iframe> 

對象

<object data="your_url_to_pdf" type="application/pdf"> 
    <embed src="your_url_to_pdf" type="application/pdf" /> 
</object> 
+1

現在如何在該對象上觸發打印,打印沒有定義? – Miguel

7

如果瀏覽器有一個PDF插件安裝它執行的對象,如果沒有它使用谷歌的PDF查看器來顯示它爲純HTML :

<object data="your_url_to_pdf" type="application/pdf"> 
    <iframe src="https://docs.google.com/viewer?url=your_url_to_pdf&embedded=true"></iframe> 
</object> 
+0

這一個會像魅力一樣工作,但我得到了大量'無法預覽'使用文檔 – Ancinek

+0

@Ancinek你有沒有一個例子? – mgutt