関数:「PDFのバージョン」を取得する

TOP > サンプル/関数 > 関数:「PDFのバージョン」を取得する      [...]


概要

Acrobat OLE (IAC) には「PDF のバージョン」を取得する機能が見つかりません。

そこで「PDF のバージョン」を取得する当サイト作成のVBA ロジックを以下に紹介します。

PDFのプロパティ画面

お知らせ
以下のコマンドラインツールからでもPDFバージョンは取得できます。
ライセンス上の問題が無ければ、そちらの方をオススメします。

理由:機能的に上記の方が優れていますし、将来的な事を考えると色々な面で有利になると考えています。

ライセンスが難しい時は当ページの関数をお使いください。

 

機能

  1. PDF ファイルをテキスト扱いで読み込む。
    VBA ロジック上ではバイナリーファイル扱いで読み込む。
  2. 先頭7バイトから「PDF のバージョン」に相当する文字列を取得する。
  3. PDF のバージョン」が「1.7(Acrobat 8.x):Acrobat 8 互換」以上の時は、
    「Adobe Extension Level」が含まれているかも確認する。これで
    「1.8 (Acrobat 9.x):Acrobat 9 互換」 又は
    「1.9 (Acrobat 10.x):Acrobat X 互換」
    の判断をする。

 

形式

[boolean] = Get_PDF_Version_nnn2(
string full file path ,
string sPDF_Version ,
long lAcrobat_Version )

 

引数

  1. 第一引数 ( string sFilePath ) :
    PDF ファイルのフルパス
  2. 第二引数 ( string sFilePath ) :
    取得したPDF のバージョン
    第一引数のPDF ファイルパスから、 以下の戻り値を返します。

    戻り値 内容(PDFのバージョン)
      戻り値が””の時はPDF ファイルでない
    %PDF-1.0 1.0 (Acrobat 1.x) : Acrobat 1 互換
    %PDF-1.1 1.1 (Acrobat 2.x) : Acrobat 2 互換
    %PDF-1.2 1.2 (Acrobat 3.x) : Acrobat 3 互換
    %PDF-1.3 1.3 (Acrobat 4.x) : Acrobat 4 互換
    %PDF-1.4 1.4 (Acrobat 5.x) : Acrobat 5 互換
    %PDF-1.5 1.5 (Acrobat 6.x) : Acrobat 6 互換
    %PDF-1.6 1.6 (Acrobat 7.x) : Acrobat 7 互換
    %PDF-1.7 1.7 (Acrobat 8.x) : Acrobat 8 互換
    %PDF-1.7L3 1.7,Adobe Extension Level 3 (Acrobat 9.x) :
    Acrobat 9 互換
    %PDF-1.7L8 1.7,Adobe Extension Level 8 (Acrobat X) :
    Acrobat X 互換
    注意:Acrobat XI (11) も同様のPDF仕様の為
  3. 第三引数 ( long lAcrobat_Version ) :
    取得したPDF のバージョンのAcrobat 互換の番号
    1 ~ 10
    但し、Acrobat XI (11) に関しては 10 を返します。

 

戻り値

  1. True : 正常処理
  2. False : 異常処理。第一引数のファイルがPDFで無い。

 

 

動作するバージョン

Microsoft
Excel
結果
備考
2000
NO
※OS : Windows 98SE
XP
OK
※Office XP [=2002]
2003
OK
Windows XP Pro (SP3 + WindowsUpdate)
2007
OK
Windows 7 64bit Home (SP1)
2010
-
 
  • OK : 正常処理する。
  • NO : 正常に処理できない。
  • - : 未確認。

 





 


VBAサンプル

Downloadsample-GetPDFVersion.xls

 

 

 

備考

  1. Acrobat Preference : avpPrefsVersion」でPDFバージョンを取得出来そうな気がするが、うまく動作しない。
  2. iCnt でループチェックしているのは、処理の高速化を狙いました。
  3. VBAからPDFファイルをテキスト読み込みするとEOFコードに相当する部分も読み込んで、最後までPDFファイルをテキスト読み込み出来ない。よってバイナリーモードで読み込んで、内部ロジックでテキストに変換した後に処理する様にした。
  4. <</AcroForm 22 0 R/Extensions<</ADBE<</BaseVersion/1.7/ExtensionLevel 3>>>>
    <</AcroForm 22 0 R/Extensions<</ADBE<</BaseVersion/1.7/ExtensionLevel 8>>>>
    Level のチェックは上記がベストと考えるが、PDF仕様でのチェックに時間が掛かるので、最小限度とする。
  5. Acrobat 9 互換の時は「PDF のバージョン」は
    「1.7,Adobe Extension Level 3 (Acrobat 9.x) 」となる。
  6. Acrobat X 互換の時は「PDF のバージョン」は
    「1.7,Adobe Extension Level 8 (Acrobat X) 」となる。
  7. Acrobat XI (11) [2012年10月15日 version 11.0 試用DL版] で作成したPDFは、
    Acrobat X (10) と同様のPDFバージョン
    「1.7,Adobe Extension Level 8 (Acrobat X) 」です。 ※テスト結果
  8. Open ステートメントはファイルが存在しない時はエラーにならず、
    GET ステートメントで0バイトのEOFが返される。
  9. PDFバージョンを取得する Acrobat API としては、PDDocGetVersion() が用意されています。
    OLE (IAC) からは当API は呼び出せません。
  10. PDF のバージョンとは」も参照。
  11. 厳密に
    「1.7,Adobe Extension Level 3 (Acrobat 9.x):Acrobat 9 互換」 又は
    「1.7,Adobe Extension Level 3 (Acrobat 10.x):Acrobat X,XI 互換」
    の判断が出来るまでは検証していません。
  12. PDF のバージョン」が 「1.0」、「1.1」、「1.2」 のPDF ファイルの入手が出来なかったので、そのバージョンに関しては未テストです。
  13. 手書きPDF入門」 を ヒント にさせて頂きました。 m(_._)m

 

動作確認環境

  • Windows 98SE (WindowsUpdate) + Excel 2000 (SP3)
  • Windows XP Pro (SP3 + WindowsUpdate) + Excel XP (SP3)
  • Windows XP Pro (SP3 + WindowsUpdate) + Excel 2003 (SP3)
  • Windows 7 64bit Home  (SP1 + MicrosoftUpdate) + Excel 2007 (SP3)

 

サンプル一覧

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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