しおりを追加する (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) : (オプション)
    ユーザがしおりをクリックするたびに評価する式。
    ここに Acrobat 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を表示します。また、しおり「1.Test1」を操作すると同時に「ビープ音が鳴る」Acrobat JavaScript  [ app.beep(0); ] を追加します。

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

 

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

Downloadsample-JSObject_createChild.xls

 


補足

 

  1. Bookmark オブジェクト/ setAction メソッドでしおりにAcrobat JavaScriptを設定出来ます。しかし、そのしおりで既に定義されているアクションが上書きされます。
     
  2. Acrobat Reader では動作しません。
    Acrobat Pro 本体がデフォルトでインストールされているパソコン環境だけです。   

 

注意

 

  1. ここのサンプルはしおりの操作後のページ移動に Acrobat JavaScript を使っています。通常は「この文書内のページを表示」と言うしおり標準のアクションを使います。それにしたい場合は以下を御覧ください。
    CPDF:メッチャ多機能なPDFのコマンドライン・ツール
    上記の「しおりの抽出、削除、登録」を参考にしてください。しおりでの移動先ページ番号は指定できますが「G5.557309」の様な移動先は指定できません。
     
  2. コメントから、Acrobat プロセスが終了しないご指摘が有りました。試行錯誤の結果、強制的にAcrobat プロセスを終了させるロジックを追加しました。なお、6秒という数値は経験則から出したものです。(勘
     
  3. 当ページで解説している引数の説明に関してはAcrobat JavaScriptのマニュアルを御覧ください。 当サイトに質問をされても返事は出来ません。
    理由:質問に返答出来るまで Acrobat JavaScript を理解してないからです。

 

動作確認環境

 

  • Windows 10 Pro 64bit +
    Acrobat XI Pro + Office 2007 + MicrosoftUpdate
  • 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 オブジェクトの英語解説 
      
  8. PDFのしおり数を取得するVBAマクロ
    VBAから指定プロセスを強制終了させるサンプル有り

 

サンプル一覧

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

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

  2. 管理人さん

    他のページでは大変お世話になりました。
    今度はこちらのページで失礼いたします。

    こちらのプログラムを参考にしてしおりを作成しています。
    私のプログラムではプロセスが残る為、
    こちらのプログラムをそのまま実行したところ、やはり残るようです。

    しおり作成部分を飛ばせばプロセスは消えます。
    (Set jso = objAcroPDDoc.GetJSObject~
    lRet = objAcroPDDoc.Save(PDSaveIncremental, CON_FILE) の
    前まで飛ばす)

    私の環境だけでしょうか?
    お時間のある時にご返信いただけると幸いです。

  3. tmk さんへ。

    「'オブジェクトを強制開放する 」の部分に以下を追加してみて下さい。(汗:漏れていました

    Set jso = Nothing

    VBA本体は基本的に「変数がスコープ領域を出るとその変数(やオブジェクト)を自動的に開放する」と言う機能が付いています。しかし、それが正しく機能しない場合が有ります。それで「オブジェクトを強制開放する 」と言うロジックをあえて追加しています。
    バージョン Office 2007 系は、その点はまだ完全でないみたいです。

    「Dim ・・・ As New.・・・」
    「Dim ・・・ As Object」
    「Set ・・」
    等で使っている変数は最後に強制的に
    「Set ・・・ = Nothing 」
    しないと駄目みたいです。

    ご検証ください。

  4. 管理人さん

    ご返信ありがとうございます。

    Nothingは私も考えたので追記しましたが、それでも残ってしまいました。

    どうやら下記の部分を通ると残ってしまうようです。
    result = objRootBM.Children

    resultの初期化等、色々試してみましたが消えませんでしたので、
    下記のページを参考に、プロセスを強制終了する事にしました。
    https://www.ka-net.org/blog/?p=7244

    宜しくお願い致します。

  5. tmk さんへ

    確かにご指摘の箇所以降はプロセスが終わりません。
    これでもか!、なんのそこ!、これならど~だ!(汗)とあの手この手でやってみましたが、終わりません。
    教えていただいたロジックを追加させて頂きました。
    ※タブン、3日ほどしたら思い出した様にまた挑戦すると思います。

    それと・・。
    ここのサンプルはしおりの操作後のページ移動にAcrobat JavaScriptを使っています。
    通常は「この文書内のページを表示」と言うしおり標準のアクションを使います。
    それにしたい場合は以下を御覧ください。
    CPDF:メッチャ多機能なPDFのコマンドライン・ツール
    上記の「しおりの抽出、削除、登録 / 3.サンプル:しおりの登録」を参考にしてください。
    しおりでの移動先ページ番号は指定できますが「G5.557309」の様な移動先は指定できません。(タブン
    但し倍率の指定は無いので、解っていると思いますが、プラグイン操作が後で必要になります。
    最近追加した部分で、テスト済みです。
    ライセンスが少しヤヤコシイ感じがしますが。

    プロセスの件は解決策も含めて、ありがとうございました。

  6. 管理人さん

    しおりの件、ありがとうございます。
    実は管理人さんのページを参考に、CPDFでしおりを作成しております。
    とても勉強になりました。

    プロセスの件は、やはり残ってしまうようですね・・・。
    強制終了はやはりあまりしたくないので、いつか解決できる事を祈っています。

  7. tmk さんへ

    プロセスの強制終了は後々の事を考えると確かにやりたくない、しかし現状は仕方が無い、ですね。

    あとコチラの話ですが、以下はご報告まで。

    プラグインが機能しない件が判りました。
    しおりが以下の状態の時はプラグインは変更対象にしません。
    移動先を使用」の場合は無視します。
    「この文書内のページを表示」 / 「移動先を使用」

    プラグインが変更対象に出来るしおりは以下のモノです。
    ページ番号を使用」の場合は更新対象にします。

    「この文書内のページを表示」 / 「ページ番号を使用」

    CPDFでのしおり作成は下の「ページ番号を使用」なのでプラグインの使用は当然問題無いです。
    私が動作確認したPDFは全て「移動先を使用」のしおりを使用したPDFでした。それでプラグインが機能しなかったみたいです。
    最初にプラグインの機能を拝見した時に変な違和感を感じました。その違和感が上記の違いだったんです。

    ?、って事はこのプラグインを使う時はPDFのしおりがどっちの状態かを判断しないといけないという事です、ネ。 ・・・まあ、それは要望が有った時にでも考えます。(汗)

    以上、ご連絡させて頂きます。

  8. 管理人さん

    ご報告ありがとうございます。
    とても参考になりました。

    また何かありましたら、宜しくお願い致します。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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