LoginSignup
2
0

More than 1 year has passed since last update.

XpdfReaderでPDFから日本語を抽出する方法(さくらのレンタルサーバ)

Last updated at Posted at 2021-05-25

概要

さくらのレンタルサーバ(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/ 以下は、実際のサーバ上のパスを指定します。

~/.xpdfrc
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!

参考


  1. GPLv2 および GPLv3 の元にソースコードが公開 https://www.xpdfreader.com/opensource.html 

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0