Excel:PDFの文書プロパティを表示する

TOP > サンプル / 関数 > *      [...]


説明

 

Acrobatのメニュー「ファイル(F)」->「文書のプロパティ(D)」 で表示される文書プロパティ画面の一部が表示出来ます。

Excel:PDFの文書プロパティを表示する

 

サンプル

 

 

Option Explicit

Private Sub CommandButton1_Click()

    'Acrobatオブジェクトの定義&作成
'    Acrobat 4,5,6の時
'    Dim objAcroPDDoc   As Acrobat.CAcroPDDoc
'    Set objAcroPDDoc = CreateObject(“AcroExch.PDDoc”)
'   Acrobat 7,8,9,10,11 の時
    Dim objAcroPDDoc    As New Acrobat.AcroPDDoc
    
    '以降はAcrobat全て共通
    Dim lRet                As Long   '戻り値
    
    Dim strGetFileName      As String
    Dim strGetFlags         As String
    Dim strGetInfo          As String
    Dim strGetNumPages      As String
    Dim strGetPageMode      As String
    Dim strGetPermanentID   As String
    Dim i                   As Long '行
     
    i = 1
    Const CON_NAME = "D:\iac_developer_guide.pdf"
    'PDFオブジェクトをオープンする。
    '注意)Acrobatは画面に表示されない。
    lRet = objAcroPDDoc.Open(CON_NAME)
    Debug.Print "lRet = " & lRet
     
    'PDFファイル名
    strGetFileName = objAcroPDDoc.GetFileName
    Cells(i, 1).Value = "GetFileName = " & strGetFileName
    i = i + 1
     
    'ドキュメント・フラグ
    strGetFlags = objAcroPDDoc.GetFlags
    Cells(i, 1).Value = "GetFlags = " & strGetFlags
    i = i + 1
     
    'PDFファイルの全ページ数
    strGetNumPages = objAcroPDDoc.GetNumPages
    Cells(i, 1).Value = "GetNumPages = " & strGetNumPages
    i = i + 1
     
    'PDFファイルを表示させるモード
    '※参照 C:\Program Files\Adobe\Adobe Acrobat 7.0.5 SDK\InterAppCommunicationSupport\Headers\Visual Basic\iac.bas
    strGetPageMode = objAcroPDDoc.GetPageMode
    Cells(i, 1).Value = "GetPageMode = " & strGetPageMode
    i = i + 1
     
    'パラメータID
    strGetPermanentID = objAcroPDDoc.GetPermanentID
    Cells(i, 1).Value = "GetPermanentID = " & strGetPermanentID
    i = i + 1
    '文書プロパティのタイトル
    strGetInfo = objAcroPDDoc.GetInfo("Title")
    Cells(i, 1).Value = "GetInfo(""Title"") = " & strGetInfo
    i = i + 1
     
    '文書プロパティのサブタイトル
    strGetInfo = objAcroPDDoc.GetInfo("Subject")
    Cells(i, 1).Value = "GetInfo(""Subject"") = " & strGetInfo
    i = i + 1
     
    '文書プロパティの作成者
    strGetInfo = objAcroPDDoc.GetInfo("Author")
    Cells(i, 1).Value = "GetInfo(""Author"") = " & strGetInfo
    i = i + 1
     
    '文書プロパティのキーワード
    strGetInfo = objAcroPDDoc.GetInfo("Keywords")
    Cells(i, 1).Value = "GetInfo(""Keywords"") = " & strGetInfo
    i = i + 1
     
    '文書プロパティの作成者
    strGetInfo = objAcroPDDoc.GetInfo("Creator")
    Cells(i, 1).Value = "GetInfo(""Creator"") = " & strGetInfo
    i = i + 1
     
    '文書プロパティの作成日時
    strGetInfo = objAcroPDDoc.GetInfo("CreationDate")
    Cells(i, 1).Value = "GetInfo(""CreationDate"") = " & strGetInfo
    i = i + 1
     
    '文書プロパティの更新日時
    strGetInfo = objAcroPDDoc.GetInfo("ModDate")
    Cells(i, 1).Value = "GetInfo(""ModDate"") = " & strGetInfo
    i = i + 1
     
    '詳細情報:PDF変換
    strGetInfo = objAcroPDDoc.GetInfo("Producer")
    Cells(i, 1).Value = "GetInfo(""Producer"") = " & strGetInfo
     
    'PDFオブジェクトを解放する。
    objAcroPDDoc.Close
    Set objAcroPDDoc = Nothing
    
