JavaScript Photoshop:通过脚本更改字体不适用于所有字体

JavaScript Photoshop:通过脚本更改字体不适用于所有字体,javascript,photoshop,extendscript,photoshop-script,Javascript,Photoshop,Extendscript,Photoshop Script,我正在为photoshop编写一个脚本,将字体系列更改为不同的字体,但该脚本可以使用某些字体,而有些则不能 以下是脚本中负责更改字体系列的部分: var origDoc = activeDocument; var fullName = origDoc.name; var myLayerRef = origDoc.artLayers.add(); myLayerRef.kind = LayerKind.TEXT; myLayerRef.name = fullName ; var myTextR

我正在为photoshop编写一个脚本,将字体系列更改为不同的字体,但该脚本可以使用某些字体,而有些则不能

以下是脚本中负责更改字体系列的部分:

var origDoc = activeDocument;
var fullName = origDoc.name; 

var myLayerRef = origDoc.artLayers.add();
myLayerRef.kind = LayerKind.TEXT;
myLayerRef.name = fullName ;
var myTextRef = myLayerRef.textItem;
myTextRef.position = new Array( 100, 100);
myTextRef.size = 35;
myTextRef.font = 'Calibri';  //Font family name
myTextRef.contents = myLayerRef.name;
正如您所看到的,现在设置的字体系列是Calibri,当我运行脚本时,字体更改为Calibri系列,Verdana和其他人也是如此。但当我选择例如“Arial”、“Comic Sans MS”时,字体保留默认字体系列,即Myriad pro

此外,当我将字体系列设置为“Arial BoldMT”时,效果也很好

我的目标是让这种字体像条形码字体一样工作,但当我设置它的姓氏时,它也不工作。(字体已安装在我的计算机上)。


我想知道字体识别与否。Adobe Illustrator也有同样的问题。它使用一些“内部”字体名称。例如,
Arial
ArialMT
Comic Sans MS
ComicSans
等。有时,几乎不可能猜出给定字体的“内部”名称是什么。我编写了一个小脚本,显示选定文本对象的“内部”名称:

 alert(String(app.activeDocument.selection[0].textRange.characterAttributes.textFont).slice(10,-1));

如果你有Illustrator,你可以试试。据我所知,您的条形码字体有以下名称:
Free3of9
Free3of9扩展版

您可能需要ArialMT

字体名称和postscript字体名称之间存在差异。本例中的字体名称为ArialMT,postscript名称为Arial

一个相当(不雅观的)解决方案是比较postscript和字体名称,找出哪个是哪个。此脚本将在文本层上运行,并循环浏览已安装的字体并返回名称。这只是在非文本层上的基本和填充失败

var fontsInstalled = new Array();    
var psFontsInstalled = new Array();    
    
// get installed font names    
getInstalledFonts(fontsInstalled);    
    
// get installed postscript font names    
getInstalledFonts(psFontsInstalled, true);    
    
var srcDoc = app.activeDocument;    
var currentFontLayer = srcDoc.activeLayer;    
getFontContents(currentFontLayer)    
    
function getFontContents(alayer)    
{    
  var info = new Array;    
    
  var textContents = alayer.textItem.contents;    
  // var fontSize = alayer.textItem.size;    
  var fontFace = alayer.textItem.font;    
    
  var postScriptFontFace = gimmePostScriptFontName(fontFace, fontsInstalled, psFontsInstalled)    
    
  info.push([fontFace, textContents, postScriptFontFace]); // pushing items onto an object    
    
  // get the font contents    
  var tempFontFace     = info[0][0];    
  var tempFontContents = info[0][1];    
  var tempPSFontFace   = info[0][2];    
      
  // postscript font name only    
  var str = "Font: " + tempFontFace + "\n" + "PostScript: " + tempPSFontFace;    
    
  alert("Font info:\n" + str);
}    
    

function getInstalledFonts(arr, bool)    
{    
  if (bool == undefined) bool == false;    
    
  numOfFonts = app.fonts.length;    
  for (var i=0, numOfFonts; i < numOfFonts; i++)    
  {    
    // use app.fonts[i].postScriptName for postscript names    
    // use app.fonts[i].name for font names    
    
    // for postscritp names    
    if (bool)    
    {    
      arr.push(app.fonts[i].postScriptName);    
    }    
    else arr.push(app.fonts[i].name);    
  }    
  return arr    
}    
    
        
function gimmePostScriptFontName(str, arr1, arr2)    
{    
  for (var i = 0;  i < arr1.length; i++)    
  {    
    if (arr2[i] == str)    
    {    
      return arr1[i];    
    }    
  }    
}
 
var fontsinstated=new Array();
var psFontsInstalled=新数组();
//获取安装的字体名称
getInstalledFonts(fontsInstalled);
//获取已安装的postscript字体名称
getInstalledFonts(psFontsInstalled,true);
var srcDoc=app.activeDocument;
var currentFontLayer=srcDoc.activeLayer;
getFontContents(currentFontLayer)
函数getFontContents(alayer)
{    
var info=新数组;
var textContents=alayer.textItem.contents;
//var fontSize=alayer.textItem.size;
var fontFace=alayer.textItem.font;
var postScriptFontFace=gimmePostScriptFontName(fontFace、fontsInstalled、psFontsInstalled)
info.push([fontFace,textContents,postScriptFontFace]);//将项目推送到对象上
//获取字体内容
var tempFontFace=info[0][0];
var tempFontContents=info[0][1];
var tempPSFontFace=info[0][2];
//仅postscript字体名称
var str=“Font:”+tempFontFace+“\n”+“PostScript:”+tempPSFontFace;
警报(“字体信息:\n”+str);
}    
函数getInstalledFonts(arr、bool)
{    
如果(bool==未定义)bool==false;
numofonts=app.fonts.length;
对于(var i=0,numofonts;i