2014-10-29 117 views
0

我想构建一个InDesign脚本,当您导入诸如粗体和斜体等html标记时,这些单词会转换为粗体或斜体。InDesign脚本更改文本框中的子字体样式

例如

I really like <strong>walking to the park</strong> and eating icecream是:

我真的很喜欢步行到公园和吃冰淇淋。

但是,在我的文本框中,我只能得到一个段落来选择一种风格,而不是单个单词或短语。

在下面的例子中,我会想一个大胆的样式应用到secondPhrase变量(我没有问题,剥出标签等 - 只是想知道我怎么能应用样式只是secondPhrase

with (myElement) { 

    // Apply basic text style 
    applyParagraphStyle(myDoc.paragraphStyles.item("DefaultText")); 

    var firstPhrase = "I really like"; 
    var secondPhrase = " walking to the park"; 
    var thirdPhrase = " and eating icecream"; 

    contents = firstLine + secondLine + thirdPhrase; 

} 
下面

回答

2

喜欢的东西的代码应该做的伎俩。在insertionPoint行为就像光标在InDesign,如果你继续抓住最后insertionPoint你可以改变它的风格,同时要添加文本。

var doc = app.documents.add(); 

var frame = doc.pages[0].textFrames.add({ 
    geometricBounds: [6, 6, 40, 40] 
}); 

var bold = doc.characterStyles.add({ name: "Bold", fontStyle: "Bold" }); 
var none = doc.characterStyles.itemByName("[None]"); 

frame.insertionPoints.lastItem().applyCharacterStyle(none); 

frame.insertionPoints.lastItem().contents = "I really like"; 

frame.insertionPoints.lastItem().applyCharacterStyle(bold); 

frame.insertionPoints.lastItem().contents = " walking to the park"; 

frame.insertionPoints.lastItem().applyCharacterStyle(none); 

frame.insertionPoints.lastItem().contents = " and eating icecream"; 
+0

很棒!谢谢! – 2014-10-29 14:37:27

+0

这不适合我。而不是大胆地突出显示文本。 – yatinbc 2016-12-12 07:08:21

1

这里有一个DRY-er tak在Josh的解决方案 - 插入点是要走的路。如果您需要操作,镜像或使用动态JSON内容/想要分离文本,则需要通过循环运行它,并将简单的文本块分配为对象。这使得更换文本和使用Array.prototype.reverse()这些我需要使用的东西更容易。

这里有一个关于它我采取:

// Basic Setup 
var doc = app.documents.add(); 
var myPage = doc.pages.item(0); // Arbitrary page 

// Character-Styles 
var bold = doc.characterStyles.add({ name: "Bold", fontStyle: "Bold" }); 
var none = doc.characterStyles.itemByName("[None]"); 

// My String as an Array of Objects (Basic JSON format) 
var myStringsAndStyles = [ 
    { 
    contents: "I really like", 
    characterStyle: none 
    }, 
    { 
    contents: " walking to the park ", 
    characterStyle: bold 
    }, 
    { 
    contents: "and eating ice cream.", 
    characterStyle: none 
    } 
]; 

// Do stuff 
with (myPage) { 

    var myTextFrame = textFrames.add({ 
    geometricBounds: [6, 6, 40, 40] // Arbitrary coords 
    }); 

    with (myTextFrame.insertionPoints) { 
    for (var i = 0, arrlength = myStringsAndStyles.length; i < arrlength; i++) { 
     lastItem().properties = { 
     contents: myStringsAndStyles[i].contents, 
     appliedCharacterStyle: myStringsAndStyles[i].characterStyle 
     } 
    } 
    } 

} 

ただ!