Copy link to clipboard
Copied
Greetings to all
I know I ask a lot
But I did not do this except after researching a lot about the problem I am facing, and I want to make it clear that all discussions and questions are personal and not commercial.
The problem I am facing is that there are files with text layers that I want to save the name of the fonts for these layers
I found code that does this, but the result is not identical to what is in the text layer properties display
To clarify more
in these pictures
When I try the code that I found
app.bringToFront(); // just in case
if (app.activeDocument.activeLayer.kind != LayerKind.TEXT)
alert("Active layer is not a text layer. \nMake the desired text layer active before invoking the \"Show Font Name\" script.");
else
{
var Font = prompt("Enter a new width in pixels.", app.activeDocument.activeLayer.textItem.font);
}
it gives a different result in terms of names
But I found a huge code, but I don't understand how it works and how to analyze the code data
This is the code that does what is required, but I just want to copy the font name into a txt file
// fontFinder.jsx - Adobe Photoshop Script
// Version: 0.3.2
// Requirements: Adobe Photoshop CS6 or higher
// Author: Anton Lyubushkin (nvkz.nemo@gmail.com)
// Website: http://uberplugins.cc/
// ============================================================================
// Installation:
// 1. Place script in:
// PC: C:\<Program Files>\Adobe\Adobe Photoshop <version>\Presets\Scripts\
// Mac: <hard drive>/Applications/Adobe Photoshop <version>/Presets/Scripts/
// 2. Restart Photoshop
// 3. Choose File > Scripts > fontFinder
// ============================================================================
/*
<javascriptresource>
<name>Find And Select Layers By Font...</name>
<category>UberPlugins</category>
<about>$$$/JavaScripts/fontFinder/About=fontFinder.jsx v.0.3.2^r^r© Anton Lyubushkin 2016^r^rwww.uberplugins.cc</about>
<enableinfo>true</enableinfo>
</javascriptresource>
*/
#target photoshop
eval("@JSXBIN@ES@2.0@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");
I attached the line in the attachments so that the code can be tested correctly
I also attached the open design
---**--- What is required is only the name of the font in order to be saved in the txt file, but I want the correct way to fetch the name of the font as I explained
See the uncoded version.
try {
app.bringToFront();
if (app.documents.length > 0) {
selectAllLayers();
textLayers = getSelectedTextLayersIndexs();
if (textLayers[0] > 0) {
showMyDialog(textLayers[1]);
} else {
deselectLayers();
}
}
function showMyDialog(textLayers) {
var i = 0;
UI_res1 = "dialog{ text: 'Font Finder', preferredSize:[-1, -1], orientation: 'column', alignChildren:'left',\n fon...
This code does not work with one layer in CS6. To get information for the active layer, you can take parts of this code and use it in your script.
var ref2 = new ActionReference();
ref2.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var desc2 = executeActionGet(ref2);
if (desc2.hasKey(stringIDToTypeID("textKey")))
{
var textStyle = desc2.getObjectValue(charIDToTypeID("Txt ")).getList(charIDToTypeID("Txtt")).getObjectValue(0).getObjectValue(char...
Copy link to clipboard
Copied
See the uncoded version.
try {
app.bringToFront();
if (app.documents.length > 0) {
selectAllLayers();
textLayers = getSelectedTextLayersIndexs();
if (textLayers[0] > 0) {
showMyDialog(textLayers[1]);
} else {
deselectLayers();
}
}
function showMyDialog(textLayers) {
var i = 0;
UI_res1 = "dialog{ text: 'Font Finder', preferredSize:[-1, -1], orientation: 'column', alignChildren:'left',\n fonts: Group {text: 'Horizontal →', orientation: 'column', alignChildren:'left', ";
for (var key in textLayers) {
UI_res1 += "option" + i + ": Checkbox {text:'" + key + " / " + textLayers[key].indexes.length + " layers', value: false}, ";
i++;
}
UI_res2 = "} buttons: Group {orientation: 'row', cancel_btn: Button {text: 'Cancel'}, submit_btn: Button {text: 'Select Layers'}, } }";
UI_res = UI_res1 + UI_res2;
w = new Window(UI_res);
w.buttons.submit_btn.onClick = function() {
var checkedGroups = [];
var g = 0;
for (var key in textLayers) {
var tmpName = "option" + g;
if (w.fonts[tmpName].value == true) {
checkedGroups = checkedGroups.concat(textLayers[key].indexes);
}
g++;
}
if (checkedGroups.length > 0) {
selectLayersByIndex(checkedGroups);
} else {
deselectLayers();
}
w.close();
};
w.buttons.cancel_btn.onClick = function() {
w.close();
};
w.show();
}
function selectAllLayers() {
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
desc1.putReference(charIDToTypeID("null"), ref1);
executeAction(stringIDToTypeID("selectAllLayers"), desc1, DialogModes.NO);
}
function deselectLayers() {
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
desc1.putReference(charIDToTypeID("null"), ref1);
executeAction(stringIDToTypeID("selectNoLayers"), desc1, DialogModes.NO);
}
function getSelectedTextLayersIndexs() {
var lyrs = {};
var count = 0;
var ref = new ActionReference();
ref.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
if (executeActionGet(ref).hasKey(stringIDToTypeID("targetLayers"))) {
var targetLayers = executeActionGet(ref).getList(stringIDToTypeID("targetLayers"));
for (var i = 0; i < targetLayers.count; i += 1) {
var ref2 = new ActionReference();
try {
activeDocument.backgroundLayer;
ref2.putIndex(charIDToTypeID("Lyr "), targetLayers.getReference(i).getIndex());
var desc2 = executeActionGet(ref2);
var layerIndex = desc2.getInteger(stringIDToTypeID("itemIndex")) - 1;
} catch (o) {
ref2.putIndex(charIDToTypeID("Lyr "), targetLayers.getReference(i).getIndex() + 1);
var desc2 = executeActionGet(ref2);
var layerIndex = desc2.getInteger(stringIDToTypeID("itemIndex"));
}
if (desc2.hasKey(stringIDToTypeID("textKey"))) {
var fontGroupName = "";
var fontGroupDetail = "";
var textStyle = desc2.getObjectValue(charIDToTypeID("Txt ")).getList(charIDToTypeID("Txtt")).getObjectValue(0).getObjectValue(charIDToTypeID("TxtS"));
var fontName = textStyle.getString(charIDToTypeID("FntN"));
var fontStyleName = textStyle.getString(charIDToTypeID("FntS"));
fontGroupName = "" + fontName + "-" + fontStyleName;
try {
var fontAvailable = textStyle.getBoolean(stringIDToTypeID("fontAvailable"));
if (!fontAvailable) {
fontGroupName = fontGroupName + " (Missing font)"
}
} catch (e) {
}
if (!lyrs[fontGroupName]) {
lyrs[fontGroupName] = {};
lyrs[fontGroupName].indexes = [];
}
count++;
lyrs[fontGroupName].indexes.push(layerIndex);
}
}
} else {
var ref2 = new ActionReference();
ref2.putProperty(charIDToTypeID("Prpr"), charIDToTypeID("ItmI"));
ref2.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
if (app.activeDocument.activeLayer.kind == LayerKind.TEXT) {
try {
activeDocument.backgroundLayer;
lyrs.push(executeActionGet(ref2).getInteger(charIDToTypeID("ItmI")) - 1);
} catch (o) {
lyrs.push(executeActionGet(ref2).getInteger(charIDToTypeID("ItmI")));
}
count++;
}
}
return [count, lyrs];
}
function selectLayersByIndex(_arrayOfIndexes) {
var desc1 = new ActionDescriptor();
var ref1 = new ActionReference();
for (var i in _arrayOfIndexes) {
ref1.putIndex(charIDToTypeID("Lyr "), _arrayOfIndexes[i]);
}
desc1.putReference(charIDToTypeID("null"), ref1);
desc1.putBoolean(charIDToTypeID("MkVs"), false);
executeAction(charIDToTypeID("slct"), desc1, DialogModes.NO);
}
} catch (e) {
alert(e.line + "\n" + e);
}
P.S. If the font is not installed in the system, this script will not help either.
Copy link to clipboard
Copied
Great job and very much appreciated
Thank you, really
Copy link to clipboard
Copied
Excuse me sir
This code is a prerequisite that it works on more than one layer
But if in the case that the document contains one text layer, it does not work
What is the solution
Copy link to clipboard
Copied
This code does not work with one layer in CS6. To get information for the active layer, you can take parts of this code and use it in your script.
var ref2 = new ActionReference();
ref2.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var desc2 = executeActionGet(ref2);
if (desc2.hasKey(stringIDToTypeID("textKey")))
{
var textStyle = desc2.getObjectValue(charIDToTypeID("Txt ")).getList(charIDToTypeID("Txtt")).getObjectValue(0).getObjectValue(charIDToTypeID("TxtS"));
var fontName = textStyle.getString(charIDToTypeID("FntN"));
var fontStyleName = textStyle.getString(charIDToTypeID("FntS"));
alert(fontName + " " + fontStyleName);
}
UPD.
Find more inspiration, events, and resources on the new Adobe Community
Explore Now