[英]Loading content from a JSON / CSV and make the textbox fit to the content with basil.js
我通過 basil.js 成功地將 JSON 文件加載到 InDesign 中。
var jsonString = b.loadString("data.json");
var jsonData;
function setup() {
jsonData = b.JSON.decode(jsonString);
for (var i = 0; i < jsonData.length; i++) {
var myText = jsonData[i].text;
b.text(myText, 100, 10 * i, 100, 20);
};
}
b.go();
結果看起來如預期:
我想要實現的是
fit(FitOptions.FRAME_TO_CONTENT);
任何提示都受到熱烈贊賞。 干杯!
對於你的第一個問題
文本框架自動將它們的高度與內容相匹配,smth。 喜歡適合(FitOptions.FRAME_TO_CONTENT);
你可以只使用myText.fit(FitOptions.FRAME_TO_CONTENT);
. 如果那里沒有實現某些東西,你不必堅持使用 Basil。
文本框一直持續到頁面邊界,然后添加新頁面。
這有點棘手。 如果您擴展文本框,它們的大小將會改變。 您將需要循環之外的另一個變量來跟蹤最后一幀的geometricBounds
邊界並在它們的開頭添加下一幀。 當您的最后一個界限超過 pageHeight 時,您將需要添加一個新頁面。
這是讓你開始的東西。 這是未經測試的代碼。
/**
* InDesign Objects have a property called
* geometricBounds
* these are the bounds in page coordinates sorted like this
* [y1, x1, y2, x2]
* or in words
* [
* y of upper left corner,
* x of upper left corner,
* y of lower right corner,
* x of lower right corner
* ]
*/
var prevGeometricBounds = [100, 10, 100, 10];
for (var i = 0; i < jsonData.length; i++) {
var myText = jsonData[i].text;
var x = prevGeometricBounds[1];
var y = prevGeometricBounds[0];
var w = prevGeometricBounds[3] - prevGeometricBounds[1];
var h = prevGeometricBounds[2] - prevGeometricBounds[1];
var textFrame = text(myText, x, y, w, h);
textFrame.fit(FitOptions.FRAME_TO_CONTENT);
prevGeometricBounds = myText.geometricBounds;
if(prevGeometricBounds[2] > height){
addPage();
}
}
另一個提示。 如您所見,我省略了b.
Basil 發展了很多,但我們尚未發布第 2 版。您可以從 GitHub 的開發分支獲取最新版本。 相關文檔位於此處。
編輯 1
在 Basil 2 中,您應該能夠使用loadString
加載 JSON,然后使用JSON.parse對其進行解碼
Basil 文本 function 返回一個textFrame
。 所以fit
的 function 應該可以工作。 如果您遇到錯誤,我們很樂意在github接受錯誤報告。
編輯 2
fit
是在您從 JSON 加載的字符串上調用的,而不是在text()
function 的結果上調用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.