End Sub

 





 

備考

 

  1. OpenするPDFファイルはローカルのハードディスク上に存在しないとプロパティは取得出来ません。
  2. OpenするPDFファイルにURL上のPDFを指定すると、objAcrobatPDDoc.Open メソッドでエラーコード(0) が返されます。

 

 

ソースのダウンロード

 

Excel VBAをよく知らない人もいる事だと思い、上記のサンプルをカスタマイズした物をダウンロードできるようにしました。

ExcelシートにPDFファイルのフルパスを入れると、そのPDFファイルの文書プロパティを別のシートに一覧で表示してくれます。

入力例と出力例も入っているので判りやすいと思います。

なお、Windows OSの環境的にはAcrobatのインストールが必要になります。

  • ダウンロード Ver 1.2 
    注意:このファイルは古いのでロジックはこのページサイトを使用してください。

キーボード上の[Alt]+[FK11]キーを同時に押すと、VBAのソースを見ることが出来ます。

 


<PDF:GetInfoプロパティで取得した日付は「yyyy/mm/dd hh:mm:ss」形式では無い?>

D:20061004111453Z =GetInfo(“CreationDate”)
D:20070411123105+09’00′ =GetInfo(“ModDate”)
・GetInfo(“CreationDate”)プロパティ
D:20061004111453Z -> 2006/10/04 11:14:53

・GetInfo(“ModDate”)プロパティ
D:20070411123105+09’00′ -> 2007/04/11 12:31:05

上記の様にフォーマット変換をしてみました。
この内容でPDFの文書プロパティの作成日付と更新日付を比べると
文書プロパティの日付部分のみ

更新日時は同じだが、作成日時の時間部分が異なる。

この理由はコメントを頂いた「のり」さんの意見を参考にさせて頂きます。
基本的に時間はGMTを基本にしている。

作成日時は
「D:20061004111453Z」 ->[2006/10/04 11:14:53]+[9:00]=2006/10/04 20:14:53
となる。 Z は[9:00]を加えて計算する意味を持っている。

更新日時はPDF内の情報の旧バージョンとの互換性を持たせるため、格納上 で情報の持たせ方が異なる。つまりフォーマットが違う。よって更新日時は
D:20070411123105+09’00′ -> [2007/04/11 12:31:05]+[9:00] = 2007/04/11 12:31:05
となる。うしろの「+09’00′」は表記しているので加える必要が無い。

まとめ

  • 作成日時:D:20061004111453Z
    [2006/10/04 11:14:53]+[9:00] -> 2006/10/04 20:14:53
    と計算する。しろのZ=「+9:00」は加えて計算する。
  • 更新日時: D:20070411123105+09’00′
    後の「+09’00′」は無視して、前の日時を使う。
    2007/04/11 12:31:05

推測ですけど。

 

サンプル一覧

