检查 InDesign 链接是否缺少 XMP - DocumentID 和 InstanceID
Check InDesign Links for missing XMP - DocumentID and InstanceID
我正在使用 ExtendScript 处理 InDesignCC 2019 中 .indd
个文件的元数据信息。
我的要求是我需要访问与 .indd
文件关联的所有个人 links 元数据,并查看是否缺少任何 links 元数据 DocumentID
和 InstanceID
。如果任何 links 元数据没有 DocumentID
and/or InstanceID
属性的值,那么我需要显示与该 link 关联的文件名,表示该特定文件缺少 DocumentID
and/or InstanceID
.
我使用下面的脚本访问了 .indd
文件的元数据。
$.level=0
// load XMP Library
function loadXMPLibrary() {
if (!ExternalObject.AdobeXMPScript) {
try{ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');}
catch (e){alert('Unable to load the AdobeXMPScript library!'); return false;}
}
return true;
}
var myFile= app.activeDocument.fullName;
var myXmp = null;
// check library and file
if (loadXMPLibrary() && myFile !== null) {
xmpFile = new XMPFile(myFile.fsName, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_UPDATE);
myXmp = xmpFile.getXMP();
$.writeln(xmpFile.getPacketInfo());
}
if (myXmp){
$.writeln (myXmp);
$.writeln (XMPFile.getFormatInfo(XMPConst.FILE_INDESIGN));
}
任何人都可以帮助我如何进一步处理这个问题?
从 link 获得 XMP 后,即 xmpFile.getXMP()
,您需要:
利用getProperty()
方法检索特定元数据的值属性。
通常 DocumentID
和 InstanceID
将与 NS_XMP_MM
架构命名空间关联,描述为:
NS_XMP_MM
The XML namespace for the XMP digital asset management schema.
例如,要获得 DocumentID
,您需要执行以下操作:
var documentID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'DocumentID', XMPConst.STRING);
解决方案:
下面的要点 (example.jsx) 执行以下操作:
检查 .indd
文件是否打开,如果没有打开则通知用户。
加载 AdobeXMPScript XMP 库
检查所有链接的状态是否为“OK”,即检查它们是否为“已修改”[=72] =],也没有 “失踪”。如果任何 link 状态不是 "OK",则要求用户将其状态更新为 "OK".
检查每个 linked 资产是否有 DocumentID
和 InstanceID
并将它们的值记录到 JavaScript 控制台.
对于任何没有 DocumentID
and/or InstanceID
的 linked 资产,会出现一个警告对话框,指示名称和路径linked 资产。
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);
}
我正在使用 ExtendScript 处理 InDesignCC 2019 中 .indd
个文件的元数据信息。
我的要求是我需要访问与 .indd
文件关联的所有个人 links 元数据,并查看是否缺少任何 links 元数据 DocumentID
和 InstanceID
。如果任何 links 元数据没有 DocumentID
and/or InstanceID
属性的值,那么我需要显示与该 link 关联的文件名,表示该特定文件缺少 DocumentID
and/or InstanceID
.
我使用下面的脚本访问了 .indd
文件的元数据。
$.level=0
// load XMP Library
function loadXMPLibrary() {
if (!ExternalObject.AdobeXMPScript) {
try{ExternalObject.AdobeXMPScript = new ExternalObject('lib:AdobeXMPScript');}
catch (e){alert('Unable to load the AdobeXMPScript library!'); return false;}
}
return true;
}
var myFile= app.activeDocument.fullName;
var myXmp = null;
// check library and file
if (loadXMPLibrary() && myFile !== null) {
xmpFile = new XMPFile(myFile.fsName, XMPConst.FILE_INDESIGN, XMPConst.OPEN_FOR_UPDATE);
myXmp = xmpFile.getXMP();
$.writeln(xmpFile.getPacketInfo());
}
if (myXmp){
$.writeln (myXmp);
$.writeln (XMPFile.getFormatInfo(XMPConst.FILE_INDESIGN));
}
任何人都可以帮助我如何进一步处理这个问题?
从 link 获得 XMP 后,即 xmpFile.getXMP()
,您需要:
利用
getProperty()
方法检索特定元数据的值属性。通常
DocumentID
和InstanceID
将与NS_XMP_MM
架构命名空间关联,描述为:NS_XMP_MM
The XML namespace for the XMP digital asset management schema.例如,要获得
DocumentID
,您需要执行以下操作:var documentID = allXMP.getProperty(XMPConst.NS_XMP_MM, 'DocumentID', XMPConst.STRING);
解决方案:
下面的要点 (example.jsx) 执行以下操作:
检查
.indd
文件是否打开,如果没有打开则通知用户。加载 AdobeXMPScript XMP 库
检查所有链接的状态是否为“OK”,即检查它们是否为“已修改”[=72] =],也没有 “失踪”。如果任何 link 状态不是 "OK",则要求用户将其状态更新为 "OK".
检查每个 linked 资产是否有
DocumentID
和InstanceID
并将它们的值记录到 JavaScript 控制台.对于任何没有
DocumentID
and/orInstanceID
的 linked 资产,会出现一个警告对话框,指示名称和路径linked 资产。
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);
}