Skip to main content
Inspiring
October 14, 2022
Answered

Font listing script

  • October 14, 2022
  • 1 reply
  • 623 views

Hi,
I would like to list the appearance of fonts in different variations.
I found the script http://kasyan.ho.ua/indesign/font/make_font_catalog.html, which I based on, but it fails.

I wanted to make a sample page the way

xtFrame = doc.spreads[0].textFrames.add
(
    {
        geometricBounds : [12,13,32,126],
        strokeWidth : 0,
        fillColor : "None",
        contents : "Typografie",
        parentStory : 
            {
                justification : Justification.LEFT_ALIGN ,
                pointSize : 60 ,
                //leftIndent : "5 mm" ,
                //rightIndent : "2 mm"
            } ,
    }
);

var textFrame1 = doc.spreads[0].textFrames.add
(
    {
        geometricBounds : [34.925,12.7,68.792000,197.300000],
        strokeWidth : 0,
        fillColor : "None",
        contents : "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+"\n"+"abcdefghijklmnopqrstuvwxyz"+"\n"+"¿?¡!&@‘’“”«»%*^#$£€¢/()[]{}.,®©",
        parentStory : 
            {
                justification : Justification.FULLY_JUSTIFIED ,
                pointSize : 24 ,
            } ,
    }
);

var textFrame3 = doc.spreads[0].textFrames.add
(
    {
        geometricBounds : [164.198,12.7,176.369000,197.300000],
        strokeWidth : 0,
        fillColor : "None",
        contents : "ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťÚúŮůÝýŽž",
        parentStory : 
            {
                justification : Justification.FULLY_JUSTIFIED ,
                pointSize : 30 ,
            } ,
    }
);


and then create a page with the fonts, that's not working.

Then I don't know if it is possible to load only fonts from a certain folder of uninstalled fonts.
But if it would only run from the ones installed in windows10, that would be fine too.

 

Any advice? Can you point me in the right direction?

Thanks

Jirka

 

This topic has been closed for replies.
Correct answer rob day

Thank you
I was there, but the search didn't find "LEFT_ALIGN".
Otherwise it looks good already, I'm still looking for inserting the sample page "doc.pages.add();"
I'm not English/American, I don't think in English ;-).


Not sure how much scripting you’ve done, but I think constucting text frames for each paragraph will be difficult. Another approach would be running text with paragraph styles applied. This gets a range of application fonts and creates styled running text :

 

app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;

//new document preset non facing pages with primary frames
var dp = makeDocPreset("Temp");
dp.properties = {facingPages:false, pageHeight:11, pageWidth:8.5, pageOrientation:PageOrientation.PORTRAIT, top:72, bottom:110, left:72, right:72, startPageNumber:1, createPrimaryTextFrame:true}

//make the font document
var doc = app.documents.add(true, dp);
//set the text flow preferences so the font text auto flows
doc.textPreferences.properties = {smartTextReflow:true, smartTextReflowSync:true, limitToMasterTextFrames:true, deleteEmptyPages:true};
dp.remove();

//make a swatch color for the head
var hc = makeSwatch(doc, "GGS");
hc.properties = {space:ColorSpace.LAB, colorValue:[45,60,40]}

//paragraph styles for the text
var fn = makeParaStyle(doc, "FontName");
fn.properties = {appliedFont:"Myriad Pro	Book", fillColor:hc, pointSize:16, spaceAfter:4, justification:Justification.LEFT_ALIGN, keepWithPrevious:false, keepWithNext:3};
var uc = makeParaStyle(doc, "UpperCase");
uc.properties = {pointSize:12, justification:Justification.LEFT_ALIGN, keepWithPrevious:true, keepWithNext:2};
var lc = makeParaStyle(doc, "LowerCase");
lc.properties = {pointSize:12,justification:Justification.LEFT_ALIGN, keepWithPrevious:true, keepWithNext:1};
var gl = makeParaStyle(doc, "Glyphs");
gl.properties = {pointSize:12, spaceAfter:24, justification:Justification.LEFT_ALIGN, keepWithPrevious:true, keepWithNext:0};
var sList = [fn, uc, lc, gl];

