インデザインのmetadata情報からxapGImgをJPEGで保存するスクリプト

アドビのフォーラムのExtract indesign previewより
ほぼそのまんまのスクリプトです。
これを参考にすれば以前、挑戦してあきらめてたAIファイルからサムネールを取り出す試み【失敗】も解決できそう。

/*The Base 64 decoder is from Stephen Ostermiller's site:
http://ostermiller.org/calc/encode.html
Preview extractor from Thomas Nielsen
*/

var file_name = 'thumb.jpg';
var saveFol = Folder.selectDialog ();
var END_OF_INPUT = -1;
var base64Chars = new Array(
   'A','B','C','D','E','F','G','H',
   'I','J','K','L','M','N','O','P',
   'Q','R','S','T','U','V','W','X',
   'Y','Z','a','b','c','d','e','f',
   'g','h','i','j','k','l','m','n',
   'o','p','q','r','s','t','u','v',
   'w','x','y','z','0','1','2','3',
   '4','5','6','7','8','9','+','/'
);

var reverseBase64Chars = new Array();
for (var i=0; i < base64Chars.length; i++){
  reverseBase64Chars[base64Chars[i]] = i;
}

function decodeBase64(str){

  setBase64Str(str);
   var result = "";
   var inBuffer = new Array(4);
   var done = false;
   while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
      && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
      inBuffer[2] = readReverseBase64();
      inBuffer[3] = readReverseBase64();
      result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
      if (inBuffer[2] != END_OF_INPUT){
         result +=  ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
         if (inBuffer[3] != END_OF_INPUT){
            result +=  ntos((((inBuffer[2] << 6)  & 0xff) | inBuffer[3]));
         } else {
            done = true;
         }
      } else {
         done = true;
      }
   }
   return result;
}



function setBase64Str(str){
   base64Str = str;
   base64Count = 0;
}



function readReverseBase64(){  
   if (!base64Str) return END_OF_INPUT;
   while (true){     
      if (base64Count >= base64Str.length) return END_OF_INPUT;
      var nextCharacter = base64Str.charAt(base64Count);
      base64Count++;
      if (reverseBase64Chars[nextCharacter]){
         return reverseBase64Chars[nextCharacter];
      }
      if (nextCharacter == 'A') return 0;
   }
   return END_OF_INPUT;
}


function ntos(n){
   n=n.toString(16);
   if (n.length == 1) n="0"+n;
   n="%"+n;
   return unescape(n);
}

var myString = app.activeDocument.metadataPreferences.getProperty("http://ns.adobe.com/xap/1.0/","Thumbnails/*[1]/xapGImg:image");
myString = myString.replace("&#xA;", "\n");
jpeg_string = decodeBase64 (myString);


jpeg_file = new File (saveFol+"/"+file_name);
jpeg_file.encoding = 'binary';
jpeg_file.open ('w');
jpeg_file.write (jpeg_string);
jpeg_file.close();

最初のページしかサムネール情報がないけどね。
PDF書き出して画像化が王道かしら。