概要
さくらのレンタルサーバ(FreeBSD)で、PDF ファイルから日本語をテキストとして抽出するには、一般ユーザ権限で XpdfReader をセットアップします。
これは、「PHP - サーバーでPHPのexec関数を実行したい|teratail に対する私の回答内容から、解決手順を改めて整理・記録・共有するものです。
解説
XpdfReader とは、オープンソースとして公開され、自由に利用できる 1 PDF ビュアーであり、テキストや画像も変換できるコマンドラインツール群もあります。
この、コマンドラインツールは Windows、Linux、macOS に対応したバイナリが配布されていますが、FreeBSD では配布されていません。
FreeBSD では、 ports を使って Xpdf 関連パッケージが配布されているため、 root 権限がある環境であれば ports で比較的手軽にセットアップできます。
しかし、さくらのレンタルサーバのスタンダート等では、SSH でサーバにログインできるものの、 root 権限がありません。ports が使えない場合は、選択肢として2つあります。
- FreeBSD のパッケージがあれば、それをダウンロードして展開する
- ソースコードからツール群をコンパイルし、実行可能にする
今回は ports で配布されているバイナリがありますので、特段理由がなければ、そのバイナリをそのまま利用します。
PDF から日本語を抽出する手順
XpdfReader のセットアップ
FreeBSD 向けのバイナリを含むパッケージ(PDF からテキストを抽出するツール pdftotext
を含む)があります。パッケージをダウンロードし、展開すると、コマンドは利用可能になります。
以下の例では /home/ユーザ名/usr/local/libexec
に展開しています。必要であれば、環境にあわせて書き換えます。
% wget https://pkg.freebsd.org/FreeBSD:12:amd64/quarterly/All/xpdf-4.02,1.txz
% tar xvfz xpdf-4.02,1.txz
% ./usr/local/libexec/xpdf/pdftotext -v
pdftotext version 4.02
Copyright 1996-2019 Glyph & Cog, LLC
これで、 PDF から文字を抽出する pdftotext
コマンドが利用可能になりました。
日本語への対応
初期状態では英語の PDF にしか対応していません。そのため、日本語に対応するためのパッケージも、あわせてセットアップします
% wget https://pkg.freebsd.org/FreeBSD:12:amd64/quarterly/All/ja-xpdf-jafont-4.02.txz
% tar xvfz ja-xpdf-jafont-4.02.txz
このコマンドを仮に /home/example/
で実行したいとしますと( example
は実際のログインユーザ名に置き換えてお考えください)、 /home/example/usr/local/share/xpdf/japanese/
以下に ShiftJIS を扱うために必要な Shift-JIS.unicodeMap
などのファイルが展開されます。
次に、 ~/.xpdfrc
ファイルを作成するか、既に有る場合は、以下の記述を追加します。※ /home/example/ 以下は、実際のサーバ上のパスを指定します。
unicodeMap Shift-JIS /home/example/usr/local/share/xpdf/japanese/Shift-JIS.unicodeMap
(参考:ISO-2022-JP や EUC-JP に対応する場合は、同様に記述の追加が必要です。詳細はパッケージ同梱の dot.xpdfrc
を参照)
% cat dot.xpdfrc
# Japanese PDF resources
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
それから、コマンドラインでの実行をお試しください。
たとえば、次のようにコマンドラインを実行すると、 PDF の変更ができるかどうかを確認できます。
実行例: test.pdf
(「これはテストです」という文字がある)から output.txt
に抽出
% ./usr/local/libexec/xpdf/pdftotext -enc Shift-JIS -raw ./test.pdf output.txt
Config Error: No paper information available - using defaults
% cat output.txt
これはテストです。
ただし、「これはテストです」の文字が Shift JIS 形式でターミナル画面に表示されるため、ターミナルが UTF-8 など Shit JIS でなければ文字化けして見えるので注意が必要です。
Enjoy!
参考
-
GPLv2 および GPLv3 の元にソースコードが公開 https://www.xpdfreader.com/opensource.html ↩