Web便利ノート
cman.jp cman.jp > Web便利ノート > PDF > 解析・変換 > PDF→テキスト
広告
広告
広告

pdftotext - PDFからテキストを抽出

フリーソフトPopplerのpdftotextコマンドを利用するとPDF内のテキストを抽出することが出来ます。

pdftotext

広告

pdftotext の詳細

PopplerとはPDFビューア(XpdfReader)やPDF解析・変換ツールのフリーソフトです。PopplerはXpdf(フリーソフト)をベースとして機能を拡張して提供されています。
ソースコードも提供されているライブラリとなります。コマンドライン実行のため、VBAや他プログラムからも利用可能となります。

コマンド
pdftotext [options] <PDF-file> [<text-file>]
オプション
指定なし PDF内のテキストを抽出します
-x <int> 文字を取り出す位置・範囲を指定します(横位置)
-y <int> 文字を取り出す位置・範囲を指定します(縦位置)
-W <int> 文字を取り出す位置・範囲を指定します(幅)
-H <int> 文字を取り出す位置・範囲を指定します(高さ)
-r <fp> 文字を取り出す位置・範囲の解像度(DPI)を指定します(デフォルト:72dpi)
-layout PDFの文字位置(レイアウト)を維持するします(極力維持します)
-fixed PDFテキストの文字ピッチ(ポイント)を想定してレイアウトを組み立てる
-raw 文字列をコンテンツストリームの順序で保持されます(ある程度、文字の順序性が担保される)
-nodiag 斜めのテキスト(0度、90度、180度、270度の軸に近くないテキスト)を取込みしません
-htmlmeta PDFから取り出したテキストをHTML形式にします
-tsv ファイル内の各ブロック、行、単語の境界ボックス情報を含む TSV ファイルを生成します
-listenc 利用可能なエンコーディングの一覧を表示します
-eol <string> 改行コードを指定します
-nopgbrk ページ間に改ページを挿入しません
-bbox 各単語の境界ボックスとページサイズをhtmlに出力します
-bbox-layout -bboxと同様ですが、レイアウト境界ボックスデータが追加されます
-cropbox メディアボックスではなくクロップボックスを使用します
-colspacing <fp> 隣接するテキストを新しい列と見なす前に、単語の後にどれだけのスペースを残すかを指定します
-enc <string> 文字コードを指定します
-q 変換時のメッセージ/エラーメッセージを非表示にします
-f <int> 解析を行うPDFの開始ページを指定します
-l <int> 解析を行うPDFの終了ページを指定します
-opw <string> オーナーパスワード設定されている場合にパスワードを指定します
-upw <string> ユーザーパスワード設定されている場合にパスワードを指定します
-v バージョンとコピーライトを表示します
-h コマンドの使用方法を表示します
ページTOP
広告
ページTOP

pdftotext 実行例

オプションなし

PDF内のテキストを抽出する。

>pdftotext Sample_text.pdf none/out_none.txt

>dir none
     2,974 out_none.txt
>
元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-x <int>」, 「-y <int>」, 「-W <int>」, 「-H <int>」
「-r <fp>」

文字を取り出す位置・範囲を指定する。

>pdftotext>pdftotext        -x 100 -y 120 -W 200 -H 270 Sample_text.pdf x/out_xyWH.txt
>pdftotext>pdftotext -r 50  -x 100 -y 120 -W 200 -H 270 Sample_text.pdf x/out_xyWH_r50.txt
>pdftotext>pdftotext -r 100 -x 100 -y 120 -W 200 -H 270 Sample_text.pdf x/out_xyWH_r100.txt

>dir x
     629 out_xyWH.txt
     377 out_xyWH_r100.txt
     947 out_xyWH_r50.txt
>

取り出す範囲は開始位置(x,y)と幅(W)と高さ(H)で指定します。
ただし、取り出す解像度(r)により位置は異なります。(r=4000までのDBI値)

pdftotext

元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-layout」 文字位置を維持

PDFの文字位置(レイアウト)を維持します。(極力維持します)

>pdftotext -layout Sample_text.pdf layout/out_layout.txt

>dir layout
     4,335 out_layout.txt
>

pdftotext

元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-fixed」 文字ピッチを指定しレイアウトを組み立てる

PDFテキストの文字ピッチ(ポイント)を想定してレイアウトを組み立てる。

>pdftotext -fixed 12 Sample_text.pdf fixed/out_fixed12.txt
>pdftotext -fixed 6  Sample_text.pdf fixed/out_fixed6.txt

>dir fixed
     4,219 out_fixed12.txt
     5,204 out_fixed6.txt
>

pdftotext

