var testPalettes = [
{id: "TEST-01", main: "#2A4B7C", accent: "#5D8CAE", highlight: "#FF6B6B", neutral: "#F0F4F8"},
{id: "TEST-02", main: "#D4B8BF", accent: "#A5C1A6", highlight: "#8A6A8F", neutral: "#E8E2D9"},
{id: "TEST-03", main: "#D7A367", accent: "#C56B4F", highlight: "#5D8E7B", neutral: "#F5EDE0"},
{id: "TEST-04", main: "#6B4EFC", accent: "#00D1B2", highlight: "#FF3E7F", neutral: "#1A1A24"},
{id: "TEST-05", main: "#3A6B4A", accent: "#8DB38B", highlight: "#D4A55E", neutral: "#E1D7C8"}
];
var doc = app.activeDocument;
var outputFolder = Folder.selectDialog("选择输出文件夹");
var requiredGroups = ["主色编组", "辅助色编组", "点缀色编组", "中性色编组"];
var groups = {};
for (var i = 0; i < requiredGroups.length; i++) {
var groupName = requiredGroups[i];
try {
groups[groupName] = doc.groupItems.getByName(groupName);
} catch (e) {
alert("错误:找不到编组 '" + groupName + "'\n请确保模板包含此编组");
exit();
}
}
var progressWindow = new Window("palette", "换色进度", undefined);
progressWindow.orientation = "column";
progressWindow.preferredSize.width = 300;
var progressBar = progressWindow.add("progressbar", undefined, 0, testPalettes.length);
progressBar.preferredSize.width = 280;
var statusText = progressWindow.add("statictext", undefined, "准备开始...");
progressWindow.show();
for (var i = 0; i < testPalettes.length; i++) {
var palette = testPalettes[i];
statusText.text = "处理: " + palette.id + " (" + (i+1) + "/" + testPalettes.length + ")";
progressBar.value = i+1;
changeGroupColor(groups["主色编组"], palette.main);
changeGroupColor(groups["辅助色编组"], palette.accent);
changeGroupColor(groups["点缀色编组"], palette.highlight);
changeGroupColor(groups["中性色编组"], palette.neutral);
exportJPG(outputFolder, palette.id);
$.sleep(200);
}
progressWindow.close();
alert("测试完成!5组文件已导出");
function changeGroupColor(group, hexColor) {
var newColor = createRGBColor(hexColor);
processPageItems(group.pageItems, newColor);
}
function processPageItems(items, color) {
for (var j = 0; j < items.length; j++) {
var item = items[j];
if (item.typename === "GroupItem") {
processPageItems(item.pageItems, color);
}
else if (item.filled && item.fillColor.typename !== "GradientColor") {
item.fillColor = color;
}
else if (item.typename === "TextFrame") {
item.textRange.characterAttributes.fillColor = color;
}
}
}
function createRGBColor(hex) {
hex = hex.replace("#", "");
if (hex.length !== 6) return new RGBColor();
var color = new RGBColor();
color.red = parseInt(hex.substring(0, 2), 16) * 100 / 255;
color.green = parseInt(hex.substring(2, 4), 16) * 100 / 255;
color.blue = parseInt(hex.substring(4, 6), 16) * 100 / 255;
return color;
}
function exportJPG(folder, filename) {
var exportFile = new File(folder.fsName + "/" + filename + ".jpg");
if (exportFile.exists) {
if (!confirm("文件 " + filename + ".jpg 已存在,要覆盖吗?")) return;
}
var exportOptions = new ExportOptionsJPEG();
exportOptions.qualitySetting = 90;
exportOptions.artBoardClipping = true;
exportOptions.antiAliasing = true;
try {
doc.exportFile(exportFile, ExportType.JPEG, exportOptions);
} catch (e) {
alert("导出错误: " + e.message);
}
}
console