function changeColorFromObjectNames() {
// ドキュメントを取得
var doc = app.activeDocument;
// オブジェクト "targetColor1", "targetColor2", "targetColor3" と "newColor1", "newColor2", "newColor3" を取得
var targetColors = [
findObjectByName("targetColor1"),
findObjectByName("targetColor2"),
findObjectByName("targetColor3")
];
var newColors = [
findObjectByName("newColor1"),
findObjectByName("newColor2"),
findObjectByName("newColor3")
];
var colorMap = {};
for (var i = 0; i < targetColors.length; i++) {
if (targetColors[i] && newColors[i]) {
var targetColor = targetColors[i].fillColor;
var newColor = newColors[i].fillColor;
if (targetColor && newColor) {
var targetHex = rgbToHex(targetColor);
var newHex = rgbToHex(newColor);
colorMap[targetHex] = hexToRGB(newHex);
}
}
}
// すべてのオブジェクトを取得
var items = doc.pageItems;
// すべてのオブジェクトをループ
for (var j = 0; j < items.length; j++) {
var item = items[j];
// "targetColor" や "newColor" オブジェクトは変更しない
var isTargetOrNewColor = false;
for (var k = 0; k < targetColors.length; k++) {
if (item === targetColors[k] || item === newColors[k]) {
isTargetOrNewColor = true;
break;
}
}
if (isTargetOrNewColor) {
continue; // スキップして次のオブジェクトへ
}
// 通常の塗りと線の色を変更
for (var targetHex in colorMap) {
if (item.filled && compareColors(item.fillColor, hexToRGB(targetHex))) {
item.fillColor = colorMap[targetHex];
}
if (item.stroked && compareColors(item.strokeColor, hexToRGB(targetHex))) {
item.strokeColor = colorMap[targetHex];
}
}
// アピアランスの項目に対して色を変更
changePathAppearanceColors(item, colorMap);
// テキストオブジェクトの場合、テキストの塗りと線の色を変更
if (item.typename === "TextFrame") {
changeTextColors(item, colorMap);
}
}
}
// オブジェクト名で検索して該当するオブジェクトを返す関数
function findObjectByName(name) {
var items = app.activeDocument.pageItems;
for (var i = 0; i < items.length; i++) {
if (items[i].name === name) {
return items[i];
}
}
return null;
}
// テキストフレーム内のテキストの色を変更する関数
function changeTextColors(textFrame, colorMap) {
var characters = textFrame.textRange.characters;
for (var i = 0; i < characters.length; i++) {
var character = characters[i];
for (var targetHex in colorMap) {
if (compareColors(character.fillColor, hexToRGB(targetHex))) {
character.fillColor = colorMap[targetHex];
}
if (compareColors(character.strokeColor, hexToRGB(targetHex))) {
character.strokeColor = colorMap[targetHex];
}
}
}
}
// アピアランスの塗りや線の色を変更する関数
function changePathAppearanceColors(item, colorMap) {
// アピアランスの効果を確認し、色を変更
try {
var appearanceItems = item.graphicStyles[0].attributes; // アピアランスの項目を取得
for (var j = 0; j < appearanceItems.length; j++) {
var appearanceItem = appearanceItems[j];
for (var targetHex in colorMap) {
if (appearanceItem.filled && compareColors(appearanceItem.fillColor, hexToRGB(targetHex))) {
appearanceItem.fillColor = colorMap[targetHex];
}
if (appearanceItem.stroked && compareColors(appearanceItem.strokeColor, hexToRGB(targetHex))) {
appearanceItem.strokeColor = colorMap[targetHex];
}
}
}
} catch (e) {
// アピアランスの取得が失敗してもスクリプトを終了しない
$.writeln("アピアランスの取得に失敗しました: " + e.message);
}
}
// RGBColorオブジェクトをカラーコードに変換する関数
function rgbToHex(color) {
function componentToHex(c) {
var hex = Math.round(c).toString(16);
return hex.length == 1 ? "0" + hex : hex;
}
return "#" + componentToHex(color.red) + componentToHex(color.green) + componentToHex(color.blue);
}
// カラーコードをRGBColorに変換する関数
function hexToRGB(hex) {
var rgbColor = new RGBColor();
hex = hex.replace("#", "");
if (hex.length === 6) {
rgbColor.red = parseInt(hex.substring(0, 2), 16);
rgbColor.green = parseInt(hex.substring(2, 4), 16);
rgbColor.blue = parseInt(hex.substring(4, 6), 16);
}
return rgbColor;
}
// RGBカラーオブジェクトを比較する関数
function compareColors(color1, color2) {
return (color1.red == color2.red && color1.green == color2.green && color1.blue == color2.blue);
}
// スクリプトを実行
changeColorFromObjectNames();