Poppler:PDFに埋め込まれた画像を保存するVBA関数

TOP > Poppler ツール > *


A lack of color

概要

PDF内の画像を抽出してファイル保存します。

Acrobat OLE を使わずに Popplerpdfimages.exe をコマンドライン起動して使用します。

  1. 事前に各種エラーチェック
  2. 「-list」オプションでPDF内の画像数を確認します。
    ゼロ件の時は以降の処理をスキップします。
  3. 保存する画像の各種情報を抽出します。
  4. 画像を pdfimages.exe でファイル保存します。

 

Poppler とは

フリーソフト Poppler を知らない人は先にコチラを御覧ください。

 

形式

 

引数

  1. 第1引数:popPara_InPdfPath As String  (In)
    入力のPDFファイルのフルパス
  2. 第2引数:popPara_InPdfPassword As String  (In)
    入力のPDFファイルのユーザーパスワード。無ければ""。
  3. 第3引数:popPara_Option As String  (In)
    画像出力時のオプション(任意)
    これに関する詳細はココのOptionsを参照して下さい。
  4. 第4引数:popPara_ImageRoot As String  (In)
    画像のルート名(任意)
    これに関する詳細はココのimage root を参照して下さい。
    但し、当VBA関数は機能を拡張しています。拡張部分に関してはこのページ後半の「画像のルート名:image root」を参照してください。
  5. 第5引数:popPara_FileCount As Long  (Out)
    画像ファイルのファイル数
    この値は正確では無いです。popPara_ImageList(x,y)の x の次元数を参照してください。このページの後半でまた説明します。
  6. 第6引数:popPara_AllSize As Long  (Out)
    PDF内の画像の合計サイズ(Byte)です。出力サイズの合計では無いです。
  7. 第7引数:popPara_ImageList(x,y) As Long  (Out)
    PDF内の画像の各種情報です。「-list」オプションで取得した内容です。このページの後半でまた説明します。
    x 画像ファイル
    y 各種の情報
  8. 第8引数:strErr As String  (Out)
    プログラム内で発生した各種エラーメッセージ。エラー無しは ""。

 

戻り値

popSaveImage VBA関数の戻り値です。

  • True : 正常終了
    保存する画像がゼロ件でも内部でエラーが無ければ正常終了です。
    strErr = "" の時に正常終了と判断できます。
      
  • False : エラー発生
    プログラム内部のエラー、コマンドライン実行時のエラーを含みます。
    strErr <> "" の時にエラーと判断できます。

 

関数 / サンプル

 





事前設定

  1. コチラを参考にPoppler のダウンロードとインストールを行います。
  2. pdfimages.exe のフルパスをCON_POPPLER_PATHにセットします。
  3. gDebugMode = True のデバッグモードをFalseにセットします。

サンプル

  • popPara_InPdfPath :
    A-de-001.pdf から添付ファイルの数とファイル一覧を取得します。
  • popPara_InPdfPassword :
    A-de-001.pdf のユーザーパスワードは「def」です。
  • popPara_Option :
    保存する画像は png 形式です。保存ファイル名にはページ番号を追加したいのでオプションを「-png -p」にします。詳細は ココのOptions を参照。
  • popPara_ImageRoot :
    保存フォルダは「I:¥Excel-VBA¥save¥」です。保存する時のファイ名の先頭は入力のPDFのファイル名と同じにします。

DownloadcLine-popSaveImage.xls

 

結果

 

  ▽正常終了の時

Poppler:PDFに埋め込まれた画像の保存するVBA関数

 

▽途中で続行の判断が必要な時。

Poppler:PDFに埋め込まれた画像の保存するVBA関数

 

▽実行中にエラーが発生して終了した時。

Poppler:PDFに埋め込まれた画像の保存するVBA関数

一番下が pdfimages.exe からのエラーメッセージです。
「Command Line Error : Incorrect password」=「パスワードが間違ってます」 それ以外はプログラム内で編集したエラーメッセージです。

 

▽オプション「popPara_Option」の設定が間違っている時。

Poppler:PDFに埋め込まれた画像の保存するVBA関数

この場合は pdfimages.exe からの詳細なエラーメッセージは表示されません。代わりに「-help」のオプションを設定したのと状態になります。  

 

「画像のルート名」  image root について

画像を保存する時にファイル名の先頭の文字列を指定できます。詳細はpdfimages.exe のOptions に説明が有ります。このVBA関数ではその部分を少し拡張して使いやすくしました。

Pdfimages はPDFファイルを読み込み、1つまたは複数のページをスキャンします。そして画像ごとに一つのファイルを書き出します。画像ファイル名は [image-root] - [nnn].[xxx] の形式です。「image-root」はオプションで指定できる画像のルート名、nnnは自動的に振られる画像番号、xxxは画像の種類(.ppm、.pbm、.PNG、.TIF、.JPG、JP2、jb2e、またはjb2g)です。

例で説明します。 例:popPara_ImageRoot = "" の時 [image-root]の部分は入力PDFファイルのファイル名を使います。そして画像の保存先フォルダはExcelファイルの実行フォルダです。PDFファイル名が「OUT_1.pdf」の時は popPara_ImageRoot = "OUT_1"の扱いになります 。

  • OUT_1-000.png
  • OUT_1-001.png
  • OUT_1-002.png

例:popPara_ImageRoot = "ABC" の時 [image-root]の部分は「ABC」が入ります。そして画像の保存先フォルダはExcelファイルの実行フォルダです。PDFファイル名が「OUT_1.pdf」の時は。

  • ABC-000.png
  • ABC-001.png
  • ABC-002.png

例:popPara_ImageRoot = "save¥ABC" [image-root]の部分は「ABC」が入ります。そして画像の保存先フォルダはExcelファイルの実行フォルダの下の「save」フォルダです。このフォルダが存在しないとエラーになります。 例:popPara_ImageRoot = "I:¥Excel-VBA¥save¥ABC" [image-root]の部分は「ABC」が入ります。そして画像の保存先フォルダは「I:¥Excel-VBA¥save¥」フォルダです。このフォルダが存在しないとエラーになります。 例:popPara_ImageRoot = "I:¥Excel-VBA¥save¥" [image-root]の部分は入力PDFファイルのファイル名を使います。そして画像の保存先フォルダは「I:¥Excel-VBA¥save¥」フォルダです。このフォルダが存在しないとエラーになります。  

 

保存した画像のファイル数

VBA関数の引数 popPara_FileCount にセットされる件数は保存先フォルダに存在する画像のファイル数です。カウント方法は同じ「画像のルート名」を持ったファイル名が存在した場合にしています。よって保存前に他のPDFの処理で同じような名前のファイルが存在するとカウントしてしまいます。 当VBA関数が内部で使用している pdfimages.exe コマンドラインのプログラムはどのファイル名で出力したかの情報は出だしてくれません。よって同じファイル名をもったもので探すしか手がないです。 どうしても正確な件数は知りたい時は引数 popPara_ImageList(x,y) の x の次元数「 Ubound(popPara_ImageList,1) 」で出してください。  

 

画像の各種ファイル情報

当VBA関数を実行すると引数 popPara_ImageList(x,y) に以下のコマンドを実行したと同じような内容がセットされます。

上記のハイフン「----」以下の内容を引数 popPara_ImageList(x,y) にセットしています。x は縦方向。y は横方向です。

 

備考

  • 使う人が無いかもしれないと思った割には、作成日数を掛けてしまいました。

 

< Poppler へ戻る >

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

コメントをする時は最低でも以下をお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン