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

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


説明

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

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

サンプル

001 Option Explicit 002 003 Private Sub CommandButton1_Click() 004 005 'Acrobatオブジェクトの定義&作成 006 ' Acrobat 4,5,6の時 007 ' Dim objAcroPDDoc As Acrobat.CAcroPDDoc 008 ' Set objAcroPDDoc = CreateObject(“AcroExch.PDDoc”) 009 ' Acrobat 7,8,9,10,11 の時 010 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 011 012 '以降はAcrobat全て共通 013 Dim lRet As Long '戻り値 014 015 Dim strGetFileName As String 016 Dim strGetFlags As String 017 Dim strGetInfo As String 018 Dim strGetNumPages As String 019 Dim strGetPageMode As String 020 Dim strGetPermanentID As String 021 Dim i As Long '行 022 023 i = 1 024 Const CON_NAME = "D:\iac_developer_guide.pdf" 025 'PDFオブジェクトをオープンする。 026 '注意)Acrobatは画面に表示されない。 027 lRet = objAcroPDDoc.Open(CON_NAME) 028 Debug.Print "lRet = " & lRet 029 030 'PDFファイル名 031 strGetFileName = objAcroPDDoc.GetFileName 032 Cells(i, 1).Value = "GetFileName = " & strGetFileName 033 i = i + 1 034 035 'ドキュメント・フラグ 036 strGetFlags = objAcroPDDoc.GetFlags 037 Cells(i, 1).Value = "GetFlags = " & strGetFlags 038 i = i + 1 039 040 'PDFファイルの全ページ数 041 strGetNumPages = objAcroPDDoc.GetNumPages 042 Cells(i, 1).Value = "GetNumPages = " & strGetNumPages 043 i = i + 1 044 045 'PDFファイルを表示させるモード 046 '※参照 C:\Program Files\Adobe\Adobe Acrobat 7.0.5 SDK\InterAppCommunicationSupport\Headers\Visual Basic\iac.bas 047 strGetPageMode = objAcroPDDoc.GetPageMode 048 Cells(i, 1).Value = "GetPageMode = " & strGetPageMode 049 i = i + 1 050 051 'パラメータID 052 strGetPermanentID = objAcroPDDoc.GetPermanentID 053 Cells(i, 1).Value = "GetPermanentID = " & strGetPermanentID 054 i = i + 1 055 '文書プロパティのタイトル 056 strGetInfo = objAcroPDDoc.GetInfo("Title") 057 Cells(i, 1).Value = "GetInfo(""Title"") = " & strGetInfo 058 i = i + 1 059 060 '文書プロパティのサブタイトル 061 strGetInfo = objAcroPDDoc.GetInfo("Subject") 062 Cells(i, 1).Value = "GetInfo(""Subject"") = " & strGetInfo 063 i = i + 1 064 065 '文書プロパティの作成者 066 strGetInfo = objAcroPDDoc.GetInfo("Author") 067 Cells(i, 1).Value = "GetInfo(""Author"") = " & strGetInfo 068 i = i + 1 069 070 '文書プロパティのキーワード 071 strGetInfo = objAcroPDDoc.GetInfo("Keywords") 072 Cells(i, 1).Value = "GetInfo(""Keywords"") = " & strGetInfo 073 i = i + 1 074 075 '文書プロパティの作成者 076 strGetInfo = objAcroPDDoc.GetInfo("Creator") 077 Cells(i, 1).Value = "GetInfo(""Creator"") = " & strGetInfo 078 i = i + 1 079 080 '文書プロパティの作成日時 081 strGetInfo = objAcroPDDoc.GetInfo("CreationDate") 082 Cells(i, 1).Value = "GetInfo(""CreationDate"") = " & strGetInfo 083 i = i + 1 084 085 '文書プロパティの更新日時 086 strGetInfo = objAcroPDDoc.GetInfo("ModDate") 087 Cells(i, 1).Value = "GetInfo(""ModDate"") = " & strGetInfo 088 i = i + 1 089 090 '詳細情報:PDF変換 091 strGetInfo = objAcroPDDoc.GetInfo("Producer") 092 Cells(i, 1).Value = "GetInfo(""Producer"") = " & strGetInfo 093 094 'PDFオブジェクトを解放する。 095 objAcroPDDoc.Close 096 Set objAcroPDDoc = Nothing 097 098 End Sub


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