元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-raw」 文字列をコンテンツストリームの順序で保持する

文字列をコンテンツストリームの順序で保持する。(ある程度、文字の順序性が担保される)

>pdftotext -raw Sample_text.pdf raw/out_raw.txt

>dir raw
     2,828 out_raw.txt
>
元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-nodiag」 斜めのテキストを取り込まない

斜めのテキスト(0度、90度、180度、270度の軸に近くないテキスト)を取込みしません。背景斜めの透かしを取り込みしないときなどに便利です。

>pdftotext -nodiag watermark.pdf nodiag/out_nodiag.txt
>pdftotext         watermark.pdf nodiag/out_nodiag_none.txt

>dir nodiag
      55 out_nodiag.txt
     132 out_nodiag_none.txt
>

サンプルでは何故か1行目のテキストも取り出し対象外となってしまいました。

元PDF 抽出後テキスト
watermark.pdf (147KB)
ページTOP

「-htmlmeta」 HTML形式で出力する

PDFから取り出したテキストをHTML形式にする。

>pdftotext -htmlmeta           Sample_text.pdf htmlmeta/out_htmlmeta.html
>pdftotext -htmlmeta -fixed 10 Sample_text.pdf htmlmeta/out_htmlmeta_fixed.html
    
>dir htmlmeta
     3,420 out_htmlmeta.html
     4,835 out_htmlmeta_fixed.html
>

HTML形式で取り出す場合は「-fixed」などによりレイアウト維持した方が見やすくなる。

元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-tsv」 TSVファイルを出力

ファイル内の各ブロック、行、単語の境界ボックス情報を含む TSV ファイルを生成します。
テストの開始位置やテキスト内容などがあり、細かい解析には便利な情報となります。

>pdftotext -tsv Sample_text.pdf tsv/out_tsv.txt

>dir tsv
     29,302 out_tsv.txt
>
元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-listenc」 利用可能なエンコーディングの一覧を表示

>pdftotext -listenc Sample_text.pdf
Available encodings are:
.
..
ASCII7
Big5
Big5ascii
EUC-CN
EUC-JP
GBK
ISO-2022-CN
ISO-2022-JP
ISO-2022-KR
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
KOI8-R
Latin1
Latin2
Shift-JIS
Symbol
TIS-620
UTF-16
UTF-8
Windows-1255
ZapfDingbats
>
ページTOP

「-eol <string>」 改行コードを指定

改行コードを指定します。

unix dos mac
LF ( \n ) CRLF ( \r\n ) CR ( \r )
>pdftotext -eol unix Sample_text.pdf eol/out_eol_unix.txt
>pdftotext -eol dos  Sample_text.pdf eol/out_eol_dos.txt
>pdftotext -eol mac  Sample_text.pdf eol/out_eol_mac.txt

>dir eol
     2,974 out_eol_dos.txt
     2,764 out_eol_mac.txt
     2,764 out_eol_unix.txt
>
元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-nopgbrk」 ページ間に改ページを挿入しない

>pdftotext -nopgbrk Sample_text.pdf nopgbrk/out_nopgbrk.txt

>dir nopgbrk
     2,970 out_nopgbrk.txt
>

以下のように改ページ記号「CL」が出力されなくなります。

pdftotext

元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-bbox」 テキスト内容位置などをhtml形式で出力

各単語の境界ボックスとページサイズをhtmlに出力します。
テキストの開始位置や終了位置を含むhtmlが出力されます。

>pdftotext -bbox Sample_text.pdf bbox/out_bbox.txt

>dir bbox
     22,068 out_bbox.txt
>
元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-bbox-layout」 「-bbox」に境界データが付加される

-bboxと同様ですが、レイアウト境界ボックスデータが追加されます。

>pdftotext -bbox-layout Sample_text.pdf bbox-layout/out_bbox-layout.txt

>dir bbox-layout
     50,866 out_bbox-layout.txt
>
元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

「-cropbox」 クロップボックスを使用

メディアボックスではなくクロップボックスを使用します。

>pdftotext -cropbox Sample_text.pdf cropbox/out_cropbox.txt

>dir bbox-layout
     2,974 out_cropbox.txt
>
ページTOP

「-colspacing <fp>」 単語間のスペースを指定

隣接するテキストを新しい列と見なす前に、単語の後にどれだけのスペースを残すかを指定します。フォントサイズに対する割合で測定されます。現在のデフォルトは0.7です。以前のリリースではデフォルトは0.3でした。

>pdftotext -colspacing 2   Sample_text.pdf colspacing/out_colspacing2.txt
>pdftotext -colspacing 0.3 Sample_text.pdf colspacing/out_colspacing0.3.txt

