しおりを追加する (createChild)

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


 

説明

 

PDF にしおりを追加します。

しおりには該当ページへ移動する設定 (JavaScript) もします。

JSObject しおりを追加する (createChild)

 

しおりの追加はAcrobat OLE の JSObject 経由で

  • Doc オブジェクト/ bookmarkRoot プロパティ
  • Bookmark オブジェクト/ createChild メソッド
  • Bookmark オブジェクト/ Children プロパティ
  • Bookmark オブジェクト/ insertChild メソッド

を使います。

 


 

Doc オブジェクト/ bookmarkRoot プロパティ

 

説明

しおりツリーのルートしおりを示します。

このしおりは画面に表示されません。

プログラムでツリーや子しおりにアクセスする際に基準として使用されます。

 


Bookmark オブジェクト/ createChild メソッド

 

説明

指定位置に新しいしおりを追加します。

すでに指定位置にしおりが存在するとその上に追加します。
 

形式

JSObject.createChild cName , [cExpr] , [nIndex]

 

引数

  1. 第1引数 (cName) :
    しおりタブに表示するしおりの文字列。 
        
  2. 第2引数 (cExpr) : (オプション)
    ユーザがしおりをクリックするたびに評価する式。
    ここに JavaScript を設定する事もできます。
    省略すると、アクション無しのしおりになります。
      
  3. 第3引数 (nIndex) : (オプション) 
    しおりを追加する位置を指定します。
    通常は0をスタートにして1,2,3と指定します。
    0または無指定時にはトップに追加されます。
    デフォルトは 0 です。
      

Bookmark オブジェクト/ Children プロパティ

 

説明

しおりツリー内の Bookmark オブジェクトの配列を返します


Bookmark オブジェクト/ insertChild メソッド

 

説明

指定のしおりを子として挿入します。

指定のしおりが既にツリーに存在する場合は、一度ツリーから切り離して挿入し直します。

また、挿入の循環が確認され、循環している場合は挿入されません。

これにより、しおりがそれ自体の子または孫として挿入されるのを防ぐことができます。

 

形式

JSObject.insertChild oBookmark , [nIndex]

 

引数

  1. 第1引数 (oBookmark) :
    子として追加する bookmark オブジェクト(しおり)。 
        
  2. 第2引数 (nIndex) : (オプション)
    新しい子を挿入する位置を指定します。
    通常は0をスタートにして1,2,3と指定します。
    デフォルトは 0 です。
           

 





 


 

サンプル:Excel のVBA

 

しおりを追加します。

しおりを上からクリックするとページ1,ページ2,・・・、ページ6を表示します。

JSObject しおりを追加する (createChild)

    

  • F8キーでステップ実行しながら動作確認出来ます。
  • 参照設定を事前にします。

 

 

Option Explicit

'write changes only
Public Const PDSaveIncremental = &H0
'write entire file
Public Const PDSaveFull = &H1
'write copy w’o affecting current state
Public Const PDSaveCopy = &H2
'writes the file linearized for page-served
'remote (net) access.
Public Const PDSaveLinearized = &H4
'/* OK to store binary in file */
Public Const PDSaveBinaryOK = &H10
'perform garbage collection on unreferenced objects ”
Public Const PDSaveCollectGarbage = &H20

Sub JSObject_createChild()
    Dim objAcroApp      As New Acrobat.AcroApp
    Dim objAcroPDDoc    As New Acrobat.AcroPDDoc
    Dim objAcroAVDoc    As New Acrobat.AcroAVDoc
    Dim jso             As Object
    Dim lRet            As Long
    Dim objRootBM       As Object
    Dim objBookMark(5As Object
    Dim result          As Variant
    Dim i               As Long

    Const CON_FILE = "I:¥Adobe PDF¥execMenuItem1.pdf"
     
    'JSObjectオブジェクト作成時のNothingの回避策
    'Acrobatアプリを強制的にメモリにロードする
    lRet = objAcroApp.CloseAllDocs
    
    'F8で見ながらテストする時
    lRet = objAcroAVDoc.Open(CON_FILE, "")
    Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
    objAcroApp.Show

    '本番時だけの開始処理
'    lRet = objAcroPDDoc.Open(CON_FILE)

    Set jso = objAcroPDDoc.GetJSObject

    If Not jso Is Nothing Then

        'しおりのルート設定
        Set objRootBM = jso.bookmarkRoot

        'しおりを追加
        With objRootBM
            .createChild "1.Test1", "this.pageNum=0", 0
            .createChild "1.1 Test1-1", "this.pageNum=1", 1
            .createChild "1.2 Test1-2", "this.pageNum=2", 2
            .createChild "2.Test2", "this.pageNum=3", 3
            .createChild "2.1 Test2-1", "this.pageNum=4", 4
            .createChild "2.1.1 Test2-1-1", "this.pageNum=5", 5
        End With

        'ルートしおり直下のchildを取得、それぞれを参照する

        'オブジェクトを設定
        result = objRootBM.Children
        For i = 0 To UBound(objBookMark)
            Set objBookMark(i) = result(i)
        Next i

        '階層構造を作成
        objBookMark(0).insertChild objBookMark(1), 0
        objBookMark(0).insertChild objBookMark(2), 1
        objBookMark(3).insertChild objBookMark(4), 0
        objBookMark(4).insertChild objBookMark(5), 0

        '終了処理
        For i = 0 To UBound(objBookMark)
            Set objBookMark(i) = Nothing
        Next i
        Set objRootBM = Nothing

    End If
    
    'PDFファイルを保存して閉じます
    lRet = objAcroPDDoc.Save(PDSaveIncremental, CON_FILE)
     
    'Acrobatプロセスを終了
    objAcroApp.CloseAllDocs
    objAcroApp.Hide
    objAcroApp.Exit
    
    'オブジェクトを強制開放する
    Set objAcroPDDoc = Nothing
    Set objAcroAVDoc = Nothing
    Set objAcroApp = Nothing

End Sub

    
※ソースコードHTML変換:SourceConverter

 

 


 

補足

 

  1. Acrobat Reader では動作しません。
    Acrobat Pro 本体がデフォルトでインストールされているパソコン環境だけです。 
      

 

注意

 

  1. 当ページで解説している引数の説明に関してはAcrobat JavaScriptのマニュアルを御覧ください。
    当サイトに質問をされても返事は出来ません。
    理由:質問に返答出来るまで Acrobat JavaScript を理解してないからです。

 

動作確認環境

 

  • Windows 7 64bit Home + SP1 +
    Acrobat 8.3.1 Pro + Office 2007 + フルMicrosoftUpdate

 

Adobe Web 解説 & その他

 

  1. Visual BasicとJavaScriptを併用した、しおりの作成方法
     
  2. Doc オブジェクト/ bookmarkRoot プロパティ
      
  3. Bookmark オブジェクト/ createChild メソッド
     
  4. Bookmark オブジェクト/ Children プロパティ
      
  5. Bookmark オブジェクト/ insertChild メソッド
     
  6. JavaScript™ for Acrobat® API Reference Adobe® Acrobat® SDK バージョン 8.0
    BookMark オブジェクトの日本語解説 
     
  7. JavaScript for Acrobat API Reference (Acrobat v10) 
    BookMark オブジェクトの英語解説 
      

 

サンプル一覧

「しおりを追加する (createChild)」への2件のフィードバック

  1. 『Acrobat7Pro』と『Win7-32bit』の環境下で、実行は出来ているが、日本語のしおりを挿入しようとすると、文字化けが生じています!
    『Win7-64bit』なら日本語のしおり挿入OKと言うことで、違いが生じるのですね・・・?

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin