我需要列出一组inDesign文档中使用的字体的详细信息。我需要的信息基本上可以通过菜单项类型>查找字体... (如here所述)访问,但是浏览每个文档中的每种字体并写下信息是不可行的。< / p>
我可以在Font
下的document.fonts
个对象中找到大部分信息,我的问题是如何访问或生成以下面板中的扩展属性:
编辑:document.fonts
数组似乎也不包含丢失的字体。
答案 0 :(得分:2)
嗯,这是一个用于字符计数的蛮力策略。它遍历文档中的每个字符 textStyleRange并检查其应用的字体。 修改:已更新以使用textStyleRanges。比通过每个角色要快得多。
var document = app.open(new File(Folder.desktop.fsName + "/test/test.indd"));
try {
var fontMultiset = countCharsInFonts(document);
// For each font, display its character count.
var fonts = document.fonts.everyItem().getElements();
for (var i = 0; i < fonts.length; i++) {
var fontName = fonts[i].fullName;
$.writeln(fontName + ": " + fontMultiset[fontName]);
}
}
finally {
document.close();
}
function countCharsInFonts(document) {
// Create the font multiset.
var fontMultiset = {
add: function add(fontName, number) {
if (this.hasOwnProperty(fontName)) {
this[fontName] += number;
}
else {
this[fontName] = number;
}
},
};
// For every textStyleRange in the document, add its applied font to the multiset.
var stories = document.stories.everyItem().getElements();
for (var i = 0; i < stories.length; i++) {
var story = stories[i];
var textStyleRanges = story.textStyleRanges.everyItem().getElements();
for (var j = 0; j < textStyleRanges.length; j++) {
fontMultiset.add(textStyleRanges[j].appliedFont.fullName, textStyleRanges[j].length);
}
}
// For any fonts that aren't applied in the document, set the character count to 0.
var fonts = document.fonts.everyItem().getElements();
for (var i = 0; i < fonts.length; i++) {
var fontName = fonts[i].fullName;
if (!fontMultiset.hasOwnProperty(fontName)) {
fontMultiset[fontName] = 0;
}
}
return fontMultiset;
}