【问题标题】:InDesign: ExtendScript to list fonts and extended font informationInDesign:ExtendScript 列出字体和扩展字体信息
【发布时间】:2013-05-16 11:05:33
【问题描述】:

我需要列出有关一组 inDesign 文档中使用的字体的详细信息。我需要的信息基本上可以通过菜单项 Type › Find Fonts... 访问(如here 所述),但查看每个文档中的每种字体并写下信息是不可行的。

我可以在document.fonts 下的Font 对象中找到很多信息,我的问题是如何访问或生成下面面板中的扩展属性:

  • 给定字体的字符数
  • 出现字体的页面

编辑:document.fonts 数组似乎也不包含缺失的字体。

【问题讨论】:

  • 试试这个脚本。说明是德文的。它说它导出文档中所有使用的字体。 indesign.hilfdirselbst.ch/ausgabe-export/…
  • 该脚本不会导出字体的字符数和页数,而是一个有用的脚本。谢谢!

标签: adobe-indesign extendscript


【解决方案1】:

好吧,这里有一个用于字符计数的蛮力策略。它遍历文档中的每个 character 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;
}

【讨论】:

  • 太棒了! document.fonts 数组似乎毫无用处,fontName 无法用于丢失字体,但通过使用 name 属性迭代 textStyleRanges 来构建集合可以计算字符数。至于页码,我不确定textStyleRanges 是如何连接到Page 对象的。有什么想法吗?
  • 我不知道textStyleRangesstories是否可以直接连接到页面,因为它们可以跨越多个页面。也许对于每个页面,您都可以获得textFrames,并在每个textFrame 中获得textStyleRanges
  • 我们已经足够接近解决方案了,我将在下周返回代码。非常感谢您的帮助 dln385!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 2011-10-17
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2010-09-20
  • 2011-06-23
相关资源
最近更新 更多