🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: adobe.scripting.indesign
Article #1823

Re: Extract indesign preview

#1823
From: Peter Kahrel
Date: Mon, 19 Jan 2009 17:35
90 lines
3406 bytes
JavaScript implementations of Base64 decoders can be found on the web. Below is a script that uses Thomas's method to retrieve the thumbnail from the active document and a script I found (and slightly adapted) on Stephen Ostermiller's site (Google's first hit using "base64 decoder javascript").

Peter



/*The Base 64 decoder is from Stephen Ostermiller's site: 
 <http://ostermiller.org/calc/encode.html>

Preview extractor from Thomas Nielsen 
* /

file_name = '/d/thumb.jpg';

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]/xmpGImg:image"); 
myString = myString.replace("&#xA;", "\n"); 
jpeg_string = decodeBase64 (myString); 
jpeg_file = new File (file_name); 
jpeg_file.encoding = 'binary'; 
jpeg_file.open ('w'); 
jpeg_file.write (jpeg_string); 
jpeg_file.close();
Technical Details
Message-ID: <59b78cb1.2@webcrossing.la2eafNXanI>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!newshub.sdsu.edu!webcrossing
References: <59b78cb1.-1@webcrossing.la2eafNXanI>

Show Full Headers
Complete Article Headers
X-Google-Thread: f939a,d958fa7bb0441ef4
X-Google-Attributes: gidf939a,domainid0,public,usenet
X-Google-Language: ENGLISH,ASCII-7-bit
From: "Peter Kahrel" <kahrel@kahrel.plus.com>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!newshub.sdsu.edu!webcrossing
Newsgroups: adobe.scripting.indesign
Subject: Re: Extract indesign preview
Message-ID: <59b78cb1.2@webcrossing.la2eafNXanI>
Date: Mon, 19 Jan 2009 09:35:45 -0800
References: <59b78cb1.-1@webcrossing.la2eafNXanI>
Lines: 105
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit