Suche // Search:

21.07.2015

xmpMM-Entferner
//
xmpMM Remover

Heute gibt es eine Lösung abseits von LiveCycle Designer, die aber dennoch mit XFA-Technologie zu tun hat.
Aber der Reihe nach!

Acrobat DC verwendet neuerdings die Mozillas neue JavaScript-Engine SpiderMonkey 24.
Im Gegensatz zu der früheren Versionen unterstützt diese E4X (EcmaScript 4 XML) nicht mehr.
Adobe hat die E4X-Unterstützung zwar noch einmal nachgerüstet, aber ein Ende von E4X in Acrobat ist abzusehen.
Mit dem Ende von E4X werden alle JavaScript-Lösungen die E4X einsetzen nicht mehr unterstützt und benötigen daher eine Alternative.
Ein prominentes Beispiel wäre da der xmpMM-Entferner von UVSAR.
Mit diesem Tool kann man superleicht die Müllhalde von Metadaten, die z.B. InDesign gerne in PDF's hinterlässt, bereinigen.

Die neue Lösung basiert auch auch JavaScript, nutzt aber XFA-Technologie, um die Metadaten, die ja im XML-Format vorliegen, zu manipulieren.
Kurz gesagt: Wir wandeln mittels XMLData.parse() die Metadaten in ein XFA-Objekt um und können dann die Methoden für nodeList-Objekte wie remove() anwenden, um Elemente zu entfernen usw.


Today I present a solution apart from LiveCycle Designer which however uses XFA-Technology.
But let's take one thing at a time!

Acrobat DC newly uses Mozillas JavaScript engine SpiderMonkey 24.
In opposite to earlier version it doesn't support E4X (EcmaScript 4 XML) anymore.
Adobe were so kind it retrofit E4X support but this won't be for forever and the end of E4X support in Acrobat is conceivable.
This also means the end for all JavaScript solutions using E4X, so it's time to find alternatives.
A very popular Example is UVSAR's xmpMM Remover.
This nice tool enables you to remove easily the dump of needless metadata that for example InDesign adds to PDFs.

The new solution still bases on JavaScript but also uses XFA technology to manipulate the metadata that are just XML data.
In short: We convert the metadata into a XFA object using XMLData.parse() and then can use nodeList() methods like remove() to delete elements etc.


JavaScript
function removeMetadata (oDoc, aElements, aAttributes, bLog, bLang) {
 var oMetaData = XMLData.parse(oDoc.metadata, false),
  vRoot = oMetaData.nodes.namedItem("xmpmeta").nodes.namedItem("RDF").nodes.namedItem("Description"),
  vTemp = vRoot;
 
 if (bLog) {
  console.clear();
  console.show();
  console.println(bLang ? "Extrahiere aktuelle Metadaten." : "Extracting current metadata.");
 }
 
 for (var i = 0; i < vRoot.nodes.length; i += 1) {
  aElements.forEach(function (element) {
   if (element == vRoot.nodes.item(i).name) {
    vRoot.nodes.remove(vRoot.nodes.namedItem(element));
    if (bLog) {
     console.println((bLang ? "Entferne Element:\t" : "Removing Element:\t") + element);
    }
   }
  });
  
  aAttributes.forEach(function (element) {
   if (element == vRoot.nodes.item(i).name) {
    vRoot.nodes.remove(vRoot.nodes.namedItem(element));
    if (bLog) {
     console.println((bLang ? "Entferne Attribut:\t" : "Removing Attribute:\t") + element);
    }
   }   
  });
 }
 try {
  if (bLog) {
   console.println(bLang ? "Lade modifizierte Metadaten.\nSpeichern Sie das Dokument, um die Änderungen zu behalten." : "Loading modified metadata.\nSave the document to keep changes.");
  }
  oDoc.metadata = oMetaData.saveXML("pretty");
  app.execMenuItem("SaveAs");
 } catch (error) {
  app.alert(bLang ? "Sicherheitseinstellungen des Dokuments verhindern das Ändern der Metadaten." : "Security settings of the document prevent changes to metadata.");
 }
}

removeMetadata (this, ['DerivedFrom', 'History', 'PageInfo'], ['InstanceID', 'DocumentID', 'OriginalDocumentID', 'RenditionClass', 'DocChangeCount', 'CaptionWriter'], true, appLang);

xmpMM-Entferner - Folder Level Script

//
xmpMM Remover - folder level script
https://files.acrobat.com/a/preview/b3720e40-e862-49ae-853a-20e522c31565