9 返信 最新の回答 日時: Apr 10, 2007 9:58 AM ユーザー:(てんてん-19980238)

    対象オブジェクトの部分EPS書き出し

    Level 1
      いつもお世話になります。

      InDesignにはEPS書き出しの機能がありますが、あるオブジェクトを選択して、
      その部分だけをEPSファイルとして書き出す方法を探しています。
      バージョンInDesignCS2。 OSはWindowsXPです。

      スクリプティングガイドの文例(P138)には

      app.epsExportPreferences.pageRange = "1-3, 6, 9";
      var myFile = new File("/c/myTestFile.eps");
      app.activeDocument.exportFile(ExportFormat.epsType, myFile, false);

      とありますが、一番上の行を対象のオブジェクト(たとえば、複数のイラストをグループ化してあるもの)を選択できるよう書き換えられないか・・と考えてみたのですが。

      良い方法があれば、ご教授のほどよろしくお願いします。
        • 1. Re: 対象オブジェクトの部分EPS書き出し
          Level 1
          Exportメソッドはいくつかのオブジェクトに存在しますが、どれを行ってもページ毎にしか出ないようです。(間違ってたらすみません)
          ですので、グループ毎に新規書類に貼り付けて、新規書類のページをExportするものを書いてみました。
          テストではRectangleを4つ作り、2つでグループ化したものを2個用意したドキュメントを保存しておいて実行してみてください。
          ちなみにCSで動作確認したので、CS2は「InDesign.Application.CS」を「InDesign.Application.CS2_J」
          にしてください。

          '---------------------------------
          Const idNo = 1852776480
          Const idEPSType = 1952400720
          Dim MyInDesign As InDesign.Application
          Set MyInDesign = CreateObject("InDesign.Application.CS")
          With MyInDesign
          For I = 1 To .ActiveDocument.Groups.Count
          Fname = .ActiveDocument.Name & "_" & I
          Fname = .ActiveDocument.FilePath & "¥" & Fname & ".eps"
          .Select .ActiveDocument.Groups(I)
          .Copy
          Set Dummy = .Documents.Add(True)
          .ActiveDocument = Dummy
          .Paste
          Dummy.Export idEPSType, Fname, False
          Dummy.Close idNo
          Set Dummy = Nothing
          Next I
          End With
          MsgBox "EPS書き出しが終わりました。"
          Set MyInDesign = Nothing
          '---------------------------------
          • 2. Re: 対象オブジェクトの部分EPS書き出し
            Level 1
            流星ちゃんさん>

            VBScriptとして動かしたかったので、
            4行目を:Dim MyInDesign 'As InDesign.Application
            として、試させていただいたところ、

            エラー番号:1025
            エラー文字列:ステートメントの末尾が不正
            行:18
            ソース:Next I

            と出て終了しています。

            こちらのスクリプトはVB環境でないと動きませんでしょうか?

            #流星ちゃんさんのサイトは、スクリプト関連で困るといつも拝見させていただいております。
            このたびは、どうもありがとうございました。
            お手数ですが、引き続きよろしくお願いいたします。
            • 3. Re: 対象オブジェクトの部分EPS書き出し
              Level 1
              >VBScriptとして動かしたかったので
              すみません。
              >ソース:Next I
              この行を下記のように修正してください。
              Next 'I

              VB6SP6で動作確認したまま、コードをUPしました。
              お手数をおかけします。
              • 4. Re: 対象オブジェクトの部分EPS書き出し
                Level 1
                早速試させていただきました。

                下記2行についても同様にコメントアウトしましたら動きました。

                'Const idNo = 1852776480
                'Const idEPSType = 1952400720

                これで、ちょっと複雑な案件の問題が、ひとつ解決しそうです。

                大変助かりました。
                どうもありがとうございました。
                • 5. Re: 対象オブジェクトの部分EPS書き出し
                  Level 1
                  補足になりますが、
                  Constで定義している部分は
                  InDesignのScriptパレットに認識されるように、
                  プリセットフォルダに入れた時はConstで定義しているコードが不要になり、
                  デスクトップなどのフォルダから直接VBSを実行する際には必要になる部分です。
                  VBからVBSにコード移行する時には、条件が厳しくなってしまうので、定義元は完全なコードを書いておく必要があります。
                  • 6. Re: 対象オブジェクトの部分EPS書き出し
                    Level 1
                    補足のご説明どうもありがとうございます。
                    VBのほうがVBSより記述する際の条件が厳しいということですよね?
                    了解です。

                    ところで、こちらはActiveDocumentの一番上の階層にあるGroupを書き出してくれますが、インライン上に配置したテキスト(キャラクター?)扱いのGroupオブジェクトを書 き出すことはできますか?

                    For I = 1 To .ActiveDocument.Groups.Count

                    .Select .ActiveDocument.Groups(I)
                    の部分を書き換えればよろしいかと思ったのですが

                    .Select .ActiveDocument.TextFrame.Groups(I)

                    などとしてテキストフレーム内のグループをしたつもりが、何も書き出されないのは、やはり記述が違うんでしょうね。

                    #何度もすみません。
                    どうもInDesignのオブジェクトモデルがちゃんと理解できていないような。
                    どこかに良い参考書があれば欲しいです。
                    • 7. Re: 対象オブジェクトの部分EPS書き出し
                      Level 1
                      >VBのほうがVBSより記述する際の条件が厳しいということですよね?
                      VBSで書いてあるコードをVBに移行するのは、そんなに苦じゃないと思う。
                      逆にVBからVBSへ移行する方が厳しいです。

                      VBで通るコードをVBSにする際には、
                      Nextの後の変数をトルツメ。
                      Dim宣言の型指定はトルツメ。
                      などを行う必要があります。

                      で、本題のインラインのグループ書き出しですが、
                      VBSに移行してみました。
                      パネルから動作確認したので、あとはInDesignのVersion変更でCS2でも動作するかと。
                      コードが汚いのと、長いのはご愛敬で。

                      '------------------------------
                      'InlineGroupExport2EPS_CS1.vbs
                      'Written By 流星光輝
                      'Since 2007/04/09 23:08 Finish
                      '------------------------------
                      'Const idNo = 1852776480 'スクリプトパネル用にコメントアウト
                      'Const idEPSType = 1952400720 'スクリプトパネル用にコメントアウト
                      Dim MyInDesign 'As InDesign.Application
                      Set MyInDesign = CreateObject("InDesign.Application.CS")
                      With MyInDesign
                      For SC = 1 To .ActiveDocument.Stories.Count 'ストーリーの個数分ループ
                      For I = 1 To .ActiveDocument.Stories(SC).Groups.Count 'ストーリー内のグループの個数分ループ
                      Fname = .ActiveDocument.Name & "_" & I 'EPS書き出し用のファイル名の生成1
                      Fname = .ActiveDocument.FilePath & "¥" & Fname & ".eps" 'EPS書き出し用のファイル名の生成2
                      .Select .ActiveDocument.Stories(SC).Groups(I) '書き出したいインラインオブジェクトのグループを選択
                      .Copy 'InDesignにコピーさせる
                      Set Dummy = .Documents.Add(True) 'EPS書き出し用のダミードキュメントを用意
                      .ActiveDocument = Dummy 'アクティブドキュメントをダミーに設定
                      .Paste 'ダミーに貼り付け
                      Dummy.Export idEPSType, Fname, False 'ダミーをEPSで出力(1pしか無いので問題ないはず)
                      Dummy.Close idNo '保存しないで閉じる
                      Set Dummy = Nothing 'オブジェクトを解放
                      Next 'I '変数はVBSの場合コメントアウトしないとね。
                      Next 'SC '変数はVBSの場合コメントアウトしないとね。
                      End With
                      MsgBox "EPS書き出しが終わりました。" '終了アラート表示
                      Set MyInDesign = Nothing '親オブジェクトの解放
                      • 8. Re: 対象オブジェクトの部分EPS書き出し
                        Level 1
                        読み返していたら、以下の記述に対するコメントを書き忘れていました。
                        .Select .ActiveDocument.TextFrame.Groups(I)
                        恐らく、下記のような記述になるかと思います。
                        .Select .ActiveDocument.TextFrame(1).Groups(I)
                        先程提示したコードではTextFrameではなく、ストーリー毎に全部書き出すように書いてしまいましたが、
                        要は、どのオブジェクトの配下にしているグループを対象にするかなので、
                        select文の所を修正して頂ければ、
                        どのオブジェクトの配下でもEPSに落とせます。
                        Subルーチンに仕立てて、オブジェクト渡しで解決したほうが汎用的なコードになりますね。

                        >InDesignのオブジェクトモデル
                        オブジェクトモデルは、お〜まち様がサイトで公開されているのを私はよく利用させていただいております。
                        ある程度メソッドの位置は把握しているのですが、本当にそのクラスに持っているかどうかなどで調べさせて頂いております。
                        • 9. Re: 対象オブジェクトの部分EPS書き出し
                          Level 1
                          試させていただきました。
                          これはすごいスクリプトですね。
                          スタッフと一緒にしばし感動していました。

                          こまかい部分までコメントで
                          解説していただいて感謝です。

                          本当にどうもありがとうございました。
                          (お礼のメールをさせていただきました)