JavaScript Photoshop:通过脚本更改字体不适用于所有字体
我正在为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
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