説明
Acrobatのメニュー「ファイル(F)」->「文書のプロパティ(D)」 で表示される文書プロパティ画面の一部が表示出来ます。
サンプル
- 参照設定を事前にする必要があります。
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編)
備考
- OpenするPDFファイルはローカルのハードディスク上に存在しないとプロパティは取得出来ません。
- 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
推測ですけど。
< サンプル一覧 >
はじめまして。私のやりたかった事が「Acrobatアプリケーションを閉じる」ページのコメント欄と近かったもので、非常に助かりました。ありがとうございます。
すでにお気づきだったらすみません。時間表記については、「作成日の時間部分が異なる」というより、「作成日時と更新日時でフォーマットが違う」という事ではないでしょうか?
想像ですが、ModDateで得られる文字列の後ろにある数字はGMTに9時間足した時間(=日本時間)という表記法、作成日時の後ろにあるZがZeroか何かの頭文字で補正値なしという意味のように思われます。
のりさん。初めまして。
そうですね。
言われてみれば、そんな感じを受けます。
作成日時の最後にわざわざ「Z」を付ける意味を、更新日時と比べるればのりさんの言っている事が成り立ちます。
Z = [+9:00] の意味になる。そうすれば表示される作成日時は間違いではなくなる訳ですね。
※Adobe社が何でこんな手の込んだ事をする意味は理解出来ないが。
その考え方、頂きます!
はじめまして。
PDFのプロパティ情報取得について調べていたらたどり着きました。
数万件あるPDFファイルの中から、セキュリティ設定がされているもの(印刷の制限がかかっているもの)を取得したいと思っております。
調べていましたが、なかなかそれらしき情報が見当たらなくて困っています。
PDFファイルの「文書のプロパティ」のタイトルの取得などは、GetInfo関数で可能ですが、「セキュリティ」に関するものは取得できないですよね。。
何か取得できる方法ございませんでしょうか?
ひで さん
はじめまして
取り急ぎ、思いつく範囲で返答させて頂きます。
① 当OLE関連で「印刷のパスワード」が掛かっているかを判断できる情報は無いです。
② 但し、「文書を開く」パスワードが掛かっているかの判断は出来ます。以下を御覧ください。
ACROEXCH.PDDOC: OPEN メソッド
このOPENの結果でパスワードが掛かっているとFalseが返ってくるのをテストで確認しています。
③
PDFTK、QPDF のコマンドラインツールで文書のプロパティ情報をXML形式のテキストで出力した?様な記録が少し・・・。これに関する情報がサイト内に有ったかどうか?上記の③に関しては判り次第、ココにコメントをアップします。
※メモ:関数:PDFからメタデータ(XMP)を抽出する
※メモ:poppler-utils
上記の②が参考になることを願ってます。
ひで さんへ。
2年前の情報と現状を比較検討するのに時間が掛かりました。
整理した情報はサイトに掲載していますので御覧ください。
・XPDF:コマンドラインのPDFツール
・XPDF : PDFのセキュリティ情報を取得するVBA関数
GetPdfSecurity関数の戻り値でstrOut(1)=[print:no] の時は「印刷」は「許可しない」設定と思われます。
※急ぎ掲載したので未検証部分も有ります。ご指摘を頂ければ幸いです。
ご検証ください。
管理人様へ
情報ありがとうございます!
XPDFを使用してセキュリティの制限に関する情報を取得することができました!
記載していただいているロジックは、ほぼそのまま使用させていただきました。
変更したところは、以下の2点です。
・Dir関数によるファイルの存在チェックでファイルパスが256バイトを超えるものがエラーになったので、FileSystemObjectのFileExists関数を利用するようにした。
・コマンドラインで実行する際にPDFファイルパスに半角空白が含まれている場合、うまく情報を取得できなかったので、ダブルクォーテーションで囲うようにした。
あとは、ファイル一覧を取得してループで回して判定してヒットしたものをEXCEL出力という感じです。
実はこれの前は、PDFファイルを都度開いてタイトルバーに「(保護)」とあればセキュリティ制限がかけられていると判断してというプログラムを作って試していました。
でもこれでは時間がかなりかかって、途中でよくこけるしで、大変でした。。
本当に助かりました、ありがとうございます!
ひで さんへ。
v(^_^) グッジョブ!
読んでくれますように。(願
管理人様
こちらのPDFのプロパティを見るということがまさしくいまやりたいことで参考にさせていただいております。
管理人様がおいていただいておりますエクセルを頂戴いたしまして、実行しようとするのですが、
実行時エラー'429'
ActiveXコンポーネントはオブジェクトを作成できません。
と出てしまいます。
誠に初歩的な質問で申し訳ないのですが、
このエラーを直す手立てはありますでしょうか。
参照設定らへんがおかしいのかなとは思っているのですが、
いまいちエラーを直す手立てが分かっておりません。
当方、アクロバットはAdobe reader XIです。
誠にお手数をお掛けいたしますが、
アドバイスいただければ幸いです。
KY さん はじめまして。
実行したExcelファイルの注意にも書いていますように実行環境には Acrobat 本体のアプリが必要です。
Acrobat Readerだけでは正常に動作しません。
その為に出たエラーメッセージです。
動作環境にAcrobat本体のインストールをして下さい。
Acrobatが無い場合は他のフリーソフト等のツールをご検討ください。
管理人様
アドバイスいただき、誠にありがとうございます。
すっかり、注意書きを読み落としておりました。
誠に申し訳ございません。
大変参考になりました。
ありがとうございます。
いつもお世話になっております。
・Acrobat バージョン:Acrobat Standard DC
PDFの文書のプロパティ([ファイル]-[プロパティ])の詳細設定に下記があると思います。
印刷ダイアログプリセット-ページの拡大/縮小
初期値は「デフォルト」となっていますが、これを「なし」に変更したいのです。
この方法をご存知であれば教えていただきたいと思いコメントしました。
宜しくお願い致します。
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)
②から③はココのロジックを参考にして下さい。(遅いヨ!
管理人さん
お返事ありがとうございます。
ご提案いただいた方法で現在作成中です。
完成したら報告しますね。
取り急ぎ報告まで。
管理人さんが提示くださった情報で作成する事ができました。
※ダミーファイル使用
私が現在作成しているのは下記の仕様です。
指定したファイルを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に詳しくない為、教えていただけたら助かります。
宜しくお願いします。
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バージョンが統一されるのなら、なおさら問題ないと思われます。
コチラの勘違いが有れば、ご指摘下さい。(ドド~ンと
管理人さん
バージョンについて、ご提示いただいた方法で設定できました。
ありがとうございます。
ただダミーを1.5で作成し実行しましたが、やはり1.6に変更されてしまいました。
この点については仕方ない事なんですかねぇ。
今回の本題は以下です。
以前しおりの件でcpdf.exeをご提案いただき、それを使用して無事作成する事ができました。
今回の、[文書のプロパティ]-[印刷ダイアログプリセット]-[拡大/縮小]の設定を
cpdfで行う事はできないのでしょうか?
自分でも調べてみますが、もし出来るか出来ないかだけでもご存知であれば
教えていただきたいです。
宜しくお願い致します。
tmk さんへ。
先に cpdf.exe の方から。
残念ですが、その様な機能は「無い」と思います。
cpdf.exe はかなりの期間で動作検証したので、ほぼ間違いないです。
>・・・仕方ない事なんですかねぇ。
イヤっ、・・それは~・・。(汗
PDFバージョンの件は、思い違いでした・・;。
こちらの環境はAcrobat XI Proです。DCのテスト用の環境はあったのですが・・。今見たら、環境が壊れていました。
以上、宜しくお願いいたします。
▼2018/8/27 21:56 追記
追加情報が後日、出ます。
tmkさんへ。
以下を御覧ください。
PDFバージョンの変化
管理人さん
検証してくださったり、説明ページを作成してくださったり、本当にどうもありがとうございます。
参考になりました。
今回はDistillerで作成したPDFを上書き保存するという方法でバージョンを統一する事にしました。
(Distillerの設定はあまり変えたくない為)
また何かありましたら宜しくお願い致します。
tmk さんへ。
検証ページを作ったのは説明が楽だからです。
正確に伝えるには専用ベージが一番です。
しかし、しゅ、修正が・・、間に合わなかった。(汗