Xpdf:コマンドラインのPDFツール

TOP > Xpdf ツール


Honey Chicken

概要

フリーのPDF用ユーティリティーです。コマンドウインドウのDOS画面上でコマンドラインとして使用できます。

この手のツールではPDFtk が有名ですが、あまり知られてないのでココで少し紹介します。

<2019/2/28追加>
更新が 長く停止したと思われた当ツールが、新サイトで復活しました。機能も追加されてバージョンが 4.01にアップ! 但し、当 pdf-file.nnn2.com サイトの記事は古いままです。日本語対応の部分などはそのまま使えますから、参考にしてください(確認済み)。時間が出来ましたら更新します。

詳細

  1. ライセンスはGPL(フリー)
  2. 機能別にEXEファイルが存在
  3. 32ビット版、64ビット版も有り
  4. Acrobatアプリ本体がなくても動作 (当たり前
  5. ドキュメントもサイトも英語 (汗
  6. コマンドラインのツールなのでVBAなどのプログラムから制御可能
  7. Windows版だけでなく、Linux、Mac 版など多数のOSに対応
  8. 最終バージョンは 2014年5月28日 とやや古いが、PDFファイルのPDFバージョンは上がってないので問題は無い、と思っている。

機能

EXE 単位での機能です。

  1. pdfdetach.exe :PDFにアタッチされた部分をファイルで抽出
  2. pdffonts.exe :PDFのフォント情報を表示
  3. pdfimages.exe :PDFから画像を抽出
  4. pdfinfo.exe :PDFの文書のプロパティ情報などを表示
  5. pdftohtml.exe :PDFをHTML形式に変換
  6. pdftopng.exe :PDFの各ページをPNG画像に変換
  7. pdftoppm.exe :PDFをPPM画像形式に変換
  8. pdftops.exe :PDFをPostScriptファイルに変換
  9. pdftotext.exe :PDFからテキストを抽出

「表示」と書いている部分はDOSの標準出力としてテキスト出力に切り替える事も出来ます。 
例:pdfinfo.exe  -meta  aa.pdf  >  bb.txt

 

 

ダウンロード

Xpdf ダウンロード サイトからダウンロードします。

xpdfbin-win-3.04.zip の部分をクリックします。

Xpdf : ダウンロード

インストール

ダウンロードしたファイルにはインストーラーは付いてません。適当な場所に解凍してそれで終了です。使いたいEXEファイルを目的のフォルダにコピーしても使えます。ランタイムや別途DLL等は必要ありません。

注意点としては途中のフォルダに半角の空白が入らないようにして下さい。プログラムから起動する時に不都合が出る場合があるからです。

今回は以下の様に解凍&インストールしました。

I:¥Tools¥Run¥Xpdf¥ のフォルダの下


+--bin32 ※32ビット版
|   +--pdfdetach.exe
|   +--pdffonts.exe
|   +--pdfimages.exe
|   +--pdfinfo.exe
|   +--pdftohtml.exe
|   +--pdftopng.exe
|   +--pdftoppm.exe
|   +--pdftops.exe
|   +--pdftotext.exe
+--bin64 ※64ビット版
|   +--pdfdetach.exe
|   +--pdffonts.exe
|   +--pdfimages.exe
|   +--pdfinfo.exe
|   +--pdftohtml.exe
|   +--pdftopng.exe
|   +--pdftoppm.exe
|   +--pdftops.exe
|   +--pdftotext.exe
+--doc ※ドキュメント類
|   +--pdfdetach.txt
|   +--pdffonts.txt
|   +--pdfimages.txt
|   +--pdfinfo.txt
|   +--pdftohtml.txt
|   +--pdftopng.txt
|   +--pdftoppm.txt
|   +--pdftops.txt
|   +--pdftotext.txt
|   +--sample-xpdfrc
|   +--xpdf.txt
|   +--xpdfrc.txt
+--ANNOUNCE
+--CHANGES
+--COPYING
+--COPYING3
+--INSTALL
+--README

日本語の言語ファイルのインストール

以下は pdfinfo.exe でPDFの情報を表示した時です。既に日本語の言語ファイルをインストールした後の場合です。Title(タイトル) や Subject(サブタイトル)が日本語表示になっています。

Xpdf:日本語の言語ファイルのインストール

日本語の言語ファイルがインストールされて無いと以下の様になります。英数字以外の日本語は非表示になってしまいます。

Xpdf:日本語の言語ファイルのインストール

以下に日本語の言語ファイルのインストール方法を説明します。

なお、結構面倒な作業なのでここの部分が必要無い環境、又は日本語文字は無くても構わない時はスキップしても結構です。また、後でゆっくりと時間が出来た時でも構いません。

ダウンロード

ココ から以下の xpdf-japanese.tar.gz ファイルをクリックしてダウンロードします。

Xpdf:日本語の言語ファイルのインストール

xpdf-japanese.tar.gz を適当なフォルダに解凍します。解凍すると以下の様なファイルが出てきます。

xpdf-japanese.tar.gz

+--xpdf-japanese
    +--CMap
    |   +--78-EUC-H
    |   +--78-EUC-V
    |   +--78-H
    |   +--78ms-RKSJ-H
    |   +--78ms-RKSJ-V
    |   +--78-RKSJ-H
    |   +--78-RKSJ-V
    |   +--78-V
    |   +--83pv-RKSJ-H
    |   +--90msp-RKSJ-H
    |   +--90msp-RKSJ-V
    |   +--90ms-RKSJ-H
    |   +--90ms-RKSJ-UCS2
    |   +--90ms-RKSJ-V
    |   +--90pv-RKSJ-H
    |   +--90pv-RKSJ-UCS2
    |   +--90pv-RKSJ-UCS2C
    |   +--90pv-RKSJ-V
    |   +--Add-H
    |   +--Add-RKSJ-H
    |   +--Add-RKSJ-V
    |   +--Add-V
    |   +--Adobe-Japan1-0
    |   +--Adobe-Japan1-1
    |   +--Adobe-Japan1-2
    |   +--Adobe-Japan1-3
    |   +--Adobe-Japan1-4
    |   +--Adobe-Japan1-5
    |   +--Adobe-Japan1-6
    |   +--Adobe-Japan1-UCS2
    |   +--EUC-H
    |   +--EUC-V
    |   +--Ext-H
    |   +--Ext-RKSJ-H
    |   +--Ext-RKSJ-V
    |   +--Ext-V
    |   +--H
    |   +--Hankaku
    |   +--Hiragana
    |   +--Katakana
    |   +--NWP-H
    |   +--NWP-V
    |   +--RKSJ-H
    |   +--RKSJ-V
    |   +--Roman
    |   +--UniJIS2004-UTF8-H
    |   +--UniJIS2004-UTF8-V
    |   +--UniJIS2004-UTF16-H
    |   +--UniJIS2004-UTF16-V
    |   +--UniJIS2004-UTF32-H
    |   +--UniJIS2004-UTF32-V
    |   +--UniJISPro-UCS2-HW-V
    |   +--UniJISPro-UCS2-V
    |   +--UniJISPro-UTF8-V
    |   +--UniJIS-UCS2-H
    |   +--UniJIS-UCS2-HW-H
    |   +--UniJIS-UCS2-HW-V
    |   +--UniJIS-UCS2-V
    |   +--UniJIS-UTF8-H
    |   +--UniJIS-UTF8-V
    |   +--UniJIS-UTF16-H
    |   +--UniJIS-UTF16-V
    |   +--UniJIS-UTF32-H
    |   +--UniJIS-UTF32-V
    |   +--UniJISX0213-UTF32-H
    |   +--UniJISX0213-UTF32-V
    |   +--UniJISX02132004-UTF32-H
    |   +--UniJISX02132004-UTF32-V
    |   +--V
    |   +--WP-Symbol
    +--add-to-xpdfrc
    +--Adobe-Japan1.cidToUnicode
    +--EUC-JP.unicodeMap
    +--ISO-2022-JP.unicodeMap
    +--README
    +--Shift-JIS.unicodeMap

インストール

今回は32ビット版EXEのみを対象にします。「sample-xpdfrc」と「add-to-xpdfrc」の2つのファイルを使って編集し、それを元に「I:¥Tools¥Run¥Xpdf¥bin32¥xpdfrc」ファイルを作成します。

① 言語ファイルのxpdf-japanese フォルダごとを I:¥Tools¥Run¥Xpdf¥bin32¥ フォルダにコピーします。

② 「I:¥Tools¥Run¥Xpdf¥bin32¥xpdf-japanese 」フォルダを「I:¥Tools¥Run¥Xpdf¥bin32¥japanese 」にリネームします。

③ 「I:¥Tools¥Run¥Xpdf¥doc¥sample-xpdfrc 」ファイルを「I:¥Tools¥Run¥Xpdf¥bin32¥ 」フォルダの下にコピーします。そしてファイル名を「sample-xpdfrc」から「xpdfrc」にリネームします。

④ その「xpdfrc」ファイルをメモ帳で開いて以下の箇所を変更します。頭の # を削除して、「UTF-8」を「Shift-JIS」に変更します。

変更前: #textEncoding        UTF-8

変更後: textEncoding        Shit-JIS

一旦、そのままでファイルを上書き保存します。

⑤ 「I:¥Tools¥Run¥Xpdf¥bin32¥japanese¥add-to-xpdfrc」ファイルをメモ帳で開きます。中のファイルのパス情報のサンプルが有ります。UNIXの形式です。今回はWindows 形式のjapanes フォルダに修正します。

変更前:「/usr/local/share/xpdf/japanese/」

#----- begin Japanese support package (2011-sep-02) 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 #fontFileCC Adobe-Japan1 /usr/..../kochi-mincho.ttf #----- end Japanese support package

変更後:「I:¥Tools¥Run¥Xpdf¥bin32¥japanese¥」 ※ \ では無く ¥ に変更します。

#----- begin Japanese support package (2011-sep-02) cidToUnicode Adobe-Japan1 I:\Tools\Run\Xpdf\bin32\japanese\Adobe-Japan1.cidToUnicode unicodeMap ISO-2022-JP I:\Tools\Run\Xpdf\bin32\japanese\ISO-2022-JP.unicodeMap unicodeMap EUC-JP I:\Tools\Run\Xpdf\bin32\japanese\EUC-JP.unicodeMap unicodeMap Shift-JIS I:\Tools\Run\Xpdf\bin32\japanese\Shift-JIS.unicodeMap cMapDir Adobe-Japan1 I:\Tools\Run\Xpdf\bin32\japanese\CMap toUnicodeDir I:\Tools\Run\Xpdf\bin32\japanese\CMap #fontFileCC Adobe-Japan1 /usr/..../kochi-mincho.ttf #----- end Japanese support package

⑥ 上記の結果は元のファイルに保存はしません。全てを一旦クリップボードにコピーします。それを「I:¥Tools¥Run¥Xpdf¥bin32¥xpdfrc」ファイルをメモ帳で開いて、最後の部分に貼り付けます。

⑦ 以下が内容です。 ※ \ では無く ¥ に変更します。

#======================================================================== # # Sample xpdfrc file # # The Xpdf tools look for a config file in two places: # 1. ~/.xpdfrc # 2. in a system-wide directory, typically /usr/local/etc/xpdfrc # # This sample config file demonstrates some of the more common # configuration options. Everything here is commented out. You # should edit things (especially the file/directory paths, since # they'll likely be different on your system), and uncomment whichever # options you want to use. For complete details on config file syntax # and available options, please see the xpdfrc(5) man page. # # Also, the Xpdf language support packages each include a set of # options to be added to the xpdfrc file. # # http://www.foolabs.com/xpdf/ # #======================================================================== #----- display fonts # These map the Base-14 fonts to the Type 1 fonts that ship with # ghostscript. You'll almost certainly want to use something like # this, but you'll need to adjust this to point to wherever # ghostscript is installed on your system. (But if the fonts are # installed in a "standard" location, xpdf will find them # automatically.) #fontFile Times-Roman /usr/local/share/ghostscript/fonts/n021003l.pfb #fontFile Times-Italic /usr/local/share/ghostscript/fonts/n021023l.pfb #fontFile Times-Bold /usr/local/share/ghostscript/fonts/n021004l.pfb #fontFile Times-BoldItalic /usr/local/share/ghostscript/fonts/n021024l.pfb #fontFile Helvetica /usr/local/share/ghostscript/fonts/n019003l.pfb #fontFile Helvetica-Oblique /usr/local/share/ghostscript/fonts/n019023l.pfb #fontFile Helvetica-Bold /usr/local/share/ghostscript/fonts/n019004l.pfb #fontFile Helvetica-BoldOblique /usr/local/share/ghostscript/fonts/n019024l.pfb #fontFile Courier /usr/local/share/ghostscript/fonts/n022003l.pfb #fontFile Courier-Oblique /usr/local/share/ghostscript/fonts/n022023l.pfb #fontFile Courier-Bold /usr/local/share/ghostscript/fonts/n022004l.pfb #fontFile Courier-BoldOblique /usr/local/share/ghostscript/fonts/n022024l.pfb #fontFile Symbol /usr/local/share/ghostscript/fonts/s050000l.pfb #fontFile ZapfDingbats /usr/local/share/ghostscript/fonts/d050000l.pfb # If you need to display PDF files that refer to non-embedded fonts, # you should add one or more fontDir options to point to the # directories containing the font files. Xpdf will only look at .pfa, # .pfb, .ttf, and .ttc files in those directories (other files will # simply be ignored). #fontDir /usr/local/fonts/bakoma #----- PostScript output control # Set the default PostScript file or command. #psFile "|lpr -Pmyprinter" # Set the default PostScript paper size -- this can be letter, legal, # A4, or A3. You can also specify a paper size as width and height # (in points). #psPaperSize letter #----- text output control # Choose a text encoding for copy-and-paste and for pdftotext output. # The Latin1, ASCII7, and UTF-8 encodings are built into Xpdf. Other # encodings are available in the language support packages. textEncoding Shift-JIS # Choose the end-of-line convention for multi-line copy-and-past and # for pdftotext output. The available options are unix, mac, and dos. #textEOL unix #----- misc settings # Enable FreeType, and anti-aliased text. #enableFreeType yes #antialias yes # Set the command used to run a web browser when a URL hyperlink is # clicked. #launchCommand viewer-script #urlCommand "netscape -remote 'openURL(%s)'" #----- begin Japanese support package (2011-sep-02) cidToUnicode Adobe-Japan1 I:\Tools\Run\Xpdf\bin32\japanese\Adobe-Japan1.cidToUnicode unicodeMap ISO-2022-JP I:\Tools\Run\Xpdf\bin32\japanese\ISO-2022-JP.unicodeMap unicodeMap EUC-JP I:\Tools\Run\Xpdf\bin32\japanese\EUC-JP.unicodeMap unicodeMap Shift-JIS I:\Tools\Run\Xpdf\bin32\japanese\Shift-JIS.unicodeMap cMapDir Adobe-Japan1 I:\Tools\Run\Xpdf\bin32\japanese\CMap toUnicodeDir I:\Tools\Run\Xpdf\bin32\japanese\CMap #fontFileCC Adobe-Japan1 /usr/..../kochi-mincho.ttf #----- end Japanese support package

本当は1桁目に「#」が付いている行はコメント扱いなので無くてもイイんですが。

注意

但しメタデータの日本語文字の部分は文字化けを起こします。でも既にその前のTitle(タイトル) や Subject(サブタイトル)で日本語表示が有るので、ソチラを使えばイイと思います。

Xpdf:日本語の言語ファイルのインストール

使い方

いくつかの簡単に使い方を上げてみます。

① コマンドウインドウのDOS画面上でコマンドラインとして使用

  1. Dos画面の開き方(1)
    1. Winキー + R
    2. CMD でEnter   
  2. Dos画面の開き方(2)
    1. エクスプローラーで開きたいフォルダをマウスでクリック
    2. 更に Shif キー押しながら + マウスで右クリック
    3. ポップアップメニューから「コマンドウインドウをここで開く(w)」を選択
Xpdf : pdfinfo.exe をコマンドラインで実行

上記の状態からEXEを起動します。

② VBAからShell 関数で起動

以下はサンプルです。

例:test1.pdf のメタ情報をテキストファイル test1.txt に出力する。

001 Option Explicit 002 Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long 003 Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long 004 Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long 005 Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long 006 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 007 Const SYNCHRONIZE = 1048576 008 Const PROCESS_QUERY_INFORMATION = &H400 009 010 ' テスト用呼び出し 011 Sub Main_Test() 012 Dim strCmd As String 013 strCmd = "cmd /c " & "I:¥Tools¥Run¥Xpdf¥bin32¥pdfinfo.exe" & " -rawdates " & _ 014 "D:¥pdf¥test1.pdf" & " > " & "D:¥doc¥test1.txt" 015 Call RunCommandLine(strCmd) 016 End Sub 017 018 ' shell関数の終了を待つ 019 Sub RunCommandLine(ByVal strCmd As String) 020 Dim hProcess As Long 021 Dim lpdwExitCode As Long 022 Dim dwProcessID As Long 023 Dim retVal As Long 024 Dim lCnt As Long 025 lCnt = 0 026 dwProcessID = Shell(strCmd, vbHide) 027 hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, dwProcessID) 028 Do 029 DoEvents 030 retVal = GetExitCodeProcess(hProcess, lpdwExitCode) 031 lCnt = lCnt + 1 032 If lCnt > 250 Then 033 Debug.Print "Exit Do =" & lCnt 034 Exit Do 035 End If 036 Sleep 20 037 038 'shell関数で実行したアプリが終了するまでループ 039 Loop While lpdwExitCode <> 0 040 End Sub

サンプル

  1. Xpdf : PDFのセキュリティ情報を取得するVBA関数

技術メモ

今後必要になるかもしれない情報をメモして置きます。

  1. pdfinfo.exe でメタデータの読み込みについて
    パスワードが掛かっているPDFもXMLフォーマットは異なるが
    dc:format='application/pdf' の形でdc:formatの値も取得できる。   
  2. pdftotext.exe の使用例
    pdftotext  -enc  EUC-JP  test_1.pdf  test_1.txt
    pdftotext  -enc  Shift-JIS  test_1.pdf  test_1.txt

Xpdf の今後の公開配布について(予想

最終バージョンは 2014年5月28日 とやや古いです。今後のバージョンアップは望めないと思われます。理由としては Xpdf をベースにした機能アップバージョン(フォーク版)として Poppler が公開されています。Poppler は他のソフトでも利用され、今後もバージョンアップが期待されています。よって Xpdf はPoppler に移行したと見受けられるので、開発は終了と結論しました。

但し最終バージョンの 3.04 は現在(2016/6/19)でも公開されています。このバージョンに関する脆弱性の報告は見当たらないです(:正確には見つけられなかった)。3.01 では脆弱性が過去に報告されていますが現時点ではその3.01バージョンは公開されてません。

Poppler について

現時点(2016/6/19)での考えです。今でもバージョンアップが繰り返されています。しかし残念な事にソースは公開されていますが、各OS単位でのバイナリー版が公式サイトで公開されていません。EXEのWindows版も公式サイトで公開されてません。よって自分でソースをビルドするか、他の人がビルドした物を使うしか手がない状態です。

個人で Windows版のEXEを公開しているサイトは有ります。Windows 10 64ビット上で試用してみたところ、一部は正常に動作しますが、幾つかがメモリエラーを起こしてしまいました。仮に当PC環境だけの問題としても検証できない以上は使えません。

時期は未定ですが MinGW でのビルド・アタックを予定しています。

Xpdf と Poppler の違い

簡単に言えば、安定したWindows版EXEが有るのがXpdf 、無いのがPoppler と言うことになります。但し、時間がこれを逆にするのは間違いないです。現時点(2016/6/19)で。

それと1つのEXEが動くのにXpdf は800kB~1.7MBの単体で動くにも関わらず、Poppler は関連するDLLが18MBも一緒に動作します。つまりPoppler は10倍ものメモリを使って動作することになります。環境と処理件数にもよりますが、こちらでの計測で処理時間はPoppler が4倍近い時間が掛かっています。これも違いの1つです。

以上。

「Xpdf:コマンドラインのPDFツール」への2件のフィードバック

  1. こんなエラー出たんですが対処法ってありますか?

    Syntax Error: Couldn't find a font for 'ShinGo-Medium-Identity-H'
    Syntax Error: Couldn't find a font for 'GothicBBB-Medium-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Medium-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'GothicBBB-Medium-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Medium-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Warning: Substituting font 'Times-Roman' for 'Symbol'
    Syntax Error: Couldn't find a font for 'ShinGo-Medium-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Medium-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Light-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Medium-Identity-H'
    Syntax Error: Couldn't find a font for 'ShinGo-Medium-Identity-H'

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


出来るだけ早く返答する様には心がけています。
が、遅くなる時もありますのでご了承ください。


SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れるとエラーになる場合が有ります。その時はコードの前後に <code> ・・・</code> タグを入れてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください