読者です 読者をやめる 読者になる 読者になる

一馬力のメモ帳

MVSからLinuxまで。基盤屋さんは眠らない

PDFファイルをコマンド一発でテキストファイル化する

### 広告 ###

目次


PDFをtextに変換したい。

大量のpdfファイルの中身をtext形式で利用したい。
ファイルを一つ一つ開いてコピー&ペーストしても良いが時間も無い
なんとか楽してpdfをtext化出来ないかなぁとgoogle先生で調べてみると
pdfをtextに変換するコマンドがある!

コマンド名はそのまんま"pdftotext"

早速使ってみる

pdftotextコマンドでpdfファイルをテキスト化

変換元ファイルの確認

まずは変換したいファイルの確認

[root@CentOS6 pdf]# ls -l
合計 12
-rw-r--r--. 1 root root 10524 4月 16 13:34 2016 input.pdf
[root@CentOS6 pdf]#

拡張子は確かにpdf。実際にPDFファイルかを確認してみる。
PDFファイルであれば"PDF-1.x"(xは1〜7)のコメントが含まれるとの事

[root@CentOS6 pdf]# strings input.pdf|grep ^%PDF-1.[0-7]
%PDF-1.3
[root@CentOS6 pdf]#

このへんのPDF構造については
itchynyさんがブログ”プログラムモグモグ”でPDFの構造を詳しく説明してくれています。
itchyny.hatenablog.com
itchynyさんにに感謝。しかし、すごい分量。尊敬します。

PDFファイルをテキストファイル化

PDFファイルをテキストファイルに変換してみる。 コマンド構文は

pdftotext インプットファイル アウトプットファイル

[root@CentOS6 pdf]# pdftotext input.pdf output.txt
[root@CentOS6 pdf]# ls -l
合計 16
-rw-r--r--. 1 root root 10524 4月 16 13:34 2016 input.pdf
-rw-r--r--. 1 root root 61 4月 16 14:01 2016 output.txt

変換したテキストファイルを表示してみる

変換したテキストファイルを表示してみる。

[root@CentOS6 pdf]# cat output.txt
pdftotext input file
1 byte abcdefg
2 byte あいうえお
[root@CentOS6 pdf]#

1バイト文字も2バイト文字もしっかり変換されている。
便利ですね。

 

pdftotext(poppler,poppler-utils)のインストール

もし、pdftotextコマンドがインストールされていなかった場合
poppler,poppler-utilsの2つのパッケージをインストールする事で利用可能になる。

試したところ,pdftotextコマンドはpoppler-utilsパッケージに含まれているため
popplerパッケージのインストールだけでは利用できない。

それぞれパッケージをyumでインストールした結果を記載するので参考にしてほしい

popplerのインストール

[root@CentOS6 pdf]# yum install poppler
読み込んだプラグイン:etckeeper, fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: mirror.premi.st
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package poppler.x86_64 0:0.12.4-5.el6_7.1 will be インストール
--> 依存性の処理をしています: poppler-data >= 0.4.0 のパッケージ: poppler-0.12.4-5.el6_7.1.x86_64
--> 依存性の処理をしています: libopenjpeg.so.2()(64bit) のパッケージ: poppler-0.12.4-5.el6_7.1.x86_64
--> 依存性の処理をしています: liblcms.so.1()(64bit) のパッケージ: poppler-0.12.4-5.el6_7.1.x86_64
--> トランザクションの確認を実行しています。
---> Package lcms-libs.x86_64 0:1.19-1.el6 will be インストール
---> Package openjpeg-libs.x86_64 0:1.3-11.el6 will be インストール
---> Package poppler-data.noarch 0:0.4.0-1.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
パッケージ アーキテクチャ
バージョン リポジトリー 容量
================================================================================
インストールしています:
poppler x86_64 0.12.4-5.el6_7.1 updates 556 k
依存性関連でのインストールをします。:
lcms-libs x86_64 1.19-1.el6 base 100 k
openjpeg-libs x86_64 1.3-11.el6 base 60 k
poppler-data noarch 0.4.0-1.el6 base 2.2 M

トランザクションの要約
================================================================================
インストール 4 パッケージ

総ダウンロード容量: 2.9 M
インストール済み容量: 14 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:

(1/4): lcms-libs-1.19-1.el6.x86_64.rpm | 100 kB 00:00
(2/4): openjpeg-libs-1.3-11.el6.x86_64.rpm | 60 kB 00:00
(3/4): poppler-0.12.4-5.el6_7.1.x86_64.rpm | 556 kB 00:00
(4/4): poppler-data-0.4.0-1.el6.noarch.rpm | 2.2 MB 00:03
--------------------------------------------------------------------------------
合計 631 kB/s | 2.9 MB 00:04
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
etckeeper: pre transaction commit

インストールしています : lcms-libs-1.19-1.el6.x86_64 1/4
インストールしています : poppler-data-0.4.0-1.el6.noarch 2/4
インストールしています : openjpeg-libs-1.3-11.el6.x86_64 3/4
インストールしています : poppler-0.12.4-5.el6_7.1.x86_64 4/4
etckeeper: post transaction commit
Verifying : openjpeg-libs-1.3-11.el6.x86_64 1/4
Verifying : poppler-data-0.4.0-1.el6.noarch 2/4
Verifying : poppler-0.12.4-5.el6_7.1.x86_64 3/4
Verifying : lcms-libs-1.19-1.el6.x86_64 4/4

インストール:
poppler.x86_64 0:0.12.4-5.el6_7.1

依存性関連をインストールしました:
lcms-libs.x86_64 0:1.19-1.el6 openjpeg-libs.x86_64 0:1.3-11.el6
poppler-data.noarch 0:0.4.0-1.el6

完了しました!

poppler-utilsのインストール

[root@CentOS6 pdf]# yum install poppler-utils
読み込んだプラグイン:etckeeper, fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: www.ftp.ne.jp
* epel: mirror.premi.st
* extras: www.ftp.ne.jp
* updates: www.ftp.ne.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package poppler-utils.x86_64 0:0.12.4-5.el6_7.1 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
パッケージ アーキテクチャ
バージョン リポジトリー 容量
================================================================================
インストールしています:
poppler-utils x86_64 0.12.4-5.el6_7.1 updates 73 k

トランザクションの要約
================================================================================
インストール 1 パッケージ

総ダウンロード容量: 73 k
インストール済み容量: 189 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:

poppler-utils-0.12.4-5.el6_7.1.x86_64.rpm | 73 kB 00:00
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
etckeeper: pre transaction commit

インストールしています : poppler-utils-0.12.4-5.el6_7.1.x86_64 1/1
etckeeper: post transaction commit

Verifying : poppler-utils-0.12.4-5.el6_7.1.x86_64 1/1

インストール:
poppler-utils.x86_64 0:0.12.4-5.el6_7.1

完了しました!

まとめ

  • Linuxであれば簡単にpdfファイルをテキストファイルに変換できる
  • 変換は"pdftotext"コマンドを利用する
  • "pdftotext"コマンドはpoppler,poppler-utilsパッケージに含まれる
  • "poppler"パッケージのみではpdftotextコマンドは利用できない

試した環境

ゲストOS

[root@CentOS6 ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@CentOS6 ~]# uname -a
Linux CentOS6.6 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

ホストOS

OS X El Capitan
OS X 10.11.4(15E65)
VirtualBox バージョン 5.0.16 r105871
Oracle_VM_VirtualBox_Extension_Pack-5.0.16-105871