如何获取在InDesign中应用嵌套样式的文本

时间:2016-12-19 19:14:46

标签: javascript adobe-indesign

我正在尝试编写一个脚本,如果应用了特定的嵌套样式,它将所有字符转换为小写。我似乎无法弄清楚获取文本的正确语法。

我最初尝试过以下方法,但这种方法有所改进,但是小写了整个段落,而不仅仅是应用了字符样式的文本:

function lowerCaseNest(myPStyle, myCStyle){

var myDocument = app.documents.item(0);
//Clear the find/change preferences.
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
//Set the find options.
app.findChangeTextOptions.caseSensitive = false;
app.findChangeTextOptions.includeFootnotes = false;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeLockedLayersForFind = false;
app.findChangeTextOptions.includeLockedStoriesForFind = false;
app.findChangeTextOptions.includeMasterPages = false;
app.findChangeTextOptions.wholeWord = false;

app.findTextPreferences.appliedParagraphStyle = myPStyle;

var missingFind = app.activeDocument.findText();
var myDoc = app.documents[0];

for ( var listIndex = 0 ; listIndex < missingFind.length; listIndex++ ) {

            for (i = missingFind[listIndex].nestedStyles.length-1;i>=0; i--) { 

                    for (j = missingFind[listIndex].nestedStyles[i].parent.characters.length-1;j>=0; j--) {

                        if (missingFind[listIndex].nestedStyles[i].parent.characters[j].contents.appliedCharacterStyle(myCStyle)) {
                                var myString = missingFind[listIndex].nestedStyles[i].parent.characters[j].contents;                                

                                if (typeof(myString) == "string"){
                                        var myNewString = myString.toLowerCase();
                                        missingFind[listIndex].nestedStyles[i].parent.characters[j].contents = myNewString;
                                    }
                             }

                     }

    }

app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;    

}

然后我尝试使用appliedNestedStyles,但似乎无法弄清楚如何检索嵌套样式应用于的文本。

有人可以帮忙吗?

谢谢! 约翰

2 个答案:

答案 0 :(得分:1)

除非我错了,否则可以通过定位应用的characterStyle在F / C对话框中查看appliedNestedStyle:

GREP
Find : .+
Format : character style => myCharStyle

然后

var found = doc.findGrep();

...

答案 1 :(得分:0)

我实际上采取了不同的方法,并找出了有效的方法:

function lowerCaseNest(myPStyle, myCStyle){

for (var i = 0; i < app.activeDocument.stories.length; i++){
                for (var j = 0; j < app.activeDocument.stories[i].paragraphs.length; j++){
                        var myP = app.activeDocument.stories[i].paragraphs[j];
                        if (myP.appliedParagraphStyle.name==myPStyle) {
                                for (k=0; k<myP.characters.length; k++) {                                      
                                       if(typeof(myP.characters[k].appliedNestedStyles[0]) != 'undefined'){
                                            if(myP.characters[k].appliedNestedStyles[0].name == myCStyle) {
                                                    var myC = myP.characters[k].contents;
                                                    if (typeof(myC)=='string'){
                                                        var myNewString = myC.toLowerCase();
                                                        myP.characters[k].contents = myNewString;
                                                    } 
                                            }
                                    }
                            }
                    }                   
            }     
     }
}

仍然有兴趣知道是否有一种更简单的方法来解决这个问题,因为我担心这可能需要更长时间来运行长文档,因为它会单独处理每个段落。