在InDesign中选择后,如何获得下一段?

时间:2016-02-08 19:46:03

标签: javascript adobe-indesign

我正在使用Adobe InDesign和ExtendScript来查找使用app.activeDocument.findGrep()的关键字,而且我的这部分工作得很好。我知道findGrep()返回一个Text对象数组。假设我想使用第一个结果:

var result = app.activeDocument.findGrep()[0];

如何在result之后获得下一段?

3 个答案:

答案 0 :(得分:2)

使用InDesign DOM

var nextParagraph = result.paragraphs[-1].insertionPoints[-1].paragraphs[-1];

Indesign DOM具有不同的Text对象,可用于处理段落,单词,字符或插入点(闪烁光标所在的字符之间的空间)。一组Text对象称为集合。 Indesign中的集合类似于数组,但一个显着的区别是它们可以通过使用负索引(paragraphs[-1])从后面解决。

result指的是findGrep()结果。它可以是任何Text对象,具体取决于您的搜索条件。

paragraphs[-1]表示结果的最后一段(A段)。如果搜索结果只是一个单词,那么这将引用单词的封闭段落,而这个段落集合只有一个元素。

insertionPoints[-1]引用段落A的最后一个插入点。段落标记之后之前下一段的第一个字符(段落B) 。此插入点属于以下段落的段。

paragraphs[-1]返回insertedPoint的最后一段,即段落B(下一段)。

答案 1 :(得分:1)

Althouh nextItem似乎完全合适且高效,它可能是性能泄漏的来源,特别是如果你在一个巨大的循环中多次调用它。请记住,nextItem()是一个创建内部范围和东西的函数...... 另一种方法是在故事中导航并通过insertPoints indeces来到达下一段:

var main = function() {
	var doc, found, st, pCurr, pNext, ipNext, ps;
	if (!app.documents.length) return;
	doc = app.activeDocument;
	
	
	app.findGrepPreferences = app.changeGrepPreferences = null;
	
	app.findGrepPreferences.findWhat = "\\A.";
	
	found = doc.findGrep();
	
	if ( !found.length) return;
	
	found  = found[0];
	st = found.parentStory;
	
	pCurr = found.paragraphs[0];
	
	ipNext = st.insertionPoints [ pCurr.insertionPoints[-1].index ];
	var pNext = ipNext.paragraphs[0];
	
	alert( pNext.contents );
};

main();

这里没有声称绝对真理。只是建议使用nextItem()的可能问题。

答案 2 :(得分:0)

更简单的代码

result.paragraphs.nextItem(result.paragraphs[0]);

谢谢

毫克