2014-10-29 86 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 
     } 
    } 
    } 

} 

ただ!