LoginSignup
4

More than 3 years have passed since last update.

ExcelVBAのみでPDFファイルのページ数を取得する

Posted at

はじめに

仕事でPDFファイルを扱うことは多々あります。
ですが、AcrobatReaderのみの環境でVBAから参照可能なAcroPDFではPDFファイルのページ数は取得できません。

目的

VBAでPDFのページ数を調べたい。

処理フロー

1、PDFファイルをADODB.Streamからテキストファイルとして読み込み
2、読み込んだソースコードから「/Count n」を探す
3、nを数値に変換(=総ページ数)

サンプルコード
Function getPDFPageCount(ByVal path As String) As Long
On Error GoTo Error1

Dim PDFSourceText As String
With CreateObject("ADODB.Stream")
    .Charset = "UTF-8"
    .Open
    .LoadFromFile path
    PDFSourceText = .ReadText
    .Close
End With

Dim RegExpMatchCollection As Object
Dim RegExpMatch As Object
With CreateObject("VBScript.RegExp")
    .Pattern = "(/Count )\d*"
    .MultiLine = True
    Set RegExpMatchCollection = .Execute(PDFSourceText)
    Set RegExpMatch = RegExpMatchCollection.Item(0)
    getPDFPageCount = CLng(Val(Mid(RegExpMatch.value, 8)))
End With

Exit Function

Error1:

getPDFPageCount = CLng(-1)

End Function

解説

PDFファイルの構造上、「/Count 」はソーステキストに1回しか出現しないこと、通常表示される文字列はStreamオブジェクト内に圧縮されているため正規表現にマッチしないことからページ数の抜き出しが可能となっています。

補足

「/Count 」の他にも構文解析で読み取れる情報はありそう。
「/Mediabox 」で用紙サイズとか。

最後に

ファイルのページ数は結構使い道があるだけにAcroPDFで参照できない(させない)のも納得。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4