How can we get the font names of each text layer in a document?


hi all!

 

i wanted know how can names of fonts applied in each text layer in psd file. tried following,

 

int32 numlayers = 0;

 

// calculate number of text layers.

error = piugetinfo(classtextlayer, keycount, &numlayers, null);

 

for (int = numlayers - 1; > 0; --i)

{

     char* fontname = new char[100];

     int32 len = 100;

 

     // font name of each layer index.

     error = piugetinfobyindex(i, classtextlayer, keyfontname, fontname, &len);

}

 

suppose have document has 2 text layers , 2 solid color layers shown in screen shot. note document not have background layer. so, number of layers 4.

forum.jpg

 

if layer selection @ 1 of solid color layers, number of layers 0. but, if layer selection @ of text layers, number of layers 4. why don't number of layers 2 requested info of text layers in statement,  piugetinfo(classtextlayer, keycount, &numlayers, null).

 

also, error = -25922 @ piugetinfobyindex(i, classtextlayer, keyfontname, fontname, &len),

which errreferencenotfounddefine.

 

how can go this?

 

thanks!

hi,

 

i usualy "remember" stati in image , start work on it. allowes me iterate trough layers when pulling info or performing action , set document (in previous state, changes user wantsof course). using aproach acessing layers using index sure layer working on curently active layer.

 

now

 

getting layer numbers in document:

 

sperr amautoplugin::getlaynum()

{

   

    sperr error = kspnoerror;

 

    int32 numlayers;

 

    piactiondescriptor result = null;

    piactionreference reference = null;

 

 

 

    error = spsactionreference->make(&reference);

    if (error)goto returnerror;

 

    error = spsactionreference->putenumerated(reference,classdocument,typeordinal,enumtarget);

    if (error) goto returnerror;

   

    error = spsactioncontrol->get(&result, reference);   

    if (error) goto returnerror;

 

    error = spsactiondescriptor->getinteger(result, keynumberoflayers,&numlayers);

    if (error) goto returnerror;

 

    stdocdata.inumlayers=numlayers;// global

   

returnerror:

    if (result != null)spsactiondescriptor->free(result);

    if (reference != null) spsactionreference->free(reference);

    return error;

}

 

 

 

here part of code (i hope manage understand since have cut out lots of

code not needed in order shorten post) fetch font names.

 

i used aproach since have more detailed info text layers (not prsented here)

i suppose bu using aproprite piugetinfobyindex routines can make shorter.

 

 

 

sperr amautoplugin::gettextlayerattributes(int index, txtlayerinfo* info)

{

 

 

// clarify

// "info" structure fill data need can use somethong suites you

//

 

 

 

    uint32 stringlength=0;

    uint32 strl=0;

 

    char fontname[255]="";

    char fontstyle[255]="";

    char fontpsname[255]="";

 

 

    boolean haskey =false;   

 

 

    sperr error = kspnoerror;

    descriptortypeid runtimekeyid;

    descriptortypeid runtimeclassid;

    descriptortypeid runtimetypeid;

    descriptortypeid runtimeunitid;

    descriptortypeid runtimeenumid;

 

    descriptorclassid descclass;

    descriptorenumid enumvalue;

 

    piactionlist listtextstyle=null;

    piactiondescriptor desclayer = null;//*

    piactiondescriptor descposition = null;

    piactiondescriptor desctextlayer = null;

    piactiondescriptor desctextstyle = null;

    piactiondescriptor descfont = null;

    piactiondescriptor descfontcolor= null;

    piactiondescriptor descclickpoint=null;

    piactiondescriptor desclayerlocking = null;

    piactiondescriptor desceffects = null;

 

 

    error = spsactiondescriptor->make(&desclayer);

    if (error) goto returnerror;

 

    error = spsactiondescriptor->make(&desctextlayer);

    if (error) goto returnerror;

    error = spsactiondescriptor->make(&desctextstyle);

    if (error) goto returnerror;

    error = spsactionlist->make(&listtextstyle);

    if (error) goto returnerror;

    error = spsactiondescriptor->make(&descfont);

    if (error) goto returnerror;

 

 

   

   

    error = piugetinfobyindex(index,classlayer,0,&desclayer,null);

    if (error) goto returnerror;

   

 

    //text

    error = piugetsingleitemfromdescriptor(desclayer,keytext,&desctextlayer,&descclass);

    if (error) goto returnerror;

 

 

 

    //

    //get font descriptor

    error = spsactiondescriptor->getlist(desctextlayer, keytextstylerange, &listtextstyle);

    if (error) goto returnerror;

    error = spsactionlist->getobject(listtextstyle, 0,&descclass, &desctextstyle);

    if (error) goto returnerror;

    error = piugetsingleitemfromdescriptor(desctextstyle,keytextstyle,&descfont,&descclass);

    if (error) goto returnerror;

 

 

    //font size

    error = spsactiondescriptor->getfloat(descfont, keysizekey, &dfontsize);

    if (error) goto returnerror;

    info->dfontsize=dfontsize;

   

    //font name

    error = spsactiondescriptor->getstringlength(descfont, keyfontname, &stringlength);

    if (error) goto returnerror;

    stringlength+=2;

    error = spsactiondescriptor->getstring(descfont, keyfontname, fontname, stringlength);

    if (error) goto returnerror;

 

    info->sfname= fontname;

 

 

 

 

     // font ps name

 

    error = spsactioncontrol->stringidtotypeid("fontpostscriptname", &runtimekeyid);

    if (error) goto returnerror; 

    error = spsactiondescriptor->getstringlength(descfont, runtimekeyid, &strl);

    if (error) goto returnerror;

    strl+=2;

    error = spsactiondescriptor->getstring(descfont, runtimekeyid, fontpsname, strl);

    if (error) goto returnerror;

 

    info->spsname=fontpsname;

 

 

    //font name style

    error = spsactiondescriptor->getstringlength(descfont, keyfontstylename, &stringlength);

    if (error) goto returnerror;

    stringlength+=2;

    error = spsactiondescriptor->getstring(descfont, keyfontstylename, fontstyle, stringlength);

    if (error) goto returnerror;

 

    info->sfstyle= fontstyle;

 

 

//etc...   

 

 

hope helps,

regards,

momir



More discussions in Photoshop Plugin and Companion App SDK


adobe

Comments

Popular posts from this blog

How to change text Component easybook reloaded *newbee* - Joomla! Forum - community, help and support

After Effect warning: A problem occurred when processing OpenGL commands

Preconditions Failed. - Joomla! Forum - community, help and support