2

ブラウザプラグインなしでPDFファイルを表示したいGWTフレームワーク上に構築されたアプリケーションがあり、現在それを行うためにPDF.jsを評価しています。問題は、私が何をしても、GWT アプリケーションのキャンバスに PDF ファイルをレンダリングできないことです。背景を教えてください

  1. PDF ファイルのチケットがサーバーから取得されます。
  2. PDF.js ファイル チケットはサーバーから取得され、このスクリプトを使用して HTML 本文に埋め込まれます。

    var head= document.getElementsByTagName('body')[0];
    var script= document.createElement('script');
    script.type= 'text/javascript';
    script.setAttribute('charset', 'UTF-8');
    script.src=url;
    head.appendChild(script);
    
  3. Canvas 要素がビューで作成され (ここでは googles MVP パターンを使用)、スクリプトに対して JSNI 呼び出しが行われ、上記の関数を使用して HTML 本文に PDF.js が埋め込まれます。次に、スクリプトは、PDF.js ファイルで定義された PDFJS クラスで動作する関数を呼び出します。

  4. キャンバスに PDF ファイルをレンダリングする関数は次のとおりです。

    PDFJS.disableWorker = true; 
    PDFJS.getDocument(url).then(function getPdfHelloWorld(pdf) 
    {
        pdf.getPage(1).then(function getPageHelloWorld(page) 
        {
            var scale = 1.25;        
            var viewport = page.getViewport(scale);
            canvas.height = viewport.height;
            canvas.width = viewport.width;
            page.render({canvasContext: context, viewport: viewport});
            page.startRendering(context);
            alert("Finished rendering");  
        });
    });
    
  5. キャンバスとコンテキストは View クラスで作成され、javascript に渡されます。

ここでの問題は、JSNI への呼び出しが行われた後、すべての変数のアラートを表示することです。ブラウザは、電話アラート(PDFJS)を発信するとき以外はアラートを表示します。これは、PDFJS 変数がスクリプトで認識されていないことを示しています。これにより、PDF.js ファイルがビューに正しく埋め込まれていないか、何か不足していると思われます。

注: 私はほとんどの例をネット経由でダウンロードしましたが、それらのほとんどはローカルで動作します。つまり、PDF.js ファイル パスを変更してローカル コピーを取得でき、HTML は引き続き PDF をレンダリングします。PDFJS 変数の読み取りに問題はありません。これらの問題が見られるのは、この GWT アプリケーションだけです。

誰でも何が起こっているのか手がかりを持っていますか。あなたの助けは非常に高く評価されます。

ありがとう

4

2 に答える 2

4

あなたの問題は、スクリプトを挿入して非同期にロードすることですが、ロードされるまで待たずに使用を開始することです。

を使用ScriptInjector.FromUrlしてスクリプトを挿入し、残りのコードCallbackonSuccess.

xsiframeIlya によって提案されているように、同期的にスクリプトを挿入する (HTML ホスト ページまたは GWT モジュール記述子にスクリプトを追加する —注: リンカーでは機能しません—) ことも、もちろん解決策の 1 つです。

于 2012-11-30T11:54:01.663 に答える
3

.gwt.xml ファイルに追加<script src="PDF.js"/>して、PDF.js ファイルをパブリック ディレクターに配置してみてください。

于 2012-11-30T10:39:31.180 に答える