11 返信 最新の回答 日時: Dec 13, 2004 8:07 AM ユーザー:(kaizu)

    Swatchの不具合?

      InDesignCSをVB.NETで制御しようとしています。

      ひとつ、どうしてもできないことがあり、困っています。
      表内のTopBorderStrokeColorなどの線の色を変更しようと思ったのですが、
      TopBorderStrokeColorの型がSwatchとなっており、Colorオブジェクトを受け付けてくれません。
      コードは以下です。
      (テンプレートにはRedというSwatchがあらかじめ作成されています。)

      Dim myDoc As InDesign.Document
      Dim myTextFrame As InDesign.TextFrame
      Dim myTable As InDesign.Table
      Dim str_path As String

      str_path = "「テンプレートのパス」"
      myDoc = myInDesign.Open(str_path)
      myTextFrame = myDoc.TextFrames.Add()
      myTextFrame.GeometricBounds = New Double() {20, 20, 100, 100}
      myTable = myTextFrame.Tables.Add()
      myTable.BodyRowCount = 2
      myTable.ColumnCount = 2
      myTable.TopBorderStrokeColor = myDoc.Swatches.Item("Red")

      一番下の行で、System.InvalidCastException
      が発生してしまいます。

      ためしに、ドキュメントを作成して、表の枠線の色を設定して、そのファイルをスクリプトで開いて、TopBorderStrokeColorプロパティを取得しようとしたのですが、クイックウ ォッチでもSystem.InvalidCastExceptionと表示されて見ることができませんでした。

      現状では表の枠線の色の変更はできないのでしょうか?
        • 1. Re: Swatchの不具合?
          Level 1
          2.0.1J+VBで確認をしてみました。
          TopBorderStrokeColorオブジェクトだけではなく、
          どうもテーブル上の枠線はカラーオブジェクトを
          受け付けてくれないようですね。
          ColorValueを直接操作してみましたが、これも拒否されました。
          2.0ではテーブルと同じ配置のテキストボックスを作成すれば、
          見た目は同じものが作成出来ましたが、出来上がったファイル
          サイズは非常に大きいです。
          • 2. Re: Swatchの不具合?
            VB6.0で、検証してみました。

            myTable.TopBorderStrokeColor = myDocument.Colors.Item("Red")

            全てが同じコードではありませんが、いちおう↑で3.0Jのドキュメントの表組みのTopBorderStrokeColorに"Red"が適用されました。VB.NETもInDesign3 .0Jもあまり使わないので詳しくないのですが…。
            • 3. Re: Swatchの不具合?
              Level 1
              ミズシナ氏のレスを見て、疑問に思ったので再度確認をしました。

              カラーオブジェクトを渡す場合は、Swatchsオブジェクトでは無く、Colorsオブジェクトのアイテムをセットしなければいけなかったのですね。

              2.0.1J及び3.1Jどちらでも問題なく色の変更出来ますね。
              • 4. Re: Swatchの不具合?
                Level 1
                T.Mizushinaさん、しゃもんさんありがとうございます。

                VB6.0だと問題なく動くみたいですね。

                VB.NET、C#では、やはり
                キャストで例外が発生してしまうみたいです。

                .NETには対応していないということなんでしょうか。

                今の環境にはVB6を入れていないので、
                入れてみて動作確認してみます。
                • 5. Re: Swatchの不具合?
                  藤森です。
                  Fukutaniさんこんにちは。
                  C#でも同じことをやってみました。同じように「キャストできない」とのこと。
                  おもしろいのは、
                  table.TopBorderStrokeColor = table.TopBorderStrokeColor;
                  としてもキャストできないと。
                  なんだか変ですね。
                  • 6. Re: Swatchの不具合?
                    Level 1
                    久しぶりにVB.NETを使っていろいろやってみましたが、やはりダメでしたね。
                    新規にカラーをつくることはできるのですが、それを適用できない。
                    唯一、適用できたのは、
                    myTable.TopBorderStrokeColor = myDocument.Swatches.Item("None") と
                    myTable.TopBorderStrokeColor = myDocument.Swatches.Item(1)。つまり、「None」 だけ。

                    これまでVB.NETでInDesignの開発をしたことがないので、まあ、実力不足、知識不足ということもあるでしょうが。
                    ただ、AdobeアメリカのInDesign Scriptingフォーラムで、「InDesignのScriptingに関しては、VB.NETはVBの中でよい選択枝とはいえない」というような発言があったことを覚えています。
                    VB6.0をお持ちなら、こちらで開発したほうが、まだ各種情報を得られると思います。
                    • 7. Re: Swatchの不具合?
                      丁度、同じ問題にぶつかってここに来ました。
                      VB6.0でやってますが駄目です…。型が合わないってでます。
                      SwatchesをColorsにしてみましたが型が合わない、と変わらずです。
                      コードも過去レスと同じく、単純に書いてます。
                      VB6.0でテーブルのボーダーカラーを変更をするにはどう記述すればよいのでしょうか?
                      • 8. Re: Swatchの不具合?
                        Level 1
                        適当にJavaScriptで書いてみました。
                        何も問題なく色が変わります…。
                        VBで同じように書いてもできない。
                        インデザインのVBはバグってるんじゃないんですかね?
                        でもT.Mizushinaさんは確認しましたって書いてますし?…困りました。

                        if (app.documents.length != 0) {
                        var idDoc = app.activeDocument;
                        if (app.selection.length != 0) {
                        if (app.selection[0].constructor.name == "TextFrame") {
                        //
                        //
                        var idTable = app.selection[0].tables[0];
                        with (idTable) {
                        bottomBorderStrokeWeight = 1;
                        bottomBorderStrokeColor = idDoc.swatches.item("C=100 M=0 Y=0 K=0");
                        }
                        alert("ok");
                        }
                        }
                        }
                        • 9. Re: Swatchの不具合?
                          Level 1
                          ディベロッパーサポートで聞いたのですが、
                          VBで動作させるためには、いくつか注意点があるようです。

                          まず、プロジェクトのプロパティの中の"OptionExplicit" 及び "OptionStrict" をoffにしてください。
                          親になるオブジェクトの宣言をオブジェクト型で宣言してください。

                          どうも型があってないので、エラーがでるようなので、宣言時に型を指定しないで動作させるとうまくいくようですね。
                          • 10. Re: Swatchの不具合?
                            Level 1
                            CSはほとんど仕事では使っていないので、よくわかりませんが、下記のサンプルで動きました(どうしようもないサンプルで申し訳ない…)。
                            下記の色がDocumentのSwatchesに登録されていることが前提です(デフォルトのままなので、多分、登録されていると思います)。VB6.0です。
                            ------------------------------------------------------------------
                            Set myInDesign = CreateObject("InDesign.Application.3.0J")
                            Set myDocument = myInDesign.ActiveDocument
                            Set myTable = myInDesign.Selection.Item(1).Tables.Item(1)

                            myTable.BottomBorderStrokeColor = myDocument.Colors.Item("C=100 M=0 Y=0 K=0")
                            myTable.BottomBorderStrokeType = "ベタ"
                            myTable.BottomBorderStrokeWeight = 2
                            myTable.TopBorderStrokeColor = myDocument.Colors.Item("C=0 M=100 Y=0 K=0")
                            myTable.RightBorderStrokeColor = myDocument.Colors.Item("C=0 M=0 Y=100 K=0")
                            '「C=100 M=90 Y=10 K=0」が登録されていれば
                            myTable.LeftBorderStrokeColor = myDocument.Colors.Item("C=100 M=90 Y=10 K=0")
                            ------------------------------------------------------------------

                            T.Mizushina
                            • 11. Re: Swatchの不具合?
                              Level 1
                              Fukutani Yukiさん、貴重な情報をありがとうございました。
                              T.Mizushinaさん、サンプルコードを書いていただきまして、ありがとうございました。

                              やはりInDesignが間違ってる(?)のですね。
                              オブジェクト型で宣言してみたら無事変更できました!
                              これって、サポートQ&Aに載せるべきではないでしょうかね…
                              それともVB詳しい人ならクリアできた問題なんでしょうか。
                              これで次に進めます。ありがとうございました。