2012-06-28 27 views
15

私はちょうどpdf.jsを使い始めています。私は生のpdfデータからpdfファイルを読み込もうとしています。私はコードを見てきました:pdf.jsを使用して生データからPDFを表示

PDFJS.getPdf('cwpdf.pdf', function getPdfHelloWorld(data) { 
    ... 
} 

しかし、生のPDFデータからではなく、ファイル名からPDFファイルをロードする方法がある場合、私は疑問に思って。これは可能ですか?

答えて

5

私は一緒にいくつかの完全なコードを入れて、以下の解決策の問題を見つけることができた:

var int8View = new Uint8Array(...); //populate int8View with the raw pdf data 
PDFJS.getDocument(int8View).then(function(pdf) { 
} 

私が走った。この溶液を用いて、他のユーザーが見た問題(@MurWadeと@ user94154) - stream must have dataエラーメッセージ。

var int8View = new Uint8Array(...); 

データが期待形式ではないので、データを含む配列が正しく、作成されません。問題は次の行にあるように見えます。したがって、この行は場合によっては機能しますが、一般的な場合には機能しない可能性があります。

私は完全なソリューションをまとめました。これはうまくいくようです。 PDFファイルをロードし、生のPDFストリームに変換します。これはテスト目的のためのものですが、実際の例では、PDFストリームはおそらく別の方法で受信されます。デバッガでストリームを調べると、プレーンテキストとして表示されます。以下は、このサンプルを動作させるためのコードの要点です。生のPDFストリームを配列に変換する代わりに、それをデータに変換します。

var docInitParams = { data: pdfraw }; 

次に、データの読み込みを続けます。以下は、標準の生のPDFストリームを読み込んで表示する方法の完全な作業サンプルです。私は、JSのhello worldサンプルを出発点としてPDFを使用していました。コメントが必要な場合はコメントにお知らせください。

'use strict'; 
 

 
PDFJS.getDocument('helloworld.pdf').then(function(pdf) { 
 

 

 
    pdf.getData().then(function(arrayBuffer) { 
 
    var pdfraw = String.fromCharCode.apply(null, arrayBuffer); 
 

 
    var docInitParams = { 
 
     data: pdfraw 
 
    }; 
 
    PDFJS.getDocument(docInitParams).then(function(pdfFromRaw) { 
 
     pdfFromRaw.getPage(1).then(function(page) { 
 
     var scale = 1.5; 
 
     var viewport = page.getViewport(scale); 
 

 
     var canvas = document.getElementById('the-canvas'); 
 
     var context = canvas.getContext('2d'); 
 
     canvas.height = viewport.height; 
 
     canvas.width = viewport.width; 
 

 
     var renderContext = { 
 
      canvasContext: context, 
 
      viewport: viewport 
 
     }; 
 
     page.render(renderContext); 
 
     }); 
 
    }); 
 
    }); 
 
});

+0

私の元のものよりも完成しているので、この回答を受け入れてよかった! – Swiss

+0

ありがとう!私がそれを改善するために何かできるかどうか私に教えてください。 –

+0

@ user94154、上記の解決策はあなたの質問に答えていますか? –

2

他に誰も回答していないので、私は自分の所見を掲載します。私はそれを理解しました。生データからpdfファイルを読み込むことは可能です。これを行う方法は、pdfファイルが格納されている場所のURLの代わりにデータが格納されたUInt8Arrayを使用することです。これを行うには

例のコードは以下の通りです:

var int8View = new Uint8Array(...); //populate int8View with the raw pdf data 
PDFJS.getDocument(int8View).then(function(pdf) { 

} 
+0

私にとってこのdidntの仕事。私はエラー 'ストリームはデータを持っている必要があります ' – MurWade

+0

私は同じエラー@MurWadeを取得します。私はこれを修正することを愛しています*。 – user94154

+0

http://jsperf.com/string-to-uint8array – user94154

関連する問題