2012-03-23 35 views
17

我訪問現有WCF Web服務使用jQuery的AJAX方法(它返回一個PDF作爲字節流)瀏覽器中的PDF流。如何顯示使用javascript

當調用服務完成後,我結束了含有PDF JavaScript變量(變量在二進制數據,啓動「%PDF-1.4 ...」)。

我想顯示這個PDF在一個新的瀏覽器窗口,但我有困難,實現這一目標。

我的研究,到目前爲止表明,我也許能達到我想要使用的數據是什麼:URI,所以我的代碼Ajax調用完成時被稱爲如下:

function GotPDF(data) 
{ 
    // Here, data contains "%PDF-1.4 ..." etc. 
    var datauri = 'data:application/pdf;base64,' + Base64.encode(data); 
    var win = window.open("", "Your PDF", "width=1024,height=768,resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no"); 
    win.document.location.href = datauri; 
} 

這將導致一個新的瀏覽器窗口打開,但內容爲空白。有趣的是,如果我使用file:uri(例如file:// c:/tmp/example.pdf)將我的瀏覽器(IE9)指向本地磁盤上的現有文件,那麼我會得到相同的結果,即一個空白窗口。

有沒有什麼方法可以顯示此PDF數據?你寫不顯示任何內容,只需打開一個空白窗口

回答

11

代碼(location.href是用於瀏覽歷史,而不是頁面的內容的哈希值)。

要顯示你有一個PDF,至少,以下選項:

×嵌入embedobject標籤裏面的PDF閱讀器。它可能不像您想象的那樣簡單,請參閱this post以獲取示例代碼。總之,應該是這樣的:

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

這是基本的代碼,但我建議遵循什麼我在鏈接的帖子說,如果你需要更高的跨瀏覽器兼容。

×將文件下載到本地計算機(只需添加產生該文件的Web服務方法的完整URL,不要忘了添加適當的Content-Disposition在頭)。

×將文件打開到新的瀏覽器窗口中。創建一個正常a標記,因爲您指向要在新窗口中顯示的聯機PDF文件。將href更改爲javascript:functionName,並在該函數中生成將用於調用Web服務方法的URI。

(即使編碼),不管你會做,不要忘記設置適當的MIME類型在你的迴應此外,您的方法不應該返回一個字節流,但對你的網頁瀏覽器的有效響應。

4

如果您正在使用<embed><object>標籤顯示從服務器流式PDF文件(或其他文件類型),如:

<object data="SomeServlet?do=get_doc&id=6" type="application/pdf" width="800" height="400"> 

確保服務器發送正確的HTTP content-disposition值,在這種情況將是inline