2015-11-18 17 views
7

私は今日、これについて多くの異なるSOの投稿を見てきました。ブラウザでPDFをレンダリングする

ブラウザ内にPDFドキュメントを表示する必要があるアプリケーションがあります。このアプリケーションは、IE(11+)でも動作する必要があります。

ここには、srciframeが問題なく動作します。ような何か:

<iframe src="www.myurl.com/thedocument"></iframe> 

しかし、www.myurl.com/thedocumentは現在のOAuthで保護されています。つまり、www.myurl.com/thedocumentに適切な認証ヘッダーの資格情報を要求する必要があります。

これは、私がwww.myurl.com/thedocumentをajax経由でリクエストしなければならないことを意味します。 ajaxリクエストは、base64、またはドキュメントを含むバイト[]を返します。

IEはPDFをレンダリングするためのデータURIをサポートしていないため、私のajaxリクエストからの応答をiframeにスプライン表示できません。

だから今私は立ち往生しています。

アイデア?

答えて

3

一つの選択肢はPDF.jsを使用することです

おかげで、support for IE10+とHTML5のキャンバスにPDFファイルをレンダリングするためのJavaScriptライブラリ。ライブラリは、ajaxリクエストの結果から生成されるTypedArray(例えばUint8Array)からのPDFデータの読み込みをサポートしています。

私は、base64でエンコードされたバイナリに格納された1ページのPDFを表示する短い例hereを用意しました。 BASE64変換の実行を回避するには、TypedArrayは、XMLHttpRequestの応答から直接取得することができます

function reqListener() { 
    var byteArray = new Uint8Array(this.response); 
    PDFJS.getDocument(byteArray).then(function(page) { 
     // .... 
    }); 
} 

var req = new XMLHttpRequest(); 
req.addEventListener("load", reqListener); 
req.responseType = "arraybuffer"; 
req.open("GET", "http://www.example.com/example.pdf"); 
req.send(); 

あなたはネイティブPDFビューアに期待される機能(印刷など)ライブラリはexample viewerを含んをサポートすることあなた自身の目的に適応することができます。

+0

PDF.jsはすばらしい図書館です。しかし、pdfのすべてのページを一度にレンダリングすると、図書館ではあまりうまく行かないことになります(クロムのデータURLをレンダリングすると、pdfのすべてのページが表示されます)。 これはお勧めです。残念ながら、それは私が探している特定の機能を持っていません。 – Jeff

+1

問題ありません。それらをレンダリングするのが最も効果的な方法ではありませんが、テキストが重いドキュメントの場合はそれほど悪くはありません。もしあなたがまだそれをしていないのであれば、[デモ](https://mozilla.github.io/pdf.js/web/viewer.html)であなたのpdfsを開いて、それが傷ついているかどうかを調べることができます。 – tmw

+3

@Jeff IEではPDF.jsまたはiframeです。私の研究によると、iframeを使用することはできません。IEはデータuri iframeをサポートしていないので、ここではあまり選択肢がありません。 – Sheepy

関連する問題