pdfファイルからテキストをぶっこ抜くpdftotextコマンド

2020年3月6日

テクノロジー

ぶっこ抜き大好きエンジニアの、下駄です。 pdfデータは便利ですが、システムで利用できるデータ形式ではないので、内容が画像形式でなければ、テキストでぶっこ抜いてみたいと思ったら、ナイスなコマンドが存在しました。 そして、これがメッチャ使えるコマンドだと分かったので、僕のシステムフレームワーク標準に入れるべく、docker-composeに登録しておきました。

インストール

ubuntu(debian)の場合

apt-get install -y poppler-util

centosの場合

yum install -y poppler poppler-util 僕の環境ではこちらで無事にインストールできたんですが、出来ない場合もあるかもしれません。 すみませんが、ググってください・・・

テキスト変換事例

通常変換

pdftotext sample.pdf sample.txt 区切り毎に改行で変換されます。

レイアウトを維持して変換

pdftotext -layout sample.pdf sample_layout.txt なるべくレイアウトを維持してテキスト変換されます。 ただし、table構成などの場合は、スペース文字列で埋められるので絡む情報の取得が難しいでしょう。

block-box変換

pdftotext -bbox sample.pdf sample_layout.txt スペースを含む区切り毎にhtml(xml)形式のwordタグで表示されます。 ただし、改行の区切りとスペースの区切りが混ざってしまうので、少し使いづらい印象です。

block-box-layout変換

pdftotext -bbox-layout sample.pdf sample_layout.txt table組みされている場合、この変換が一番精度が高いようです。

開始ページの指定

pdftotext -f 3 sample.pdf sample_first.txt

終了ページの指定

pdftotext -l 3 sample.pdf sample_last.txt

パスワード付きpdfの場合

# ユーザーパスワード pdftotext -upw '%password%' sample.pdf sample.txt # オーナーパスワード pdftotext -opw '%password%' sample.pdf sample.txt

注意点

当たり前の話ですが、pdfがスキャンデータなどの場合は、テキストデータが含まれておらず、このコマンドを実行してもテキストは抽出されません。 pdfは形式がかなり自由なので、その書類によってルールがまちまちなため、単純に文字列を取得するというケースや、形式がルール化されている場合じゃないと、使えないかもしれませんが、 政府発行書類などで、表組みされているデータを取得する場合などに便利に使えます。 ちなみに、僕のケースは、webデータクローリングで、取得したデータ変換で使う予定です。 phpのモジュールで変換してもいいんですが、linuxコマンドでできると、cron処理もやりやすいですからね。 もう少しこの機能を使い込んでみたいと思います。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。