//list of fonts to get
var aList = app.fonts.itemByRange(500,700).getElements();

//set the text contents
var c = "";
for (var i = 0; i < aList.length; i++){
    c += aList[i].name + "\r" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+"\r"+"abcdefghijklmnopqrstuvwxyz"+"\r"+"¿?¡!&@‘’“”«»%*^#$£€¢/()[]{}.,®©"+"\r"
};

//add the text
var ptf = doc.pages[0].textFrames[0].parentStory;
ptf.contents = c;

//apply paragraph styles
var sp = ptf.paragraphs;
var sc = 0;
var fc = -1;
var af;
for (var j = 0; j < sp.length; j++){
    if (getFirst(j)) {
        sc = 0;
        fc++;
        sp[j].appliedParagraphStyle = sList[sc];
        //sp[j].appliedFont = aList[fc];
    }
    sp[j].appliedParagraphStyle = sList[sc++];
    //$.writeln(sc + "   " + sp[j].appliedParagraphStyle.name)
    

    if (sc > 1) {
        sp[j].appliedFont = aList[fc];
    } 
};   


/**
* Makes a new document preset 
* @ param preset name name 
* @ return the new preset 
*/

function makeDocPreset(n){
    if (app.documentPresets.itemByName(n).isValid) {
        return app.documentPresets.itemByName(n);
    } else {
        return app.documentPresets.add({name:n});
    }
}


/**
* Makes a new named ParagraphStyle 
* @ param the document to add the style to 
* @ param style name 
* @ return the new paragraph style 
*/

function makeParaStyle(d, n){
    if (d.paragraphStyles.itemByName(n).isValid) {
        return d.paragraphStyles.itemByName(n);
    } else {
        return d.paragraphStyles.add({name:n});
    }
}


/**
* Check for first line 
* @ param the number to check 
* @ return true for multiples of 4
* 
*/
function getFirst(n){
    if (n%4 == 0) {
        return true
    } else {
        return false
    }   
}



/**
* Makes a new named Swatch 
* @ param the document to add the color to 
* @ param color name 
* @ return the new swatch 
*/

function makeSwatch(d, n){
    if (d.colors.itemByName(n).isValid) {
        return d.colors.itemByName(n);
    } else {
        return d.colors.add({name:n});
    }
}

 

Sample output:

 

 

 

 

 

 

1 reply

rob day
Community Expert
Community Expert
October 14, 2022

Hi @jirik79416729 , You can get a collection of fonts available to InDesign, or a collection of fonts used by a document:

 

var doc = app.activeDocument;
var dList = doc.fonts
var aList = app.fonts

alert("This document uses " + dList.length + " fonts.\r There are " + aList.length + " fonts active in InDesign.")


//get the names of fonts available from the InDesign application
for (var i = 0; i < aList.length; i++){
    //$.writeln(aList[i].name)
};

//get the names of fonts used by the active document
for (var j = 0; j < dList.length; j++){
    //$.writeln(dList[j].name)
};

 

Inspiring
October 14, 2022

Thank you, simple, but somehow I didn't buy it, that will do.
I didn't find anywhere a simple help/options - e.g. Justification.LEFT_ALIGN etc.

Thanks again

Jirka

 

rob day
Community Expert
Community Expert
October 14, 2022

You can find the InDesign API here:

https://www.indesignjs.de/extendscriptAPI/indesign-latest/#about.html

 

Here are the properties for a story:

https://www.indesignjs.de/extendscriptAPI/indesign-latest/#Story.html

 

I would think it would be easier to set this up a single story with styled paragraphs for each item rather than creating text frames that need to be aligned.