xpdfのpdftotextでPDFからテキスト抽出する。日本語対応・レンタルサーバでの運用でつまづいたところ。

2012.11.06

(プログラムのはなしです)

掲題の件。

製作中のWebのプログラムで、「WebのシステムにPDFをアップロードするとPDFのテキストを読み取ってDBに保存する」という要件を満たすために、xpdfを使いました。

で、このプログラムを運用するのがレンタルサーバっていうのもあり、もろもろつまづいてたんですが、なんとかなったのでご報告。

テキストの抽出にxpdf

http://www.foolabs.com/xpdf/download.html

ここからxpdfをダウンロード。

xpdf1

実行環境はredhatのようなので、こちらからダウンロード。

gzファイルを解凍すると32bitと64bitのフォルダありますので、環境にあわせて選んでください。

今回使うのは「pdftotext」だけですので、そのファイルだけ実行するディレクトリに配置します。

日本語対応で躓いた

日本語対応では下記のサイトを参考にしました。(こちらはWindows版ですが)
参考になりました。感謝申し上げます。

Windowsでpdftotextを使う

 

http://www.foolabs.com/xpdf/download.html

xpdf2

今日現在、ここからダウンロードするデータだけでは日本語を正しく抽出できません。
運営が配布するファイルを変えたんでしょう。
上記リンクのデータは差分ファイルかな?

必要な日本語化パッケージはミラーにありました。

ここから

xpdf3

これをダウンロード

xpdf4

解凍したフォルダ内に「add-to-xpdfrc」というファイルがあるので「xpdfrc」にリネームして、pdftotextと同じディレクトリに保存します。

pdftotextと同じディレクトリに「japanese」というフォルダを作って、そこに解凍されたデータを全部保存します。(CMapフォルダやらAdobe-Japan1.cidToUnicodeやらもろもろ)

xpdfrcを開くと下記のようになってると思うので、それぞれのパスを実際の環境に合わせます。

#—– begin Japanese support package (2011-sep-02)
cidToUnicode    Adobe-Japan1    /usr/local/share/xpdf/japanese/Adobe-Japan1.cidToUnicode
unicodeMap    ISO-2022-JP    /usr/local/share/xpdf/japanese/ISO-2022-JP.unicodeMap
unicodeMap    EUC-JP        /usr/local/share/xpdf/japanese/EUC-JP.unicodeMap
unicodeMap    Shift-JIS    /usr/local/share/xpdf/japanese/Shift-JIS.unicodeMap
cMapDir        Adobe-Japan1    /usr/local/share/xpdf/japanese/CMap
toUnicodeDir            /usr/local/share/xpdf/japanese/CMap
#fontFileCC    Adobe-Japan1    /usr/…./kochi-mincho.ttf
#—– end Japanese support package

あと、xpdfrcの先頭にでも

textEncoding        Shift-JIS

エンコードの設定を足します。

設定はこれでOK。

あとは実行する

あとは実行だけですが、レンタルサーバだとコマンドうてないので、PHPから実行します。

<?php
$here = exec(“pwd”);
$pdftotext = $here . “/pdftotext” ;
$file = $here . “/test.pdf” ;
exec($pdftotext . ” ” . $file . ” -cfg xpdfrc  -“,$ret, $code);
foreach($ret as $s){
echo $s . “<br/>”;
}
?>

こんな感じ。execを使って実行します。
test.pdfは pdftotextと同じディレクトリにあります。

普通は/usr/local/~を使うところなんでしょうけど、レンタルサーバなので、xpdfrcをpdftotextと同じところにおいて –cfg で指定しないといけない。
このオプションに気づかないで時間を費やしました。。

もちろんレンタルサーバの制限や禁止事項でpdftotextのようなプログラムを禁止しているサーバもあると思いますので、環境によります。

次の記事: iPad miniとMac mini買った

なんとなくiPhoneとかiPadアプリの開発は避けてたんですが、時流もあって泣く泣くiPadアプリの開発をする事に。。ご発注感謝。 つうわけで開発機ANDテスト機ってことでMac miniとi...続きを読む

前の記事: 3Dプリンターがお求めやすく、始めやすくなった。ルナヴァーストから「ポータビー」の完成品を販売

これは、欲しい。使わないけど。 芸術創作活動にも、製品のプロトタイプ製作にもってこいの3Dプリンタ。 知らない人のために・・・。 3Dプリンタはプリンタと名前がつきますが...続きを読む