2016-07-09 9 views
1

PDF.jsを使用して選択したPDFファイルの内容を解析するクライアント側のアプリケーションを構築していますが、 。PDF.jsは、各ページのtextContentとしてドキュメント全体のテキストコンテンツを返します

すべてがうまくいっているようです。コードはPDF.js PDFオブジェクトを正常に読み込み、ドキュメントのページをループし、各ページのtextContentを取得します。

以下のコードを実行してブラウザツールでデータを検査した後、各ページのtextContentオブジェクトに関連ページのテキストだけでなく、ドキュメント全体のテキストが含まれていることに気づきます。

誰もこれまでに経験したことがありますか?

私が引っ張っ(および変更)私はここにPDF.jsの記事から使用しているコードの大部分、そしてそれはかなりストレートフォワードだと予想されるように、この問題とは別に、正確に実行するようだ:

testLoop: function (event) { 
    var file = event.target.files[0]; 
    var fileReader = new FileReader(); 
    fileReader.readAsArrayBuffer(file); 
    fileReader.onload = function() { 
     var typedArray = new Uint8Array(this.result); 
     PDFJS.getDocument(typedArray).then(function (pdf) { 
      for(var i = 1; i <= pdf.numPages; i++) { 
       pdf.getPage(i).then(function (page) { 
        page.getTextContent().then(function (textContent) { 
         console.log(textContent); 
        }); 
       }); 
      } 
     }); 
    } 
}, 

さらに、返されるtextContentオブジェクトのサイズは、すべてのオブジェクトが共通の最後のオブジェクト(ドキュメント全体の最後のビット)を共有していても、ページごとにわずかに異なります。

ここでは、オブジェクトがすべて同様のサイズであることを示すために私のインスペクタのイメージがあります。

インスペクタのオブジェクトを手動で検査すると、ページ1のデータは実際には約140個の配列アイテムのみで構成されていることがわかります。なぜそのページのオブジェクトに〜700かそこらですか?そしてそのバリエーションはなぜですか?

enter image description here

+0

商品とは何ですか?配列やpdfを見ることなく、確かめるのは難しいですが、項目が単純な単語のトークンではない文書間で実行しました。 (良い、悪い、無作為な、無関係な)理由のために、pdfは空白や中間語に何度も分割するような方法で構築することができます。私はいつも配列に加わり、自分のトークン化を実行しました。単純な '.join()。split(/ \ s + /)'は試してみる価値があります。 – user01

+0

この回答は、PDF.jsを使用してテキストの内容を抽出する方法に関する非常に良い例です:http://stackoverflow.com/a/20522307/6481438 – GCSDC

+0

@ user01返信ありがとうございます - 構成されているPDFについてのあなたの意見は、たくさん! – ineedhelp

答えて

0

ここでの問題は、私が解析しようとしているPDFドキュメントのフォーマットであるように見えます。 PDFには政府の記録が表形式で含まれていますが、これは現代のPDF標準に従って作成されていないようです。

私は、適切に構成されているとわかっているさまざまなPDFファイルでスクリプトをテストしました。返されたpage textContentオブジェクトは、ページの内容に基づいて正しく分割されています。私がこれまで想像したとして誰が将来的にこの問題に遭遇した場合には

、限り、問題に対処するには、少なくとも2つの方法があります。

  1. はどういうわけかへの不正な形式のPDFを再フォーマット更新された標準を使用して処理します。私はこれをどうやって行うのか分からず、現実的ではないと確信しています。

  2. 返されるPageのtextContentオブジェクトのうち最大のものを選択します(ドキュメントの全文が多かれ少なかれ)。そのtextContentオブジェクトに対して操作を行います。

関連する問題