>dir sep
     2,977 out_colspacing0.3.txt
     2,904 out_colspacing2.txt
>
元PDF 抽出後テキスト
Sample_text.pdf (147KB)
ページTOP

コマンド共通オプション

共通的に使用されるコマンドオプション「-f」「-l」「-enc」「-opw」「-upw」「-v」「-h」等のオプションは こちら でご確認ください。

ページTOP

便利な使い方

テキスト全体を抽出すると、文字の配置(順序)が変わるケースが多く実用的とならない場合もあります。
以下のような部分抽出は有効に利用できることがあります。

(例)1つのPDFに複数の請求書(7ページ)が格納されている。
この中から宛先(下記赤枠)と合計金額(下記青枠)だけを抽出して一覧を作成する。
※3ページ目は意図的に位置を少しずらしています。

pdftotext
>rem /*--- 全文字を抽出(7ページ分) ---*/
>pdftotext Sample_select.pdf select/all.txt

>rem /*--- 宛先のみ抽出(7ページ分) ---*/
>pdftotext -x 50 -y 110 -W 200 -H 16 -nopgbrk Sample_select.pdf select/name.txt

>rem /*--- 金額のみ抽出(7ページ分) ---*/
>pdftotext -x 120 -y 270 -W 130 -H 16 -nopgbrk Sample_select.pdf select/price.txt

>rem /*--- 宛先抽出の結果 ---*/
>type select\name.txt
ABC株式会社

ABC株式会社

ABC株式会社

ABC株式会社

株式会社XXX商事

有限会社YYY

有限会社YYY

>rem /*--- 金額抽出の結果 ---*/
>type select\price.txt
234,850

96,800

181,610

39,550

97,768

484,000

173,250

元PDF 抽出後テキスト
Sample_select.pdf (40KB)
all.txt (5KB)
name.txt (1KB)
price.txt (1KB)
ページTOP
広告

使用したバージョンなど

Windows版を使用しています。

pdftotext version 24.08.0
Copyright 2005-2024 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011, 2022 Glyph & Cog, LLC
Usage: pdftotext [options] <PDF-file> [<text-file>]
  -f <int>             : first page to convert
  -l <int>             : last page to convert
  -r <fp>              : resolution, in DPI (default is 72)
  -x <int>             : x-coordinate of the crop area top left corner
  -y <int>             : y-coordinate of the crop area top left corner
  -W <int>             : width of crop area in pixels (default is 0)
  -H <int>             : height of crop area in pixels (default is 0)
  -layout              : maintain original physical layout
  -fixed <fp>          : assume fixed-pitch (or tabular) text
  -raw                 : keep strings in content stream order
  -nodiag              : discard diagonal text
  -htmlmeta            : generate a simple HTML file, including the meta information
  -tsv                 : generate a simple TSV file, including the meta information for bounding boxes
  -enc <string>        : output text encoding name
  -listenc             : list available encodings
  -eol <string>        : output end-of-line convention (unix, dos, or mac)
  -nopgbrk             : don't insert page breaks between pages
  -bbox                : output bounding box for each word and page size to html. Sets -htmlmeta
  -bbox-layout         : like -bbox but with extra layout bounding box data.  Sets -htmlmeta
  -cropbox             : use the crop box rather than media box
  -colspacing <fp>     : how much spacing we allow after a word before considering adjacent text to be a new column, as a fraction of the font size (default is 0.7, old releases had a 0.3 default)
  -opw <string>        : owner password (for encrypted files)
  -upw <string>        : user password (for encrypted files)
  -q                   : don't print any messages or errors
  -v                   : print copyright and version info
  -h                   : print usage information
  -help                : print usage information
  --help               : print usage information
  -?                   : print usage information
ページTOP

その他のPopplerツール機能

主な機能 概要
pdfattach PDFファイルに添付ファイルを埋め込みします
pdfdetach PDF内に添付(埋め込み)されているファイルの一覧表示や抽出を行います
pdffonts PDFファイルで使用されているフォントやフォントの埋め込み有無を調べる
pdfimages PDFファイルで使用(埋め込み)されている画像を抽出する
pdfinfo PDFファイルの情報(作成者、作成日時、ページ数など)を表示する
pdfseparate PDFファイルを1ページごとに分割する
pdftocairo PDFファイルを画像に変換する(Cairoベクターグラフィックスを使用)
pdftohtml PDFをHTML形式に変換する
pdftoppm PDFファイルを画像に変換する
pdftops PDFファイルをPostScriptファイルに変換する
pdfunite 複数のPDFファイルをページ結合する
ページTOP
広告
QrCode
このページのURL
スマートフォン・タブレット運営:株式会社シーマン