« DelphiとLazarusでのドロップファイル処理の違い | トップページ | Delphiでのメモリリーク »

2017.05.13

DelphiでiFilterを使用する

Migrep2ではxdoc2txtを使用してOfficeファイルやPDFファイルのテキスト検索を行っていますが、MicrosoftやAbobe等が公開しているiFilterを使ってみようと思い立ちました。で、ネット上を検索して見つけたRussell Libby氏が公開されているユニットを見つけ、これをもとにコンポーネント化して見ました。

使い方はとてもシンプルで、

procedure TForm1.Button1Click(Sender: TObject);
var
txtbuff: string;
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.Clear;
iFilterText1.ReadText(OpenDialog1.FileName, txtbuff);
Memo1.Lines.Text :=txtbuff;
end;
end;

これだけでTmemoに指定したファイルのテキストを表示できます(そのファイル形式のiFilterがお使いのWindows環境にインストールされていればですが)。

例えば、以下のPDFファイルを読み込むと、
Pdf

このようにテキストが読み込まれます。
Ifilter

尚、Windowsが64bit環境の場合はiFilterも64bit用のインストールが必要で、Delphiの作成するターゲットプラットホームを64ビットWindowsにして、64bit版の実行ファイルにする必要があります。
#Delphi XE2 Pro版で実行ファイルを作成して確認

で、一旦はMiGrep2にiFIlterを使用する機能を追加したのですが、テキスト変換速度がxdoc2txtよりも遅いことや32bit/64bit環境の対応を考えると、やっぱりやめようかなと思ったりもしています。64bit Windows用のiFilterラッパーを準備する手もあるかとは思いますが、そこまでして実装するだけのメリットがあるのかどうか悩ましいところです。


「iFilterコンポーネントとサンプルプロジェクト」をダウンロード


|

« DelphiとLazarusでのドロップファイル処理の違い | トップページ | Delphiでのメモリリーク »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/22406/65272307

この記事へのトラックバック一覧です: DelphiでiFilterを使用する:

« DelphiとLazarusでのドロップファイル処理の違い | トップページ | Delphiでのメモリリーク »