Poppler:PDFの添付ファイル一覧を取得するVBA関数

TOP > Poppler ツール > *


P.Vongsuri_7028246

概要

PDFの添付ファイルの数とファイル名を取得します。

Acrobat OLE を使わずに Poppler の pdfdetach.exe を使用します。

  1. 事前に各種エラーチェック
  2. 「-list」オプションでPDFの添付ファイル数を確認する。
    ゼロ件の時は以降の処理をスキップする。
  3. 添付ファイルのファイル名一覧を抽出する。

 

Poppler とは

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

 

形式

 

引数

  1. 第1引数 : popPara_InPdfPath As String  (In)
    入力のPDFファイルのフルパス
  2. 第2引数 : popPara_InPdfPassword As String  (In)
    入力のPDFファイルのユーザーパスワード。無ければ""。
  3. 第3引数 : popPara_OutFileName() As String (Out)
    添付ファイルのファイル名
  4. 第4引数 : popPara_FileCount As Long  (Out)
    添付ファイルのファイル数
  5. 第5引数 : strCmdMsg() As String  (Out)
    コマンドラインで表示された内容

    • strCmdMsg(0) : 標準出力
    • strCmdMsg(1) : 標準エラー出力
  6. 第6引数 : strErr As String  (Out)
    プログラム内のエラーメッセージ。エラー無しは ""。

 

戻り値

無し。

 

関数 / サンプル





事前設定

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

サンプル

  • A-de-007.pdf から添付ファイルの数とファイル一覧を取得します。
  • A-de-007.pdf のユーザーパスワードは「def」です。

 

 

結果

▽正常終了の時

Poppler:PDFの添付ファイル一覧を取得するVBA関数

上記は関数内で編集したメッセージです。

▽ユーザーパスワードが間違っている時

Poppler:PDFの添付ファイル一覧を取得するVBA関数

上記の1段目はプログラム内からのエラーメッセージ。2段目はコマンドラインからのエラーメッセージです。

▽添付ファイルがゼロ件の時

Poppler:PDFの添付ファイル一覧を取得するVBA関数

上記は1段目と2段目はプラグラム内で編集したメッセージです。3段目がコマンドラインからのメッセージです。

 

結果の判断方法

popListEembeddedFiles 関数の戻り値で判断します。以下は優先順位を含めて解説します。

  1. 添付ファイル数でゼロ件が返された時:
    InStr(strCmdMsg(0), "0 embedded files") > 0 の時です。
    strCmdMsg(0)には改行コードも入っているので
    strCmdMsg(0) = "0 embedded files" の判定は出来ない。
  2. 関数内のプラグラムでエラーが発生した時:
    strErr <> "" の時です。
  3. コマンドラインの実行時にエラーを返された時:
    strCmdMsg(1) <> "" の時です。

詳細はサンプル内の「Sub Main_Demo 」のpopListEembeddedFiles 関数使用後の処理コードを参照してください。

 

 

PDFの添付ファイル

  1. POPPLER:PDFの添付ファイルを保存するVBA関数
  2. PDF の3つのパスワード  ※添付ファイルのパスワードの話

 

備考

  1. 関数の以下の引数は配列数を宣言してないことに注意。
    関数内でReDim で再宣言するからです。

    • Dim popPara_OutFileName()   As String
  2. コマンドラインの標準出力のテキストがUTF-8の為に日本語文字が化けてしまいます。その為のやや複雑な処理が入っています。
  3. この pdfdetach.exe は日本語の扱いが現在は出来ません。VBA関数で操作すると日本語の問題をカバーできるので、かえってこちらのVBA関数の方が便利だと思います。

 

< Poppler へ戻る

 


 

技術メモ

これ以降は当関数に関する作成者の技術メモです。見なくても結構です。後のメンテナンスの時に見ます。

基本

  1. Poppler も Xpdf も pdfdetach.exe の技術仕様は基本的に同じのはずです。
  2. 日本語名の添付ファイルを pdfdetach.exe で表示するとファイル名は文字化けを起こします。Xpdf では日本語の言語ファイルが有るので「-enc Shif-JIS」オプションで日本語は扱えますがファイル名は全て「全角文字」になってしまいます。Poppler であろうと Xpdf であろうと日本語を意識するとファイル名の扱いにどうしようもなく対応に困る問題が出ます。しかし、当関数はその問題を全て解決する様に処理を行っています。半角文字は半角で、全角文字は全角でファイル名を処理しています。

標準出力と標準エラー出力について

  1. コマンドラインでの結果を標準出力と標準エラー出力の2つのテキストに出力できます。標準出力は正常の結果内容。標準エラー出力はエラー時のメッセージ内容。たまに逆に出力しているプログラムの有りますが、一応はこの形です。
  2. pdfdetach.exe で「-list」オプションを実行してます。この時は標準出力があって、標準出力エラーが無い時が正常終了を意味してます。
  3. 標準出力と標準エラー出力共にUTF-8のコードでテキストに出力します。よってVBAで読み込む時は変換して読み込む必要が有ります。つまりVBAの通常のテキスト入力ではダメです。

エラーメッセージの扱い

  1. 当VBA関数でのエラーの判定は優先順位:上が高、下が低。
    1. strErr : VBA関数内でのエラーの内容
    2. strCmdMsg( 1 ) : コマンドラインの標準エラー出力の内容
    3. strCmdMsg( 0 ) : コマンドラインの標準出力の内容
  2. 上記ではstrCmdMsg( 0 )の内容も見る必要があります。理由は添付ファイルを保存する前「-list」オプションを実行し、strCmdMsg( 0 )=「0 embedded files」でないかをチェックする必要があるからです。
  3. strErr も strCmdMsg( 1 ) もブランクの時は正常処理。
  4. 詳細はVBA関数のサンプル「Sub Main_demo」を参照。

 

< Poppler へ戻る

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin