2017-02-13 5 views
1

埋め込みタグを使用してPDFを表示しようとしています。 PDFは.NETのHTTPHandlerからロードされます。埋め込みタグ経由でPDFを読み込む方法を調べるには

PDFの表示はうまく動作しますが、ファイルの読み込みと表示が完了したら、JavaScript機能を実行できるようになっていることを知りたいと思います。

onloadeddata、onload、onloadstart、onendおよびonplayのイベントハンドラでバインドしようとしましたが、いずれもヒットしませんでした。

私ができることは可能ですか?もしそうなら、私はどんなイベントを捕まえることができますか?

<embed [email protected] id="pdfiFrame" type="application/pdf" alt="pdf" style="width: 100%; height: 99.4%;" frameborder="0" pluginspage="http://www.adobe.com/products/acrobat/readstep2.html" onloadeddata='tryThis;' onload="tryThis;" onloadstart="tryThis;", onended="tryThis;" onplay="tryThis;"/> 

function tryThis(arg) { 
    alert("here = " + arg); 
} 

パスは、MVC Razorビューの変数で定義されています。

私は結果をキャッシュしているので、ハンドラ自体から何かを行うことはオプションではないので、ハンドラは同じファイルに対してもう一度ヒットしません。

答えて

0

PDFファイル全体が完全に読み込まれることはありません。特に、PDFビューアがAdobe Readerの場合は、「高速Webビュー」を利用できるPDFビューアでも同様です。 PDFファイルはランダムアクセスであり、適合するビューアは、要求されたページを表示する必要があるバイトのみをサーバから要求する。そのため、ブラウザでPDFを開くことができます。たとえば、1000ページのドキュメントの500ページに、すべてのものがダウンロードされるのを待たずにすぐにジャンプすることができます。 Webに最適化されたPDFは、ではなく、に特別に設計されています。

つまり、HTMLのembed要素のsrcプロパティを設定せずに、AjAX(または何か)を使用してPDFをblobとしてフェッチし、「done」イベントが発生するとsrcプロパティを設定できます。その後、のファイル全体がの前に表示されていることがわかります。

+0

必ずしもすべてを読み込んでいるわけではないという面白い点があります。私が本当にやりたいことは、ドキュメントが表示できる状態になるまで、ページ上にモーダル進捗インジケータを置くことです。これは、最初のページが表示されていることを意味するものではありません。この部分をどのように行うかについての考えはありますか? – ChrisC

+0

Adob​​e Readerはこれを行うことになりますが、ウェブに最適化されていない限り、ほとんどのことを推測しており、デフォルトのPDFビューアである可能性はかなり低くなっています。問題は、典型的なPDFビューアは、特定のページにファイルのどのバイトが必要かを知らないということです。オブジェクトはランダムアクセスであり、ページオブジェクトは、そのページに共有されているか、またはそのページに固有の任意の数の他のオブジェクトを参照することができる。ビューアは、オブジェクトが他のオブジェクトのセットを参照するときにそれを参照するだけです。 – joelgeraci

関連する問題