Office関連

PDFのしおり数を取得するVBAマクロ

VBA Acrobat しおり数」といったキーワード検索でのアクセスがありました。
VBAからPDFファイルに含まれるしおりの数を取得する方法を探している方だろうと思います。

Acrobat JavaScriptでしおりの情報を取得する場合、DocオブジェクトのbookmarkRootプロパティ(Bookmarkオブジェクト)を使うことになります。

VBAから扱う場合も同様で、GetJSObjectメソッド経由で大元のBookmarkオブジェクト(bookmarkRoot)を取得すると、childrenプロパティから各Bookmarkオブジェクトの操作をすることができます。

具体的なコードは下記の通りで、コードを実行すると、しおりの数と各しおりが何ページ目にあるかをDebug.Printで出力します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Option Explicit
 
Public Sub Sample()
  Dim app As Object 'AcroApp
  Dim avdoc As Object 'AcroAVDoc
  Dim avpv As Object 'AcroAVPageView
  Dim jso As Object
  Dim br As Object
  Dim cld As Variant
  Dim i As Long
  Const PdfFilePath = "C:\Test\Test001.pdf"
   
  Set app = CreateObject("AcroExch.App")
  Set avdoc = CreateObject("AcroExch.AVDoc")
  If avdoc.Open(PdfFilePath, "") = True Then
    app.Show 'アプリケーション表示
    Set avpv = avdoc.GetAVPageView
    Set jso = avdoc.GetPDDoc.GetJSObject
    Set br = CallByName(jso, "bookmarkRoot", VbGet)
    cld = CallByName(br, "children", VbGet)
    Debug.Print "しおりの数:" & UBound(cld) + 1
    For i = LBound(cld) To UBound(cld)
      CallByName cld(i), "execute", VbMethod 'しおり選択
      Debug.Print "名前:" & CallByName(cld(i), "name", VbGet) & vbTab & _
                  "ページ:" & avpv.GetPageNum + 1
    Next
    avdoc.Close 1
    app.Hide: app.Exit
  End If
  TerminateAcrobat 'プロセスが残った場合強制終了
End Sub
 
Private Sub TerminateAcrobat()
'Acrobatのプロセス強制終了
  Dim items As Object
  Dim item As Object
   
  Set items = CreateObject("WbemScripting.SWbemLocator") _
            .ConnectServer.ExecQuery("Select * From Win32_Process Where Name = 'Acrobat.exe'")
  If items.Count > 0 Then
    For Each item In items
      item.Terminate
    Next
  End If
End Sub

通常、アプリケーション(AcroApp)をExitすればプロセスも消えてくれるはずなのですが、上記コードを試したときは何故かプロセスが残り続けてしまったので、仕方なく強制終了する処理を入れることにしました。

2021/1/6 追記:
上記コードを一部修正し、PDFの複数階層のしおり情報を取得するVBAマクロを書いてみました。

Officeファイルから作成者などのプロパティを取得するVBScript前のページ

2016年8月の人気記事次のページ

関連記事

  1. Office関連

    MemsourceのバイリンガルMXLIFFファイルから情報を抽出するWordマクロ

    近年翻訳業界では「Trados」や「memoQ」といった、“翻訳支援ツ…

  2. Office関連

    ヘッドレス ChromeとSeleniumBasicでWebページ全体のスクリーンショットを撮る方法…

    先日、ヘッドレス ChromeでWebページ全体のスクリーンショットを…

  3. Office関連

    Excel 2013で駅すぱあとWebサービス APIの「経路探索」を使ってみました。

    「「駅すぱあとWebサービス API無償提供」を利用してみました。」で…

  4. Office関連

    コントロールID 一覧(Office 2013)

    2013/03/25 追記:Office 2013のコントロールI…

  5. Office関連

    SendKeysでWindowsキーを送信するVBAマクロ

    「VBA SendKeys Windowsキー」といったキーワード検索…

  6. アイコン一覧

    Office 2013 アイコン一覧(N)

    ・Office 2013 アイコン一覧 NUM…

コメント

  • コメント (1)

  • トラックバックは利用できません。

    • OHYAMA
    • 2018年 3月 10日 4:05pm

    きぬあさ さん、 はじめまして。
    PDFのしおり数の取得の件でお願いがあります。
    PDF内の全てのしおり数(階層にかかわらず全て)と、そのしおりが何ページ目にあるかを
    取得する方法を教えていただけませんでしょうか。
    どうかよろしくお願いいたします。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

zh-CNzh-TWenfrdejakorues

最近の記事

アーカイブ

PAGE TOP