TOP > pdfgrep ツール
概要
PDF専用のGREP検索ツールです。通常のソフトではPDF内のバイナリー化されたテキスト部分の検索は出来ません。当ツールはPDFのテキスト検索の結果を表示してくれます。
これ以降はWindows版の pdfgrep の事です。
特徴
- pdfgrepはGNUのgrepと互換性を持つようにしています。grepの多くのオプション(-r、-i、-n、-c)がサポートされています。
- 複数のPDF指定、フォルダ指定、下位フォルダ指定、除外指定での検索ができます。
- POSIXと同様にPerl互換正規表現(PCRE)をサポートしてます。
日本語の扱い
検索では出来ません。検索キーに2バイト文字(日本語)を使うと実行エラーになります。残念ですが。
001 >pdfgrep -nr --max-count 10 --include "A*.pdf" "注釈"
002 pdfgrep: Failed to remove accents: : Illegal byte sequence
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
但し、以下の作業を行えば検索結果に2バイト文字(日本語)は表示出来ます。
言語ファイルのインストール
① ココのサイトを開きます。そして「Poppler Encoding Data」と書かれている下に有る「poppler-data-0.4.7.tar.gz」の部分をクリックします。poppler-data-0.4.7.tar.gz ファイルがダウンロードできます。
② ダウンロードした poppler-data-0.4.7.tar.gz ファイルを解凍すると poppler-data-0.4.7 フォルダが有ります。それをpoppler にリネームします。
③ pdfgrep.exe の実行フォルダに「share」フォルダを追加します。その share フォルダの下に②のpoppler フォルダごと、そのままコピーします。
④ pdfgrep.exe で日本語が有るPDFファイルで検索テストをします。
>pdfgrep [半角の英数字の検索文字] in.pdf > list.txt
list.txt テキストに日本語が表示されていたら、インストールは成功です。メモ帳以外のUTL-8Nテキストを開けるエディタで開いてください。
Help の内容
001 >pdfgrep --help
002 Usage: pdfgrep [OPTION]... PATTERN FILE...
003 See 'pdfgrep --help' for more information
004
005 Search for PATTERN in each FILE.
006 PATTERN is an extended regular expression.
007
008 Options:
009 -i, --ignore-case Ignore case distinctions
010 -P, --pcre Use Perl compatible regular expressions (PCRE)
011 -H, --with-filename Print the file name for each match
012 -h, --no-filename Suppress the prefixing of file name on output
013 -n, --page-number Print page number with output lines
014 -c, --count Print only a count of matches per file
015 -C, --context NUM Print at most NUM chars of context
016 --color WHEN Use colors for highlighting;
017 WHEN can be `always', `never' or `auto'
018 -p, --page-count Print only a count of matches per page
019 -m, --max-count NUM Stop reading after NUM matching lines (per file)
020 -q, --quiet Suppress normal output
021 -r, --recursive Search directories recursively
022 -R, --dereference-recursive Likewise, but follow all symlinks
023 --help Print this help
024 -V, --version Show version information
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
形式
pdfgrep [OPTION]... PATTERN FILE...
OPTION
基本的にオプションは省略形とフル文字の二通りが有ります。「-i」は「--ignore-case」と同じです。
- 省略形は前にハイフンが1つ「-」付きます。
複数のオプションをまとめて1つのハイフンの後に続けることが出来ます。
例:頁番号の表示、ファイル名の表示、マッチ件数で停止(10個)
「-n -H -m」 = 「-nHm」 - フル文字は前にハイフンが2つ「--」付きます。
複数のオプションは一つ以上の半角の空白を入れて続けれます。
例: 頁番号の表示、ファイル名の表示、マッチ件数で停止(10個)
「 --page-number --with-filename --max-count 10」
例: pdfgrep --page-number --with-filename --max-count 5 aa.pdf と同じ
>pdfgrep -nHm 5 PDF aa.pdf
aa.pdf:5: fromPDFConverters
aa.pdf:13: Embedded PDF
aa.pdf:13: Embedded PDF
aa.pdf:28: PDF
aa.pdf:28:Acrobat PDF
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
-i, --ignore-case
文字列のうち1バイト英字の大文字小文字を区別しません。
注記:「--pcre」オプション使用時のみ指定可能になります。「--pcre」オプション未使用時は無視されます。つまり、その時は常に大文字小文字を区別しません。
-P, --pcre
Perl互換の正規表現を使用して検索文字列を指定します。
-H, --with-filename
ファイル名を表示します。
注記:「--include」オプション 使用時は使えません。
-h, --no-filename
ファイル名を表示しません。
-n, --page-number
頁番号を表示します。
-c, --count
PDFファイル単位で一致した総数のみを表示します。
-C, --context NUM
表示文脈の前後の行を出力します。NUMはデフォルト2です。
注記:↑ この説明は間違いです。pdfgrep の場合は一致した場所の前後の文字数として動作します。動作もやや意味不明なところが有ります。よって、このオプションの使用を推奨できません。
--color WHEN
ハイライトの色を使用します。
注記:実際は使用できません。
-p, --page-count
ページ単位で一致した数だけを表示します。
-m, --max-count NUM
PDFファイル単位で一致した行の数が NUM に達したら、そのファイルの検索を停止します。複数のファイルが対象の場合は次のファイルを検索に行きます。
-q, --quiet
すべての通常の出力を抑える。エラーのみ表示されます。 -s や --no-messages オプションも参照してください.
-r, --recursive
コマンドのカレントフォルダに対し,そのフォルダ下の全てのファイルを処理します.--includeと--excludeによって対象PDFは制限されます。--recurseは --directories と同じです。
-R, --dereference-recursive
-r と同じですが、全てのシンボリックリンクを対象にします。
注記:Windowsではシンボリックリンクでは無く、ショートカットなので結果的に -r と同じ動作になりました。
--help
簡単な説明を表示します。
-V, --version
バージョン情報を表示します。
HELPに表示されないOPTION
pdfgrep --help に表示されないオプションが存在します。これ以降はそのオプションを紹介します。
-F, --fixed-strings
パターン部分を正規表現ではなく固定文字列での検索を行います。
正規表現文字を含む文字列をgrepするときは -F オプションを使います。
-o, --only-matching
パターンと一致する部分のみを表示します。同じ行の前後の文字は表示しません。
--exclude=<string>
検索対象とするPDFファイルを排除します。ワイルドカードが使用できます。複数を指定できます。「--exclude <string>」でもOK。
例:A*.pdf、B*.pdf、TEST*.pdf ファイルは読み込まない。
--exclude=A*.pdf --exclude=B*.pdf --exclude=TEST*.pdf
--include=<string>
検索対象とするPDFファイルを絞り込みます。ワイルドカードが使用できます。「--include <string>」でもOK。
例:A*.pdf のみ読み込む。
--include=A*.pdf 又は --include A*.pdf 又は --include "A*.pdf"
--password=<string>
ユーザーパスワードを指定します。「--password <string>」でもOK。
-Z, --null
ファイル名の後にNULL文字を出します。
- 通常:
IN.pdf: 5: ABC - 「--null」 オプションを追加:
IN.pdf 5: ABC
--match-prefix-separator <string>
表示内容のコロン「:」を別の文字列に変換します。
- 通常:
IN.pdf: 5: ABC - 「--match-prefix-separator "XX"」オプションを追加:
IN.pdfXX5XX ABC - 「--match-prefix-separator "XX" --null」オプションを追加:
IN.pdf 5XX ABC
--debug
デバッグ出力を有効にします。
--warn-empty
PDFに検索可能なテキストが含まれていない場合は「標準エラー出力」に警告を表示します。
--unac
検索のパターンとPDF文書の両方からアクセントと合字を削除します。
VBA関数からの起動
以下のVBA関数を利用してpdfgrep.exe をコマンドライン起動できます。
裏ワザ
それでもPDF内を日本語検索したい場合は有ります。実際に過去にその様な問合せが有りました。その時に以下の様な感じのやり方をご提案します。
- Popplerのpdftotext.exe でオプション「-layout」で全頁をテキスト出力しする。
- そのテキストファイルはUTF-8なのでADODB.Streamを使って変換しながら全て読み込みます。読み込みの例。
- ファイル内に16進「0C」コードの(見えない)文字が有るとページの区切りとなるので、それで「ファイル名-page-001.txt」等の規則性のあるファイル名で出力します。(?ADODB.Streamで変換して読み込むとコードが変わる?)
- 上記の1~3を検索対象の全PDFに対して行います。
-
そのファイルに対して「GNU utilities for Win32」のegrep.exeを使ってファイル検索を行います。このegrep.exe は2バイト文字(日本語)が処理できます。
又は自分でテキストを読み込んで検索を行います。
上記をVBA等のプログラムで一括で処理できるようにします。
過去に上記と技術面は異なりますがAccess内にテキストを取り込んで全て処理できるようにした人がいました。
ライセンス
商用です(みたいです)。但し使用制限等は掛かってません。
pdfgrep ソースはGPLバージョン2のフリーライセンスで公開されています。
Windows版バイナリーを公開している『別』サイトで、フリー(無料)と言う表現は見つかりませんでした。サイトのトップには pdfgrep のGPLソースのWindowsコンパイル版と書かれています。更に「Product Options:製品オプション」で「Price:価格」表示が有ります。
これに関してはココを見ると、問題は無いと言う事になるのでしょう。
pdfgrep のコンパイル
ソースもコンパイル情報も公開されています。 MinGW , Cygwin でWindows版コンパイルに挑戦しましたが、最後に「Poppler」の取り込みが出来なく、あえなく断念しました。ネットにはイロイロと関連情報が有りますが、C言語に関する基礎部分の知識が無いのでやり方のコピーしか出来ません。
自分でコンパイルがしたい。その手のスペシャリストがいましたら、ご教授をお願いいたします。(日本語が扱えるように修正出来ないから止めます。
備考
- Windows版以外の情報も本サイトで公開されています。
- --debug オプションを入れて実行すると「pdfgrep: error: Missing language pack for 'Adobe-Japan1' mapping」のエラーを見ることが出来ます。これを逆に見れば、環境面又はコンパイル時に2バイト文字対応の指定を行える日本語対応出来る?って事でしょうか。
< TOPへ戻る >