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

TOP > Poppler ツール


Pixfav-Images You Love to View

概要

Poppler とはPDF ドキュメントの閲覧等に用いられるフリーのツール群です。Poppler はXpdf をベースとして機能アップ、表示の効率化、 多種多様な機能を提供する目的で作成されました。

注記:効率化は誇張でした。一部は多機能故に逆に速度低下が出てます。

詳細

  1. ライセンスはGPL(フリー)
  2. 機能別にEXEファイルが存在
  3. 日本語(2バイト文字列)対応(言語ファイルより
  4. Acrobatアプリ本体がなくても動作 (当たり前
  5. ドキュメントも公式サイトも全て英語 (汗
  6. コマンドラインのツールなのでVBAなどのプログラムから制御可能
  7. Windows版だけでなく、Linux、Mac 版など多様なOSに対応
  8. 他の多数のソフトで機能の一部が利用されている
  9. 現在もバージョンアップが繰り返されている
  10. 残念なことに公式サイトではソースのみの公開で、OS単位のバイナリーは配布されてない。

ダウンロード

先にも書きましたが Poppler 公式サイトはソースのみでバイナリーは公開してません。Windows 版のEXEのバイナリーは以下からダウンロード出来ます。(2022/09/15 時点)

Version 22.04.0-0
File:Release-22.04.0-0.zip
コチラが最新です。

  • Poppler for Windows

    Version 0.68.0
    File : poppler-0.68.0_x86.7zpoppler-qt5 for mingw32

  • Version 0.32.0
    file : poppler-0.32.0-mingw32-1.zip
    sise : 7.76MB

インストール

上記で紹介したファイルは2つとも解凍するだけです。解凍先は出来ればWindows の環境変数の Path を通した方がいいです。通さないならば半角の空白が無いフォルダに置くことをオススメします。その方がイロイロとトラブルが少なく済みます。

言語ファイルのダウンロード

ココのサイトを開きます。そして「Poppler Encoding Data」と書かれている下に有る「poppler-data-0.4.9.tar.gz」の部分をクリックします。poppler-data-0.4.9.tar.gz ファイルがダウンロードできます。

Poppler 言語ファイルのダウンロード


※上記画像は旧バージョン 0.4.8 です。0.4.9 が最新です。

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

① ダウンロードした poppler-data-0.4.9.tar.gz ファイルを解凍すると poppler-data-0.4.9 フォルダが有ります。それをpoppler にリネームします。

② Poppler の各EXE 実行フォルダbin と同じ階層に share フォルダがあります。その share フォルダの下に①のpoppler フォルダごと、そのままコピーします。

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

③ pdfinfo.exe で言語ファイルのテストをします。

>pdfinfo.exe  -listenc

以下の様に表示されたらOKです。

001 >pdfinfo -listenc 002 Available encodings are: 003 . 004 .. 005 ASCII7 006 Big5 007 Big5ascii 008 EUC-CN 009 EUC-JP 010 GBK 011 ISO-2022-CN 012 ISO-2022-JP 013 ISO-2022-KR 014 ISO-8859-6 015 ISO-8859-7 016 ISO-8859-8 017 ISO-8859-9 018 KOI8-R 019 Latin1 020 Latin2 021 Shift-JIS 022 Symbol 023 TIS-620 024 UTF-16 025 UTF-8 026 Windows-1255 027 ZapfDingbats


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 

注)poppler-data-0.4.9.tar.gz は旧バージョン 0.4.8 と表示が少し異なります。

機能

Windows 版でExe 単位での機能です。

  1. pdfdetach.exe :PDFから添付ファイルの抽出、情報の表示
  2. pdffonts.exe :PDFのフォント情報を表示 ※注意有り
  3. pdfimages.exe :PDFから画像を抽出
  4. pdfinfo.exe :PDFの文書のプロパティと各ページ情報などを表示
  5. pdfseparate.exe :PDFから単一のページを抽出
  6. pdftocairo.exe :PDFを画像形式に変換
  7. pdftohtml.exe :PDFをHTML形式に変換
  8. pdftoppm.exe :PDFをPPM画像形式に変換
  9. pdftops.exe :PDFをPostScriptファイルに変換
  10. pdftotext.exe :PDFからテキストを抽出
  11. pdfunite.exe :PDFのマージ

「表示」と書いている部分はDOSの標準出力としてテキスト出力に切り替える事も出来ます。

例:pdfinfo.exe  -meta  in.pdf  >  out.txt

 

機能別の使い方

  1. Pdfdetach の使い方
  2. Pdffonts の使い方
  3. Pdfinfo の使い方
  4. Pdfimages の使い方
  5. Pdfseparate の使い方
  6. pdftocairo の使い方
  7. pdftohtml の使い方
  8. pdftoppm の使い方
  9. pdftops の使い方
  10. Pdftotext の使い方
  11. pdfunite の使い方

Poppler を使用したVBA関数

  1. PDFから添付ファイルを取り出すVBA関数
  2. PDFの添付ファイル一覧を取得するVBA関数
  3. PDFに埋め込まれた画像の保存するVBA関数

Poppler を起動するサンプル

上記以外の処理をPoppler でさせるサンプルです。オプション等の設定、エラーの判定は全て自分で行う必要が有ります。

コマンドラインを実行する部分にはVBA関数「 RunCommandLineEX 」をご使用ください。

例:

001 ' コマンドラインを起動するメイン・デモ 002 003 Sub Main_Demo() 004 005 Dim i As Long 006 Dim bRet As Boolean 007 Dim strOutFile1() As String 008 Dim strOutFile2() As String 009 010 '引数で使う変数 011 Dim strCmd As String 012 Dim strOutFile(1) As String 013 Dim strErr As String 014 Dim strWorkFolder As String 015 Dim lRetCode As Long 016 Dim lErrCount As Long 017 Dim lErrCode(4) As Long 018 019 gDebugMode = True '実運用ではFalse 020 021 'Poppler 終了コードのセット 022 lErrCode(0) = 0 'No error. 023 lErrCode(1) = 1 'Error opening a PDF file. 024 'I/O Error: Couldn't open file 'XX.pdf': No error. 025 lErrCode(2) = 2 'Error opening an output file. 026 'I/O Error: Couldn't open text file 'xx.txt' 027 lErrCode(3) = 3 'Error related to PDF permissions. 028 lErrCode(4) = 99 'Other error. 029 lErrCount = 4 'Ubound(lErrCode) 030 strCmd = "I:¥Tools¥Run¥Poppler-0.45¥bin¥pdftotext.exe " & _ 031 "-layout " & _ 032 "I:¥Tools¥Run¥Poppler-0.45¥bin¥IN.pdf -f 9 -l 9 OUT.pdf" 033 034 'コマンドラインの実行 035 bRet = RunCommandLineEX(strCmd, strWorkFolder, _ 036 lErrCount, lErrCode, _ 037 strOutFile, strErr, lRetCode) 038 039 If gDebugMode Then 040 '実行結果の表示 041 Debug.Print "bRet=" & bRet 042 Debug.Print "lRetCode=" & lRetCode 043 strOutFile1 = Split(strOutFile(0), vbCrLf) 044 strOutFile2 = Split(strOutFile(1), vbCrLf) 045 Debug.Print "strErr=" & strErr 046 For i = 0 To UBound(strOutFile1) 047 Debug.Print "msg1 i(" & i & ")="; strOutFile1(i) 048 Next i 049 For i = 0 To UBound(strOutFile2) 050 Debug.Print "msg2 i(" & i & ")="; strOutFile2(i) 051 Next i 052 End If 053 MsgBox "End " & Now 054 End Sub 055 056 Public Function RunCommandLineEX( _ 057 ・・・・) As Boolean 058 059 'ココはVBA関数「 RunCommandLineEX 」をご使用ください。 060 ' 061 End Function


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 

日本語の扱い

  • VBA関数「 RunCommandLineEX 」は標準出力のUTF-8を変換してプログラム内に読み込む機能が入っています。よってオプション「-enc Shift-JIS 」は必要としません。これにより日本語の文字化けを避けることができます。   
  • pdfinfo で結果をDos 画面に表示すると日本語の2バイト文字は化けて表示されます。但し、リダイレクト(標準出力)で出力したテキストを文字コードで自動判別出来るエディタならば日本語が正しく表示できます。でもエディタによっては表示できる出来ない場合も有ります。メモ帳はダメでした。

    ※メモ帳で表示てきたのは「CreationDate: 」と「ModDate:」の「東京 (標準時)」部分だけです。

  • pdfinfo のテキスト出力はUTF-8Nで出力してますが。一部はUNICODEになっている感じです。   
  • 「pdftotext -enc Shift-JIS  ・・・」で日本語の文字表示が可能ですが、半角文字まで2バイト文字になってしまう問題が有ります。よってこの「-enc Shift-JIS 」オプションは使用せずに、VBA関数「 RunCommandLineEX 」で内部コード変換させてください。

pdffonts.exe の使用について

バージョン0.45 の pdffonts.exe は アンチウイルスソフト(Avast) で脅威が検出され実行できません。Windows にとって好ましくない動作をおこなうみたいでアンチウイルスソフトで隔離されてしまいます。これも含め問題点をまとめてみました。

  • バージョン0.45 ではアンチウイルスソフトで脅威が検出され実行できない。
  • バージョン0.32 の pdffonts.exe はアンチウイルスソフトで脅威が検出されず実行はできる。

以上から現時点(2016/6/29)で問題無く使えそうなのは「Xpdf 3.04 の pdffonts.exe 」だけとなります。「Xpdf 3.04 の pdffonts.exe 」は2年前のソフトですが、PDFファイルの仕様そのもののバージョンは上がってないので使用に問題が出るとは考えにくいです。

001 I:¥Tools¥Run¥Xpdf¥bin32>pdffonts in1.pdf 002 Config Error: No display font for 'Symbol' 003 Config Error: No display font for 'ZapfDingbats' 004 name type emb sub uni object ID 005 ------------------------------------ ----------------- --- --- --- --------- 006 Helvetica Type 1 no no no 151 0 007 BSBASK+MS-Gothic-H CID TrueType yes yes no 158 0 008 Helvetica-Oblique Type 1 no no no 96 0 009 MMJRJM+rtcxss Type 1C yes yes no 104 0 010 KJXKQP+rtxmi Type 1C yes yes no 111 0 011 OTNCWA+txsya Type 1C yes yes yes 112 0 012 HYZHPX+t1xtt Type 1C yes yes no 113 0


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 

備考

  • Poppler の言語ファイルは Xpdf と異なり固定フォルダを見るように設計されています。それならばPopplerのバイナリー配布と同時にそのフォルダも入れるようにしてくれると有難いです。

< TOPへ戻る >

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

  1. 管理人さん、はじめまして。
    川端といいます。
    どうしてもわからない事があり、質問させていただきます。

    やりたいこと…pdfのテキストに対して、あるフォントが使われている場合、その文字にハイライトを付けるようにしたいです。
    フォントで検索は可能なのでしょうか?

    また、PDFで使用している全フォント一覧を取得することはできるのでしょうか?PDDocのGetInfoでpdfのプロパティ情報が取得できるようですが、プロパティ情報のフォントタブに表示される「この文書で使用しているフォント」を取得したいです。
    (その一覧から一つのフォントを選択して、ハイライトを付けるようにできればいいなと思っています)

    よろしくおねがいします!

    OS:Windows10Pro
    Adobe Acrobat Pro DC:2020.006.20042
    Excel:Office Personal 2019

  2. 川端さん はじめまして。
    分かる範囲で返答させていただきます。

    >やりたいこと…pdfのテキストに・・、・・フォントが・・その文字にハイライトを・・。
    >フォントで検索は可能なのでしょうか?

    コチラのサイトから現状での答えは「可能ではない」です。
    メーカーの機能を判断する為の目安になる公開マニュアルも再度見てみましたが、それらしき記述は見当たりません。

    >また、PDFで使用している全フォント一覧を取得することはできるのでしょうか?

    AcrobatのOLEにはズバリと言えるその機能は有りません。
    しかし、Popperのpdffonts.exeを使えば可能です。
    >pdffonts ABC.pdf > list.txt
    CPDFでも出来ます。
    >cpdf -list-fonts ABC.pdf > list.txt
    実際に動かして結果を確認して下さい。
    Xpdfのpdffonts.exeも未確認ですが可能と思っています。Xpdfのソースを元にPopperが出来ているからです。
    共にコマンドラインなのでプログラムからも起動できますし、結果も標準出力「> list.txt」で、これもプログラムから見ることが出来ます。

    ハイライト表示についてですが。
    コチラでやり方を公開していますが、現在は問題点が見つかっています。修正版が出るにはまだ2週間ぐらいは掛かるかもしれません。解決方法がネット上には無く、全てを自力でやっています。手持ちの500個程のPDFを調査し、動作確認しながらの作業になるので、時間がかかっています。

    >フォントで検索は可能なのでしょうか?

    最初の質問に戻ります。今は「可能ではない」ですが、逃げ道がないかと探してみました。
    PDFを一旦HTMLファイルとして出力します。HTMLはテキストなのでプログラムから読み込めます。HTMLを見ると、該当するテキストがどのフォントを使っているか分かります。
    問題点
    1)ページ番号が分からない
    HTMLにはページという概念が無いためです。事前にPDF上にページ番号と読み取れる情報を付けとくなどの処理が必要かもしれません。考えてみるともっと簡単な方法も有るはずです。

    「ページ番号」と「テキスト」が分れば、(修正版が出た後の)コチラの情報でハイライト表示が可能になるかもしれません。(現状では「かも」です。

    ▼現在調査中のコチラの問題とやや似ている部分が有るので、川端さんの逃げ道がないか、この後でもう少し調査します。結果はコチラのコメントに追加します。

    ▼念の為に海外のサイトを見てみました。検索キーは「How to programmatically get used font name from text on PDF」です。
    ・下記にiTextSharpを使った例が出ています。
    https://stackoverflow.com/questions/6882098/how-can-i-get-text-formatting-with-itextsharp
    ・海外の有償ソフトでテキストのフォントを取得するのも有るみたいです。
    https://www.debenu.com/products/development/debenu-pdf-library/features/pdf-content-extraction/

    海外のサイトを見ると川端さんと同じ疑問を持った人がいました。

  3. 川端さんへ
    調査した結果です。
    結論 -> ある程度は出来ます。

    手順:

    1)Popperpdftohtml.exeでPDFをXML変換してファイル出力
    例:
    >pdftohtml -c -i -xml -fontfullname "X:\output\AA.pdf"

    2)上記の AA.xml ファイルをプログラムから読み込む。
    AA.xml ファイルからフォント名、ページ番号、相対的な位置、テキストが判断できます。

    3)次にPDFからコチラのやり方を参考にして、
    テキストに対してのPDF上の座標を取得します。その座標と AA.xml ファイル内の位置との関連付けを行います。
    その情報を元に更にコチラのやり方を参考にしてハイライト表示を行います。

    まとめ:
    ・1と2は一日で十分でしょう。3に関する情報は(日本語)ネットにも無いので、2週間以上は覚悟してください。Acrobat JavaScriptを少しは理解しないと出来ない部分なので無理かもしれない・・・。
    ・3のハイライト表示は諦めて、2の結果を別の方向に向けることをオススメします。

    =============================================
    これ以降は、サイト管理者の技術メモです。見なくても結構です。

    ▼① Popperのpdftohtml.exeでのHTML出力

    サンプル:
    >pdftohtml -c -i -fontfullname "X:\output\AA.pdf"

    ページ単位での出力が可能。
    ヘッダー、フッターも出力されている。
     フォント名は「専用の英字」になっているが判断は可能と予測。
     ※ -fontfullname :このオプションでフォント名が出力される

    ▼② Acrobat OLEでのHTML出力
    関数:PDFを特定のフォーマットに変換する
    http://pdf-file.nnn2.com/?p=768
    上記ではヘッダーはまとまって出力される。
    フッターは出力されません。
    ページ番号を出力するオプションは無し。現状では分からない。

    ▼③ Acrobat本体の手作業のHTML出力
    ページ指定は無し
    ヘッダー、フッターのコントロールは無し
    フッターは出力されない。

    ▼④ Acrobat本体の手作業のXML出力
    ページ指定は無し
    ヘッダー、フッターのコントロールは無し
    フッターは出力されない。

    ▼XML出力の例、一部のみ

    <text top="255" left="112" width="59" height="14" font="0">本文目次</text>
    <text top="291" left="112" width="53" height="14" font="1">はじめに</text>
    <text top="313" left="112" width="52" height="14" font="1">PDFとは</text>
    <text top="334" left="112" width="69" height="14" font="1">PDFの現状</text>

    ▼Acrobat JavaAScriptのgetPageNthWordQuads出力で得たテキストの座標値(Quads値)
    '0[Left] 1[Top] 2[Right] 3[Top] 4[Left] 5[Bottom] 6[Right] 7[Bottom]
    Page=0>1=0 (本) *[74.52000427246094 ,671.9266357421875 ,84.12001037597656 ,671.9266357421875 ,74.52000427246094 ,662.3651733398438 ,84.12001037597656 ,662.3651733398438]
    Page=0>2=0 (文) [84.30049133300781 ,671.9266357421875 ,93.90049743652344 ,671.9266357421875 ,84.30049133300781 ,662.3651733398438 ,93.90049743652344 ,662.3651733398438]
    Page=0>3=0 (目) [94.14044189453125 ,671.9266357421875 ,103.74044799804688 ,671.9266357421875 ,94.14044189453125 ,662.3651733398438 ,103.74044799804688 ,662.3651733398438]
    Page=0>4=0 (次) [103.98039245605469 ,671.9266357421875 ,113.58039855957031 ,671.9266357421875 ,103.98039245605469 ,662.3651733398438 ,113.58039855957031 ,662.3651733398438]
    Page=0>5=0 (は) *[74.52000427246094 *,647.8666381835938 ,84.12001037597656 ,647.8666381835938 ,74.52000427246094 ,638.30517578125 ,84.12001037597656 ,638.30517578125]
    Page=0>6=0 (じ) [84.13157653808594 ,647.8666381835938 ,91.48524475097656 ,647.8666381835938 ,84.13157653808594 ,638.30517578125 ,91.48524475097656 ,638.30517578125]
    Page=0>7=0 (め) [91.49681091308594 ,647.8666381835938 ,100.90476989746094 ,647.8666381835938 ,91.49681091308594 ,638.30517578125 ,100.90476989746094 ,638.30517578125]
    Page=0>8=0 (に) [100.91633605957031 ,647.8666381835938 ,109.94989013671875 ,647.8666381835938 ,100.91633605957031 ,638.30517578125 ,109.94989013671875 ,638.30517578125]

    XMLの位置情報からQuads値を計算で出すことは出来ない。相対的な位置での判断をプログラム上でしないと出来ない。ロジックは厄介だが出来るはず。

    以上。

コメントを残す

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

CAPTCHA



SAMURAI Plugin

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

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

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