2013-05-21 42 views
0

我需要列出一組inDesign文檔中使用的字體的詳細信息。我需要的信息基本上可通過菜單項Type> Find Fonts ...(如解釋here)進行訪問,但是要查看每個文檔中的每種字體並寫下信息是不可行的。InDesign:ExtendScript可列出字體和擴展字體信息

我可以找到很多在Font對象的信息document.fonts下,我的問題是如何獲得或產生在下面的面板中發現的擴展屬性:

  • 字符數爲給定的字體
  • 其中字體發生

1

編輯的網頁:釷e document.fonts數組似乎也不包括丟失的字體。

+0

試試這個腳本。說明是德文。它說它導出文檔中所有使用的字體。 http://indesign.hilfdirselbst.ch/ausgabe-export/liste-mit-schriften-im-dokument-ausgeben.html – fabianmoronzirfas

+0

該腳本不會導出字體的字符數和頁面,但是否則是有用的腳本。謝謝! – wna

回答

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; 
} 
+0

燦爛! 'document.fonts'數組似乎很沒用,'fontName'不能用於丟失字體,但通過使用'name'屬性遍歷'textStyleRanges'來構建集合的做法是計數字符。至於頁碼,我不確定'textStyleRanges'如何連接到'Page'對象。有關於此的任何想法? – wna

+0

我不知道'textStyleRanges'或'stories'是否可以直接連接到頁面,因爲它們可以跨越多個頁面。也許對於每一頁你可以得到'textFrames',並在每個'textFrame'中獲得'textStyleRanges'。 – dln385

+0

我們已經足夠接近解決方案,下週我會回覆代碼。我非常感謝你的幫助dln385! – wna