Skip to main content
Inspiring
November 19, 2021
Question

要素をドキュメントウィンドウにドラッグして配置する際、アンカー画像にオブジェクトスタイルを適用したい。

  • November 19, 2021
  • 4 replies
  • 559 views

アンカー画像にオブジェクトスタイルを適用して配置するには、InDesign スニペット(idms)で要素を構造に配置(追加)したのちドキュメントウィンドウに要素をドラッグすれば良いのかなと、idmsを作ってみたのですが、idmsでアンカー画像のフレームを内容に合わせる方法が解りません。

 

scriptで要素(XmlStory)内のアンカー画像のフレーム(Rectangle)を内容に合わせたのち、配置するしかないのでしょうか・・・

 

現状のidms

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?aid style="50" type="snippet" readerVersion="6.0" featureSet="257" ?>
<?aid SnippetType="XMLElement" ?>
<!-- CS6-->
<Document DOMVersion="8.0">
<!-- ドキュメントにスタイルを作成しておくこと-->
<RootParagraphStyleGroup>
<ParagraphStyle Self="ParagraphStyle/段落スタイル 1" Name="段落スタイル 1" />
<ParagraphStyle Self="ParagraphStyle/段落スタイル 2" Name="段落スタイル 2" />
</RootParagraphStyleGroup>
<RootObjectStyleGroup>
<ObjectStyle Self="ObjectStyle/オブジェクトスタイル1" Name="オブジェクトスタイル1" />
</RootObjectStyleGroup>
<XMLTag Self="XMLTag/Story" Name="Story" />
<XMLTag Self="XMLTag/Image" Name="Image" />
<XmlStory>
<XMLElement MarkupTag="XMLTag/Story">
<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/段落スタイル 1">
<XMLElement MarkupTag="XMLTag/Image">
<Rectangle StrokeWeight="0" AppliedObjectStyle="ObjectStyle/オブジェクトスタイル1">
<Image>
<Link LinkResourceURI="file:///test.jpg" />
</Image>
</Rectangle>
</XMLElement>
<Content>一段目</Content>
<Br />
</ParagraphStyleRange>
<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/段落スタイル 2">
<Content>二段目</Content>
</ParagraphStyleRange>
</XMLElement>
</XmlStory>
</Document>

 

メモ帳で作業すると読み込めない場合があるのですが原因が良くわかりません(Dreamweaverでidmsを書いています)。

This topic has been closed for replies.

4 replies

Ten A
Community Expert
Community Expert
November 22, 2021

基本的に配置コマンドはストーリー上にアンカーする場合であってもそのままで挿入されますから単純な処理だけでも実用的になりそうです。
ということで、必要最低限のサンプルを書いてみました。

#targetengine session
if (app.activeDocument.eventListeners.itemByName('placeEvent')!=null)
{
app.activeDocument.eventListeners.itemByName('placeEvent').remove();
}
var listner = app.activeDocument.addEventListener (
'afterPlace',
function (ev)
{
var tg = ev.target;
tg.appliedObjectStyle = app.activeDocument.objectStyles.itemByName("オブジェクトスタイル1")
});
listner.name = 'placeEvent';

ストーリー上にIビームがピコピコしてる状態で配置を実行するとオブジェクトスタイルを自動で適用するという動作をします。

停止は以下のワンライナーを実行してください。

app.activeDocument.eventListeners.itemByName('placeEvent').remove();
Inspiring
November 22, 2021

サンプル有難うございます。

ファイル>配置でアンカー画像を配置する際にオブジェクトスタイルを適応するのに良さそうですね

 

構造に以下のxmlを読み込み

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Story><Image href="file:///test.jpg"></Image></Story>
</Root>

Story要素をドラッグでレイアウトに配置する場合には、afterPlaceイベントが起こらない様です。

 

// Link.AFTER_NEWのeventListenerを追加
var myEventListener1 = app.addEventListener(Link.AFTER_NEW, function(){

    // Application.AFTER_SELECTION_ATTRIBUTE_CHANGEDのeventListenerを追加
    var myEventListener2 = app.addEventListener(Application.AFTER_SELECTION_ATTRIBUTE_CHANGED, function(){

の様にリンク追加のイベントを捕まえた後に、AFTER_SELECTION_ATTRIBUTE_CHANGEDのeventListenerを追加して、処理の後、AFTER_SELECTION_ATTRIBUTE_CHANGEDのeventListenerを削除する形でスクリプトを作ってみました。

 

idleTask等々、駆使すると、色々な事が出来そうな気がしてきました。

文字入力の補助をするスクリプト等も作れそうですね(Iを入力するとInDesignと入るといった)。

 

親切に教えていただきまして有難うございました。

世界が親切で満ち溢れますように・・・

Inspiring
November 22, 2021

リンク追加のイベントを捕まえた後に、

AFTER_SELECTION_ATTRIBUTE_CHANGEDのeventListenerを追加して、イベントを捕まえたら、AFTER_SELECTION_ATTRIBUTE_CHANGEDのeventListenerを削除して、やりたい事の処理。

 

でした。

Ten A
Community Expert
Community Expert
November 20, 2021

私自身は構造通したりせずダイレクトにXMLやCSVをパースしてフルオートで組み上げることが多いのですが、ストーリーに対する変化を捉えるならidleTaskで一定のタイミングで変化を確認し、想定した処理が来た時に処理を通す様な手法が使えます。

少し古いものですが見本を

 

https://ten-artai.com/2017/02/466/

Inspiring
November 21, 2021

使った事が無いので分からないのですが、idleTaskというというのは、指定した間隔毎にスクリプトを実行する様なものと考えていいのでしょうか?

InDesignのスクリプトでは、そういった事も出来るのですね。

 

AFTER_SELECTION_ATTRIBUTE_CHANGEDのイベントを使ったスクリプトを作ってみました。

InDesign JavaScript XML 配置されたアンカー画像にオブジェクトスタイルを適応 - Qiita

 

少しくInDesignのスクリプトの知識が増えた様に思います。

有難うございました。

Ten A
Community Expert
Community Expert
November 20, 2021

単純にアンカーに対して全て処理するのならeventListenerを使うのが楽かと思います。

投稿の編集にはスパマー対策の為、一定のユーザーステータスが必要で、ご新規さんは編集が禁止されています。

 

Inspiring
November 20, 2021

なるほど!

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Story><Image href="file:///test.jpg"></Image></Story>
</Root>

 

というxmlを構造に読み込み

Story要素をドラッグで配置した際には、どのイベントを見れば良いのでしょう?

 

Application.AFTER_SELECTION_ATTRIBUTE_CHANGEDで良いのかな

 

AFTER_PLACE(afterPlace)だとImage要素をドラッグした場合は反応するようですが

Story要素の場合反応しません・・・

 

 

投稿の編集の件、了解しました。

Inspiring
November 19, 2021

idmsのRectangleのStrokeWeight="0"は必要ないかもですね。

投稿の修正の方法が判りません・・・