gpt4 book ai didi

error-handling - InDesign CS5脚本: Why is `#targetengine` not working correctly?

转载 作者:行者123 更新时间:2023-12-03 08:05:42 25 4
gpt4 key购买 nike

我知道Inoji会使用声明#targetengine "myEngineName"来记住全局变量(有关此信息,请参见http://incom.org/post/89818)。

但是,这仍然不足以使其记住全局变量,因为它仍然会引发有关全局变量imgs的错误:

Error Number:  30476
Error String:  "if(imgs[i].itemLink != null)" could not be completed because the object no longer exists.



...或类似的东西。它不喜欢我的代码中的那一行,似乎忘记了全局变量 imgs被实例化为什么。

因此,我实现了一条try-catch语句,并重新设置了变量 imgs并减小了catch中的迭代器...虽然可以解决此 问题,但#targetengine "myEngineName"为什么不能像预期的那样解决问题?

这是我的代码:
#target "InDesign" // this solves the "Error Number: 29446" problem
#targetengine "session" // this solves the "Error Number: 30476" problem

var imgs; // global variable for the #targetengine "session" to keep track of
var document = app.activeDocument;
var newFolder = createFolder(document); // if subdirectory images DNE, create this folder with the function below

saveAllImages(document, newFolder); // with the function below

alert("The file conversion is complete!\n\nAll black & white images have been copied to:\n" + newFolder +
"\.\n\nAll color images have been replaced with the new black & white images in the current InDesign document.");

//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

function createFolder(doc)
{
try
{
/*
* type-casting the filePath property (of type object) into a String type;
* must be a String type to concatenate with the subdirectory variable (also of type String)
*/
var docPath = String(doc.filePath);
var subdirectory = "/BLACK AND WHITE IMAGES";
}
catch(e)
{
alert(e.message + "\n - reload the script, and it should work.");
exit();
}

var imagesFolder = docPath + subdirectory; // concatenating the two variables
if(!Folder(imagesFolder).exists)
{
Folder(imagesFolder).create();
}

return imagesFolder; // for instantiation outside of this function

} // end of function createFolder

//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

function saveAllImages(doc, folder)
{
imgs = document.allGraphics; // this is a global variable, for the #targetengine "session" to keep track of
var fileName = "";
var img = "";
var imgType = "";

for(var i = 0; i < imgs.length; i++)
{
try
{
if(imgs[i].itemLink != null)
{
fileName = imgs[i].itemLink.name;

img = new File(folder + "/" + fileName); // each image instantiated here
imgType = imgs[i].imageTypeName; // image type is determined here (.tif, .jpg, .png, etc..)

//alert("The file \"" + fileName + "\"\n\tis a " + imgType + " file."); // Note: escape characters

/*
* array for image options, instantiated from the function below;
* options[0] is the "MAXIMUM" image quality property, &
* options[1] is the "GRAY" image conversion property;
*/
var options = convertToBlackAndWhite(imgType);

// each image exported to the new folder here, by file type
switch(imgType)
{
case "GIF":
alert("This script cannot convert and export the GIF file:\n\t" + fileName + " !"); // Note: escape characters
break;

case "Adobe PDF":
break;
case "EPS":
break;
case "Windows Bitmap":
break;
case "JPEG":
break;
case "PNG":
break;
case "TIFF":
options[0]; // maximum image quality
options[1]; // black & white conversion

imgs[i].exportFile(ExportFormat.JPG, img, false);
replaceWithNewImage(doc, fileName, img); // with the function below
break;

default:
alert("\tUnlisted image type: " + imgType + "!\nAdd this type to the switch statement.");
break;
} // end of switch statement

} // end of if statement
} // end of try statement
catch(e)
{
/*
* in case the #targetengine is overloaded, this solves the "Error Number: 30476" problem:
* - "The requested action could not be completed because the object no longer exists."
* (the second statement #targetengine "session" is also in place to solve this error)
*/
imgs = document.allGraphics; // global variable reinstantiated in case of error
i--; // retry the same iteration again, in case of error (the variable " i " is the iterator in the for loop)
}
} // end of for loop

} // end of function saveAllImages

//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

function convertToBlackAndWhite(fileType)
{
// array for image-quality and color-conversion values
var settings = [];

// each image exported to the new folder here, by file type
switch(fileType)
{
case "Windows Bitmap":
break;
case "JPEG":
break;
case "PNG":
break;
case "TIFF":
settings[0] = "app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.MAXIMUM"; // maximum image quality
settings[1] = "app.jpegExportPreferences.jpegColorSpace = JpegColorSpaceEnum.GRAY"; // black & white conversion
break;

default:
break;
} // end of switch statement

return settings; // for instantiation outside of this function

} // end of function convertToBlackAndWhite

//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

function replaceWithNewImage(doc, imageName, newImage)
{
var links = doc.links;
var link = "";
for(var i = 0; i < links.length; i++)
{
link = links[i];
if ( (link.status == LinkStatus.NORMAL) && (link.name == imageName) )
{
try
{
link.relink(newImage);
link.update();
}
catch(e)
{
}
} // end of if statement
} // end of for loop

} // end of function replaceWithNewImage

这是我可以找到的有关此错误的唯一信息:http://forums.adobe.com/thread/748419

编辑-

我很确定问题与replaceWithNewImage函数有关,因为没有此函数就不会发生此错误,因此不需要try-catch语句...

最佳答案

阅读您的代码,我发现可能确实有问题。您将对文档的引用设置为 Activity 文档。但是此引用在整个 session 中仍然存在。事实是,如果您切换到另一个文档或关闭该文档,则引用将丢失。这也许可以解释为什么img有时会无法定义,尽管我认为它应该引发错误。
请将变量包装在函数范围内,我保证您一切都会好起来;)

关于error-handling - InDesign CS5脚本: Why is `#targetengine` not working correctly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11405987/

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