gpt4 book ai didi

javascript - Illustrator 通过 javascript 编辑链接文件路径

转载 作者:行者123 更新时间:2023-11-28 04:58:19 26 4
gpt4 key购买 nike

编辑,原始副本标记如下:我已经成功创建了一个半功能脚本。令我沮丧的是,我意识到语法错误是文本编辑的“”标记。它是半工作的,因为它会重新链接一些文件,并且通常在几次循环后以错误“placedArt 不存在”结束。我觉得 XML 发现的“stRef:filePath”比文件中存在的更多。示例:包含两个图像的文件两次查找每个图像的文件路径。有什么建议吗?

var counter = 0;
var doc = app.activeDocument;
var x = new XML(doc.XMPString);
var m = x.xpath('//stRef:filePath');
if (m !== '') {
for (var i=0, len=m.length(); i < len ; i++) {
var link_path = m[i];
if ( File(link_path).exists === false ) {
link_path = link_path.split('/Projects').join('/Volumes/Projects')
link_path = link_path.split('O:').join('/Volumes/Projects');
link_path = link_path.split('P:').join('/Volumes/Projects');
link_path = link_path.split('\\SERVER').join('Volumes');
link_path = link_path.split("\\").join("/");

if ( File(link_path).exists === true ){
placedArt = app.activeDocument.placedItems[i];
placedArt.relink(new File (link_path));}
alert(File(link_path).fsName);
counter++;
}

};}

if ( counter > 0 ) {
alert("Attempted to relink " + counter + " links");}
else {
alert("No links replaced");}


原始帖子
好的,我对 XML 非常缺乏经验,但我正在尝试使用脚本在 Adob​​e Illustrator 中编辑链接文件路径的部分内容。以下是我到目前为止所拥有的:

var doc = app.activeDocument;
var x = new XML(doc.XMPString);
var m = x.xpath('//stRef:filePath');
if (m !== '') {
for (var i=0, len=m.length(); i < len ; i++) {
var link_path = m[i];
if ( File(link_path).exists === false ) {
var link_path2 = String(link_path)
link_path2 = link_path2.replace(‘%5C’, ‘/‘)
alert(File(link_path2));
}
};
}

这将返回错误:8 语法错误。在行 link_path2 = link_path2.replace('%5C', '/') 上。任何重新定义 link_path2 的尝试也是如此,例如

link_path2 = 'cow';

我目前正在将 link_path 更改为 link_path2 以将其转换为字符串,假设 var link_path 返回 typeof XML 的事实是重新定义或编辑值的问题。

最终目标是将文件路径从 Windows 服务器路径编辑为 macOS 文件路径,以脚本修复损坏的链接。我已经为此搜索了几个小时,但一直陷入死胡同。

最佳答案

我不知道 XML/XMP 数据是否是执行此操作的最佳方法。我们公司的链接文件在将链接图像从一台服务器交换到另一台服务器时也遇到了类似的问题。这将打开每个 AI 文件,查找放置的项目并将图像重新链接到新路径。我只在 PC 上使用过这个,所以我不确定在 Mac 路径不可用的情况下这是否可以工作,但我想你可以尝试一下。

您是否总是使用相同的两个文件路径,或者您想每次都唯一地选择它们?如果您有一组只想交换的服务器路径,您可以使用类似的路径(我有一个类似的路径,您可以在其中选择文件的初始位置和目标):

// Select the source folder.
var destFolder, sourceFolder, files, fileType, doc, targetFile, pngExportOpts;

if (app.documents.length == 0 ){
sourceFolder = Folder.selectDialog( 'Select the folder with Illustrator files you want to relink', '~' );

// If a valid folder is selected
if ( sourceFolder != null ){
files = new Array();
// Get all files matching the filetype
files = sourceFolder.getFiles("*.ai");

if ( files.length > 0 ) {

for ( i = 0; i < files.length; i++ ){
doc = app.open(files[i]); // returns the document object
changeExt();
if (app.documents.length != 0){
doc.save();
doc.close();
}
}
}
}
}
else{
changeExt();
}



function changeExt(){

var i;
var doc = app.activeDocument;

if (doc.placedItems.length != 0){
for (i=0;i<doc.placedItems.length;i++) {
//gets the full path of the image
var imageName = doc.placedItems[i].file.fsName;
var imageURL = doc.placedItems[i].uRL;
var imagePath;

var newPath;

var i, in_file, out_file;
//if the scan is placed for the first time it uses the drive letter
//this swaps the drive letters to the server names so they can be replaced properly
if (imageName.match(/O:/)){
imagePath = imageName.replace("O:", "\\\\Serv01\\Projects1")
imageName = imagePath;

}
else (imageName.match(/P:/)){
imagePath = imageName.replace("P:", "\\\\Serv02\\Projects2")
imageName = imagePath;
}

if (imageName.match(/Serv02/)){
imagePath = imageName.replace("Serv02", "Serv01")
activePath = imagePath.replace("Projects2", "Projects1");
newPath = File(activePath);
if (newPath.exists){//copies scan over if it doesn't exist.
doc.placedItems[i].file = newPath;
}
else{
in_file = doc.placedItems[i].file;
out_file = File(activePath);
in_file.copy(out_file);
doc.placedItems[i].file = out_file;
}
}
else{
imagePath = imageName.replace("Serv01", "Serv02")
activePath = imagePath.replace("Projects1", "Projects2");
newPath = File(activePath);
if (newPath.exists){//copies scan over if it doesn't exist.
doc.placedItems[i].file = newPath;
}
else{
in_file = doc.placedItems[i].file;
out_file = File(activePath);
in_file.copy(out_file);
doc.placedItems[i].file = out_file;
}
}

}
}
else{
doc.close(SaveOptions.DONOTSAVECHANGES);
}

}

关于javascript - Illustrator 通过 javascript 编辑链接文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com