DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

inddドキュメントをユニークに識別する

タイトルまんまです。
ドキュメントをユニークに識別したいときってありますよね。
ありませんか? なければそっと閉じてくださいw

はじめはUUID(GUID)とかMD5とか生成して、XMPを利用してドキュメントに埋め込もう*1と思っていたんです。
ところがどっこい、XMPを眺めていたらUUIDのような文字列を見つけました。
調べてみるとそのプロパティはまんまDocumentID。
しかもなんの苦もなく取得できてしまったので備忘も兼ねて残しておきます。

var myNameSpace = "http://ns.adobe.com/xap/1.0/mm/";
//The XML namespace for the XMP digital asset management schema
var myDoc = app.documents[0]; 
var myMetadata = myDoc.metadataPreferences;
var myXmpDocID = myDoc.metadataPreferences.getProperty(myNameSpace, "DocumentID").match(/:(.+)$/)[1];

もっと早く知りたかったよ(そしたら日付の変わる前に寝られたのに)。

f:id:uske_S:20170607015518p:plain 画像はinddファイルのファイル情報を開き、Rawデータを開いたところです。
マゼンタ部分がそのDocumentIDです。この部分を抽出したいわけです。

市川せうぞーさんのこの記事では、getProperty()メソッドに対して、ネームスペースとプロパティ名を引数として渡すと取得できるとあります。
そこでネームスペース*2は下記のようにしました。

var myNameSpace = "http://ns.adobe.com/xap/1.0/mm/";

DocumentIDの冒頭に「xmpMM:」とあるので、そのネームスペースを参照します(図の上側の赤い下線部分)。

本当にこれだけです。これ以上解説のしようもないでしょう。

XMPのRawデータには、DocumentIDのすぐ下にOriginalDocumentIDというものもあります。これは新規作成したドキュメントなので同じなのかもしれません。これについては追って調べていきたいと思います。

これでドキュメントをユニークに識別する方法がわかりました(しかもとても簡単に)。

*1:実はXMPにデータを書き込みすぎてRIPでエラーになったことがあります。くれぐれも要注意です。そういう意味でも、今回知ったDocumentIDの存在はありがたかった。自分で無理やり書き込む必要がなくなったからです。

*2:ネームスペースについてはここを参照しました。海外の記事ですがとても勉強になりました。 Extract Metadata with Adobe XMP [Part 2]indisnip.wordpress.com