4 返信 最新の回答 日時: May 26, 2006 12:19 PM ユーザー:(honey_pot)

    レイヤーをJavaScriptから制御したい

      Acrobat 7.0 のレイヤーをフォームのJavaScriptから、表示/非表示を制御したいのですが、レイヤーをコントロールするJavaScriptの記述方法をご存知でしたら教えてください。
        • 1. Re: レイヤーをJavaScriptから制御したい
          Level 1
          以下のサイトが参考になるはず。

          ・Focus on PDF Layers (OCG)
          http://www.planetpdf.com/developer/article.asp?ContentID=6527

          レイヤーはOCG(Optional Content Groupsの略)に属するが、これを全ページ分にわたって表示/非表示を切り替える手法がそこにはのっている。

          // Visible
          var docOCGs = this.getOCGs();
          for (var x=0; x < docOCGs.length; x++)
          {
          docOCGs[x].state = true;
          }

          // InVisible
          var docOCGs = this.getOCGs();
          for (var x=0; x < docOCGs.length; x++)
          {
          docOCGs[x].state = false;
          }

          あとは、ページ指定、レイヤーの名前指定などをさがせばよいわけだ。このあたりは「Acrobat JavaScript Scripting Reference 7.0.5」や「Acrobat JavaScript Scripting Guide 7.0.5」に載っているはず。
          キーワードは上記内サンプル内から探れるだろう。

          上記サイトにもあるが、以下のようにすれば、現在のレイヤー表示状態を逆にすることになる。これをボタンのアクションに設定すると、1つのボタンでレイヤーの表示/非表示ができる。

          var docOCGs = this.getOCGs();
          for (var x=0; x < docOCGs.length; x++)
          {
          docOCGs[x].state = !docOCGs[x].state;
          }

          質問者は、スクリプトが完成したら、情報共有のためにもサンプルスクリプトを投稿してもらいたい。
          • 2. Re: レイヤーをJavaScriptから制御したい
            Level 1
            brazil様
            有益な情報のご提示ありがとうございました。以下のスクリプトで解決しました。

            チェックボックスのアクションスクリプト
            EJ_Control ( "01EC", "01E", "01EB-1", "01EB-2" )

            文書のスクリプト
            function EJ_Control ( CB_name, Lyer_name, B1_name, B2_name, B3_name, B4_name, B5_name, B6_name, B7_name, B8_name, B9_name )
            {
            var C = this.getField ( CB_name ) ;
            var docOCGs = this.getOCGs ( ) ;
            if ( B1_name != "" )
            {
            var B1 = this.getField ( B1_name ) ;
            }
            if ( B2_name != "" )
            {
            var B2 = this.getField ( B2_name ) ;
            }
            if ( B3_name != "" )
            {
            var B3 = this.getField ( B3_name ) ;
            }
            if ( B4_name != "" )
            {
            var B4 = this.getField ( B4_name ) ;
            }
            if ( B5_name != "" )
            {
            var B5 = this.getField ( B5_name ) ;
            }
            if ( B6_name != "" )
            {
            var B6 = this.getField ( B6_name ) ;
            }
            if ( B7_name != "" )
            {
            var B7 = this.getField ( B7_name ) ;
            }
            if ( B8_name != "" )
            {
            var B8 = this.getField ( B8_name ) ;
            }
            if ( B9_name != "" )
            {
            var B9 = this.getField ( B9_name ) ;
            }

            if ( C.isBoxChecked ( 0 ) )
            {
            //app.alert ( "The Box is Checked" ) ;
            for ( var x=0; x < docOCGs.length; x++ )
            {
            if ( docOCGs[x].name == Lyer_name )
            {
            docOCGs[x].state = false;
            }
            }
            if ( B1_name != "" )
            {
            B1.display = display.hidden;
            }
            if ( B2_name != "" )
            {
            B2.display = display.hidden;
            }
            if ( B3_name != "" )
            {
            B3.display = display.hidden;
            }
            if ( B4_name != "" )
            {
            B4.display = display.hidden;
            }
            if ( B5_name != "" )
            {
            B5.display = display.hidden;
            }
            if ( B6_name != "" )
            {
            B6.display = display.hidden;
            }
            if ( B7_name != "" )
            {
            B7.display = display.hidden;
            }
            if ( B8_name != "" )
            {
            B8.display = display.hidden;
            }
            if ( B9_name != "" )
            {
            B9.display = display.hidden;
            }
            }
            else
            {
            //app.alert("The Box is not Checked");
            for (var x=0; x < docOCGs.length; x++)
            {
            if(docOCGs[x].name == Lyer_name)
            {
            docOCGs[x].state = true;
            }
            }
            if ( B1_name != "" )
            {
            B1.display = display.visible;
            }
            if ( B2_name != "" )
            {
            B2.display = display.visible;
            }
            if ( B3_name != "" )
            {
            B3.display = display.visible;
            }
            if ( B4_name != "" )
            {
            B4.display = display.visible;
            }
            if ( B5_name != "" )
            {
            B5.display = display.visible;
            }
            if ( B6_name != "" )
            {
            B6.display = display.visible;
            }
            if ( B7_name != "" )
            {
            B7.display = display.visible;
            }
            if ( B8_name != "" )
            {
            B8.display = display.visible;
            }
            if ( B9_name != "" )
            {
            B9.display = display.visible;
            }
            }
            }

            ただ、ファイルサイズを縮小させるとVer.6以降でないとレイヤの表示/非表示制御ができません。これは仕様?
            • 3. Re: レイヤーをJavaScriptから制御したい
              Level 1
              PDFがレイヤ(画層)の概念を持ったのは、
              PDFのバージョン1.5(Acrobat 6.x互換)から後なのです。

              PDFのバージョン1.4(Acrobat 5.x互換)にすると、レイヤは実現出来ません。

              また、Acrobat 5.0 のナビゲーションパネルには「レイヤー」タブがありません。
              • 4. Re: レイヤーをJavaScriptから制御したい
                Level 1
                habacchi(かもされました) 様

                教えて頂き、ありがとうございます。

                更に追加の質問があります。(皆様へ)
                途中まで書きかけて、別問題であることに気付きましたので、別にスレッドを起こします。