2016-07-15 19 views
1

私は文書管理プロジェクトに取り組んでいます。私はpdfからテキストを抽出したいと思います。どうすればこれを実現できますか?私はItextsharpを使ってローカルシステム上でpdfを展開していますitextsharpを使用してftpサーバー上のpdfファイルを抽出します

これは私がこの目的のために使用している関数です。パスは、それは例外

'ftp:\\###\index\500199.pdf not found as file or resource.' 

をスローFTPサーバパス

public static string ExtractTextFromPdf(string path) 
    { 
     using (PdfReader reader = new PdfReader(path)) 
     { 
      StringBuilder text = new StringBuilder(); 

      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       text.Append(PdfTextExtractor.GetTextFromPage(reader, i)); 
      } 

      return text.ToString(); 
     } 
    } 

である[###私のftpサーバれる]

+0

具体的な問題を明確にしてください。 –

+0

ftpでpdfからテキストを抽出したいのですが、問題は私が書いたときですPdfReader reader = new PdfReader(path)例外 'ファイルやリソースとして見つからないファイル' – Munavvar

+0

質問に追加情報を入れてください。 –

答えて

2

PdfReaderは、コンストラクタのオーバーロードの束を持っていますが、それらのほとんどは頼りますRandomAccessSourceFactoryは、渡されたものをStream形式に変換します。 stringを渡すときにはcheckedがディスク上のファイルで、それが、http://またはhttps://のいずれかのリンクとしてUriに変換できるかどうかがチェックされます。これらのチェックのどれもがftpプロトコルを処理しないので、最終的にはlocal resource loaderになります。これはあなたのためにはうまくいきません。

あなた、あなたのstringそれが実際に動作しません明示的Uriだけに変換しようとすることができ、次のいずれか

//This won't work 
new PdfReader(new Uri(path)) 

iText tells .Net to use CredentialCache.DefaultCredentialsがリモートリソースしかし、それをロードするときので、これは動作しませんという理由があります概念はFTP世界には存在しません。

簡単に言えば、FTPを使用する場合は、ファイルを自分でダウンロードしたいと思うでしょう。彼らのサイズに応じて、それらをディスクにダウンロードするか、バイト配列をダウンロードしたいと思うでしょう。以下は、後者のサンプルです:

Byte[] bytes; 
if(path.StartsWith(@"ftp://")) { 
    var wc = WebRequest.Create(path); 
    using (var response = wc.GetResponse()) { 
     using (var responseStream = response.GetResponseStream()) { 
      bytes = iTextSharp.text.io.StreamUtil.InputStreamToArray(responseStream); 
     } 
    } 
} 

あなたはその後、PdfReaderコンストラクタにローカルファイルまたはバイト配列のいずれかを渡すことができます。

+0

@chirs Hassに感謝します。実際の問題は:私はしたいですいくつかの他のサーバーからpdfを抽出します。これを達成する方法はわかりません。この点について私に助言してください。ありがとうございます – Munavvar

+1

上記のコードは、FTP(HTTP(S)も動作します)を介して別のサーバーからファイル(PDF、その他)をダウンロードできるようにします。これは最初のステップであり、iTextとまったく無関係です。 2番目のステップは、最初のステップからバイト配列を取り出し、 'path'の代わりに' PdfReader'コンストラクタに渡すことです。 –

関連する問題