我正在使用ExtendScript处理InDesignCC 2019中.indd
文件的元数据信息。
我的要求是,我需要访问与.indd
文件关联的所有单个链接元数据,并查看是否缺少任何链接元数据DocumentID
和InstanceID
。如果任何链接元数据都没有DocumentID
和/或InstanceID
属性的值,那么我需要显示与该链接关联的文件名,表明该特定文件缺少{{ 1}}和/或DocumentID
。
我已使用以下脚本访问InstanceID
文件的元数据。
.indd
任何人都可以帮助我,我该怎么做?
答案 0 :(得分:1)
一旦您从链接(即xmpFile.getXMP()
)获得了XMP,就需要:
使用getProperty()
方法检索特定元数据属性的值。
通常,DocumentID
和InstanceID
与NS_XMP_MM
模式名称空间相关联,描述为:
NS_XMP_MM
XMP数字资产管理架构的XML名称空间。
例如,要获取DocumentID
,您将执行以下操作:
var documentID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'DocumentID', XMPConst.STRING);
下面的要点( example.jsx )执行以下操作:
检查.indd
文件是否打开,如果没有打开,则通知用户。
加载AdobeXMPScript XMP库
检查所有链接的状态是否为“确定” ,即检查其是否不是“ Modified” 或“ Missing” 。如果任何链接状态不是“ OK” ,则要求用户将其状态更新为“ OK” 。
检查每个链接的资产是否都有DocumentID
和InstanceID
,并将其值记录到 JavaScript控制台。
对于没有DocumentID
和/或InstanceID
的任何链接资产,将显示一个警告对话框,指示链接资产的名称和路径。
example.jsx
$.level=0;
// Warn if there are no documents open.
if (!app.documents.length) {
alert('Open a document and try again.', 'Missing Document', false);
exit();
}
var doc = app.activeDocument;
// load XMP Library
function loadXMPLibrary() {
if (!ExternalObject.AdobeXMPScript) {
try {
ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');
} catch (e) {
alert('Failed loading AdobeXMPScript library\n' + e.message, 'Error', true);
return false;
}
}
return true;
}
// Check all link statuses are be ok.
function linksStatusCheck(doc) {
for (var i = 0, len = doc.links.length; i < len; i++) {
if (doc.links[i].status !== LinkStatus.NORMAL) {
alert('The status of all links must be OK \nPlease update link status ' +
'via the Links panel and try again', 'Link Status', true);
exit();
}
}
return true;
}
function checkLinksXMP(doc) {
for (var i = 0, len = doc.links.length; i < len; i++) {
var linkFilepath = File(doc.links[i].filePath).fsName;
var linkFileName = doc.links[i].name;
var xmpFile = new XMPFile(linkFilepath, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_READ);
var allXMP = xmpFile.getXMP();
// Retrieve values from external links XMP.
var documentID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'DocumentID', XMPConst.STRING);
var instanceID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'InstanceID', XMPConst.STRING);
// Useful for testing purposes....
// Log properties for each link to the console.
$.writeln('linkName: ' + linkFileName);
$.writeln('filePath: ' + linkFilepath);
$.writeln('DocumentID: ' + documentID);
$.writeln('InstanceID: ' + instanceID);
$.writeln('-------------------------------------');
// Notify user when XMP is missing...
if (!documentID && !instanceID) {
alert('Link missing DocumentID and InstanceID\n' +
'Name: ' + linkFileName + '\n\n' +
'Path: ' + linkFilepath, 'Missing XMP', true);
} else if (!documentID) {
alert('Link missing DocumentID\n' +
'Name: ' + linkFileName + '\n\n' +
'Path: ' + linkFilepath, 'Missing XMP', true);
} else if (!instanceID) {
alert('Link missing InstanceID\n' +
'Name: ' + linkFileName + '\n\n' +
'Path: ' + linkFilepath, 'Missing XMP', true);
}
}
}
if (loadXMPLibrary() && linksStatusCheck(doc)) {
checkLinksXMP(doc);
}