Known Participant
January 1, 2025
Answered
Read fonts from different layers
- January 1, 2025
- 3 replies
- 538 views
#target photoshop
var originalText = "AAAAAAAAAA"; // Original text
var newText = "bbbbbbbbbb"; // New text
// Get the current document
var currentDocument = app.activeDocument;
// Recursively traverse layer sets, including group layers
function traverseLayerSet(layerSet) {
for (var i = 0; i < layerSet.layers.length; i++) {
var layer = layerSet.layers[i];
// If the layer is a group, recurse into it
if (layer.typename == "LayerSet") {
traverseLayerSet(layer); // Recursively traverse layers within this group
}
// Check if the layer is a text layer
else if (layer.kind == LayerKind.TEXT) {
// Get the text content of the layer
var textContent = layer.textItem.contents;
// Check if the text matches the original text
if (textContent === originalText) { // Find the content
// Select the layer based on its index
currentDocument.activeLayer = layer;
var actionReference = new ActionReference();
actionReference.putClass(stringIDToTypeID("typeCreateOrEditTool"));
var actionDescriptor = new ActionDescriptor();
actionDescriptor.putReference(stringIDToTypeID("null"), actionReference);
executeAction(stringIDToTypeID("select"), actionDescriptor, DialogModes.NO);
var actionReference2 = new ActionReference();
actionReference2.putProperty(stringIDToTypeID("property"), stringIDToTypeID("tool"));
actionReference2.putEnumerated(stringIDToTypeID("application"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
var font = executeActionGet(actionReference2)
.getObjectValue(stringIDToTypeID("currentToolOptions"))
.getObjectValue(stringIDToTypeID("textToolCharacterOptions"))
.getObjectValue(stringIDToTypeID("textStyle"))
.getString(stringIDToTypeID("fontPostScriptName"));
// Get the font
alert(font);
layer.textItem.contents = newText; // Replace the text
}
}
}
}
// Start traversing the top-level layers (including layer sets)
traverseLayerSet(currentDocument);
As shown in the image, each text layer uses a different font. I want to use the code above to read the fonts from different text layers, but there is an issue. It fails to read the fonts from different layers, and the font retrieved is always the same, even though all my text layers have different fonts. If I use alert(app.activeDocument.activeLayer.textItem.font);, I can successfully retrieve the font, but some fonts trigger an error message:
Error 8500: The requested property does not exist.
Line: 1
->