備考

  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の文書プロパティを表示する」への21件のフィードバック

  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. 管理人様

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

  10. いつもお世話になっております。

    ・Acrobat バージョン:Acrobat Standard DC

    PDFの文書のプロパティ([ファイル]-[プロパティ])の詳細設定に下記があると思います。

    印刷ダイアログプリセット-ページの拡大/縮小

    初期値は「デフォルト」となっていますが、これを「なし」に変更したいのです。

    この方法をご存知であれば教えていただきたいと思いコメントしました。
    宜しくお願い致します。

  11. tmk さんへ。

    >印刷ダイアログプリセット-ページの拡大/縮小

    残念ですが、この部分の設定に関する情報は当サイトには有りません。
    英語圏も検索「Acrobat Advanced "Print Dialog Presets" "Page Scaling" None 」してみましたが、同様な質問が有るだけでした。正確には見つけることが出来なかった、です。

    但し、条件が許せば、裏ワザ的なやり方をご提案できます。
    手順:
    ① 印刷ダイアログプリセット等の文書プロパティを設定した状態のPDFファイルを事前に用意します。ダミーページを1頁入れたPDFファイルとします。このPDFを今後「AのPDF」と言います。
    ※PDFはゼロ頁のファイルは許されてないのでダミーページを入れます。
    ② 処理したいPDFの全ページをAのPDFへ挿入(追加)します。
    ③ 追加されたAのPDFから事前に入っていたダミーページを削除します。
    ④ AのPDFの文書プロパティ(概要開き方、等)を挿入前のPDFの情報を元に必要ならば更新します。
    ⑤ AのPDFを別名で保存します。

    かなり手間の掛かる内容です。
    でも文書プロパティのかなりの部分を一度に統一する事が出来ます。
    ご検討下さい。

    2018/8/8 8:50 追記
    ・しおりも同時にコピーされたかは不明です。

    2018/8/8 8:52 追記(2)
    似たような質問は過去にもいくつか受けています。
    これに関してのサンプルを早急に用意したいと思っています。

    2018/8/8 19:43 追記(3)
    ②から③はココのロジックを参考にして下さい。(遅いヨ!

  12. 管理人さん

    お返事ありがとうございます。
    ご提案いただいた方法で現在作成中です。

    完成したら報告しますね。

    取り急ぎ報告まで。

  13. 管理人さんが提示くださった情報で作成する事ができました。
    ※ダミーファイル使用

    私が現在作成しているのは下記の仕様です。

    指定したファイルをPDFに変換、変換したPDFの文書のプロパティの拡大/縮小を変更
    ※チェックボックスを配置し、それにチェックが付いていたら拡大/縮小はなし

    今回の処理を追加前は「PdfDistiller」で作成していました。
    今回の処理(AcroPDDocで保存)を追加しましたが、
    文書のプロパティにあるPDFのバージョンがPdfDistillerで作成したものと異なります。

    以下の方法で試してみました。

    ①PdfDistillerで作成
    ②PdfDistillerで作成したPDFをAcroPDDocで保存
    ③手動:Excelの印刷でプリンタ「Adobe PDF」を選択し作成

    PDFのバージョン
    ①⇒1.5(Acrobat 6.X)
    ②⇒1.6(Acrobat 7.X)
    ③⇒1.4(Acrobat 5.X)

    それぞれバージョンが違う為、このような事になるのでしょうか?

    拡大/縮小のデフォルト・なし、どちらでも同じバージョンとしたい為、
    拡大/縮小がデフォルトのままの場合はPdfDistillerで作成だけで済みますが
    その後にAcroPDDocで開き上書き保存をしています。
    これだとバージョンが統一されますが、問題ないでしょうか?

    管理人さんに質問すべき事ではないのかもしれませんが
    PDFに詳しくない為、教えていただけたら助かります。

    宜しくお願いします。

  14. tmkさんへ。

    仕様内容から判断すると、ダミーPDFを使っての設定方法に問題は無いと思われます。

    PDFバージョンの話ですが、

    >①PdfDistillerで作成

    PdfDistillerとは以下の「Acrobat Distiller」の事でしょうか?

    これならば上記画面で[設定] -> [Adobe PDF 設定の編集] を選択します。以下の画面が表示されたら、[一般] -> [互換性のある形式] でPDFバージョンが指定できます。(タブン

     

    >②PdfDistillerで作成したPDFをAcroPDDocで保存

    これは「PdfDistillerで作成したPDF」をページコピーでダミーPDFへ保存する、という事でしょうか。そうならばダミーPDFが持っているPDFバージョンで保存されるはずです。(タブン

     

    >③手動:Excelの印刷でプリンタ「Adobe PDF」を選択し作成

    印刷ダイアログで [プロパティ] をクリック。

    以下の画面が出たら、[PDF設定] -> [編集]ボタン をクリックし、更に次の画面が表示したら、そこからPDFバージョンを選択する処理を行います。

    以上でPDFバージョンの指定が可能だと思います。

     

    ②の結果に、①と③を合わせたらどうでしょうか。
    よって、①、②、③ 共にバージョンをコントロールして統一可能だと思っています。(猛暑で意識が・・

    >これだとバージョンが統一されますが、問題ないでしょうか?

    tmkさんのやり方で最終的にバージョン統一されるなら「問題ない」と思っています。

    >PDFに詳しくない為、・・

    私は今でも自分を「ドド~ンと素人」と思っています。(真顔

    PDFバージョンはAcrobatによって作られる特殊な表現の時のみ意識する必要がある内容で、tmkさんの様に「ファイルからPDFを作成」してからの後処理的なモノの場合は、特に意識する必要は無いと思っています。最終的にPDFバージョンが統一されるのなら、なおさら問題ないと思われます。

    コチラの勘違いが有れば、ご指摘下さい。(ドド~ンと

  15. 管理人さん

    バージョンについて、ご提示いただいた方法で設定できました。
    ありがとうございます。

    ただダミーを1.5で作成し実行しましたが、やはり1.6に変更されてしまいました。
    この点については仕方ない事なんですかねぇ。

    今回の本題は以下です。

    以前しおりの件でcpdf.exeをご提案いただき、それを使用して無事作成する事ができました。

    今回の、[文書のプロパティ]-[印刷ダイアログプリセット]-[拡大/縮小]の設定を
    cpdfで行う事はできないのでしょうか?

    自分でも調べてみますが、もし出来るか出来ないかだけでもご存知であれば
    教えていただきたいです。

    宜しくお願い致します。

  16. tmk さんへ。

    先に cpdf.exe の方から。
    残念ですが、その様な機能は「無い」と思います。
    cpdf.exe はかなりの期間で動作検証したので、ほぼ間違いないです。

    >・・・仕方ない事なんですかねぇ

    イヤっ、・・それは~・・。(汗
    PDFバージョンの件は、思い違いでした・・;。

    こちらの環境はAcrobat XI Proです。DCのテスト用の環境はあったのですが・・。今見たら、環境が壊れていました。

    以上、宜しくお願いいたします。

    ▼2018/8/27 21:56 追記
    追加情報が後日、出ます。

  17. 管理人さん

    検証してくださったり、説明ページを作成してくださったり、本当にどうもありがとうございます。
    参考になりました。

    今回はDistillerで作成したPDFを上書き保存するという方法でバージョンを統一する事にしました。
    (Distillerの設定はあまり変えたくない為)

    また何かありましたら宜しくお願い致します。

  18. tmk さんへ。

    検証ページを作ったのは説明が楽だからです。
    正確に伝えるには専用ベージが一番です。
    しかし、しゅ、修正が・・、間に合わなかった。(汗

コメントを残す

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

CAPTCHA


★ 文章での質問は難しいですよネ。でも、早く解決して、家に帰りたい。


SAMURAI Plugin

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

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



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

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