如何解决JavaScript Photoshop:通过脚本更改字体不能适用于所有字体
我正在为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'时,效果很好。
我的目标是使这种字体能够工作,就像条形码字体一样,但是当我设置其姓氏时,它也不起作用。 (该字体已安装在我的计算机上)。 https://www.barcodesinc.com/free-barcode-font/
我想根据什么来识别字体。
解决方法
Adobe Illustrator也有同样的麻烦。它使用一些“内部”名称作为字体。例如,Arial
是ArialMT
,Comic Sans MS
是ComicSansMS
等。有时几乎不可能猜测给定字体的“内部”名称是什么。我写了一个小脚本,显示选定文本对象的“内部”名称:
alert(String(app.activeDocument.selection[0].textRange.characterAttributes.textFont).slice(10,-1));
如果您有Illustrator,则可以尝试。据我所知,您的条形码字体具有名称:Free3of9
和Free3of9Extended
。
您可能想要ArialMT。
字体名称和后记字体名称之间有区别。字体名称为ArialMT,后记名称为Arial。
一个比较(模糊)的解决方案是比较脚本名称和字体名称以找出哪个。该脚本将在文本层上工作,并循环浏览已安装的字体并返回名称。在基于非文本的图层上,这仅仅是基本的填充操作。
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];
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。