「Excel:PDFの文書プロパティを表示する」への11件のフィードバック

  1. はじめまして。私のやりたかった事が「Acrobatアプリケーションを閉じる」ページのコメント欄と近かったもので、非常に助かりました。ありがとうございます。
    すでにお気づきだったらすみません。時間表記については、「作成日の時間部分が異なる」というより、「作成日時と更新日時でフォーマットが違う」という事ではないでしょうか?
    想像ですが、ModDateで得られる文字列の後ろにある数字はGMTに9時間足した時間(=日本時間)という表記法、作成日時の後ろにあるZがZeroか何かの頭文字で補正値なしという意味のように思われます。

  2. のりさん。初めまして。

    そうですね。
    言われてみれば、そんな感じを受けます。
    作成日時の最後にわざわざ「Z」を付ける意味を、更新日時と比べるればのりさんの言っている事が成り立ちます。
    Z = [+9:00] の意味になる。そうすれば表示される作成日時は間違いではなくなる訳ですね。
    ※Adobe社が何でこんな手の込んだ事をする意味は理解出来ないが。

    その考え方、頂きます!

  3. はじめまして。
    PDFのプロパティ情報取得について調べていたらたどり着きました。
    数万件あるPDFファイルの中から、セキュリティ設定がされているもの(印刷の制限がかかっているもの)を取得したいと思っております。
    調べていましたが、なかなかそれらしき情報が見当たらなくて困っています。
    PDFファイルの「文書のプロパティ」のタイトルの取得などは、GetInfo関数で可能ですが、「セキュリティ」に関するものは取得できないですよね。。
    何か取得できる方法ございませんでしょうか?

  4. ひで さん
    はじめまして
    取り急ぎ、思いつく範囲で返答させて頂きます。

    ① 当OLE関連で「印刷のパスワード」が掛かっているかを判断できる情報は無いです。

    ② 但し、「文書を開く」パスワードが掛かっているかの判断は出来ます。以下を御覧ください。
    ACROEXCH.PDDOC: OPEN メソッド
    このOPENの結果でパスワードが掛かっているとFalseが返ってくるのをテストで確認しています。

    ③ PDFTK、QPDF のコマンドラインツールで文書のプロパティ情報をXML形式のテキストで出力した?様な記録が少し・・・。これに関する情報がサイト内に有ったかどうか? 

    上記の③に関しては判り次第、ココにコメントをアップします。

    ※メモ:関数:PDFからメタデータ(XMP)を抽出する
    ※メモ:poppler-utils

    上記の②が参考になることを願ってます。

  5. ひで さんへ。

    2年前の情報と現状を比較検討するのに時間が掛かりました。
    整理した情報はサイトに掲載していますので御覧ください。

    XPDF:コマンドラインのPDFツール
    XPDF : PDFのセキュリティ情報を取得するVBA関数

    GetPdfSecurity関数の戻り値でstrOut(1)=[print:no] の時は「印刷」は「許可しない」設定と思われます。

    ※急ぎ掲載したので未検証部分も有ります。ご指摘を頂ければ幸いです。

    ご検証ください。

  6. 管理人様へ

    情報ありがとうございます!
    XPDFを使用してセキュリティの制限に関する情報を取得することができました!

    記載していただいているロジックは、ほぼそのまま使用させていただきました。
    変更したところは、以下の2点です。
    ・Dir関数によるファイルの存在チェックでファイルパスが256バイトを超えるものがエラーになったので、FileSystemObjectのFileExists関数を利用するようにした。
    ・コマンドラインで実行する際にPDFファイルパスに半角空白が含まれている場合、うまく情報を取得できなかったので、ダブルクォーテーションで囲うようにした。
    あとは、ファイル一覧を取得してループで回して判定してヒットしたものをEXCEL出力という感じです。

    実はこれの前は、PDFファイルを都度開いてタイトルバーに「(保護)」とあればセキュリティ制限がかけられていると判断してというプログラムを作って試していました。
    でもこれでは時間がかなりかかって、途中でよくこけるしで、大変でした。。
    本当に助かりました、ありがとうございます!

  7. 管理人様
    こちらのPDFのプロパティを見るということがまさしくいまやりたいことで参考にさせていただいております。
    管理人様がおいていただいておりますエクセルを頂戴いたしまして、実行しようとするのですが、
     実行時エラー'429'
     ActiveXコンポーネントはオブジェクトを作成できません。
    と出てしまいます。
    誠に初歩的な質問で申し訳ないのですが、
    このエラーを直す手立てはありますでしょうか。
    参照設定らへんがおかしいのかなとは思っているのですが、
    いまいちエラーを直す手立てが分かっておりません。
    当方、アクロバットはAdobe reader XIです。

    誠にお手数をお掛けいたしますが、
    アドバイスいただければ幸いです。

  8. KY さん はじめまして。

    実行したExcelファイルの注意にも書いていますように実行環境には Acrobat 本体のアプリが必要です。
    Acrobat Readerだけでは正常に動作しません。
    その為に出たエラーメッセージです。
    動作環境にAcrobat本体のインストールをして下さい。

    Acrobatが無い場合は他のフリーソフト等のツールをご検討ください。

  9. 管理人様

    アドバイスいただき、誠にありがとうございます。
    すっかり、注意書きを読み落としておりました。
    誠に申し訳ございません。
    大変参考になりました。
    ありがとうございます。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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