Suche // Search:

11.11.2015

Bildfeld zum Speichern beliebig vieler Bilder
//
Image field to store multiple images

Das heutige Beispiel ist zeigt eine Lösung für Bildfelder, mit der es möglich ist beliebig viele Bilder in einem einzigen Bildfeld zu speichern.
Die Bedienung ist dabei über 4 Schaltflächen sehr einfach.
Laden Sie neue Bilder in das Bildfeld und speichern Sie diese dann mit der [+]-Schaltfläche ab.
Über die [<] und [>]-Schaltflächen können Sie einfach zwischen den gespeicherten Bildern wechseln und mit der [-] Bilder auch wieder löschen.

Today's sample is a solution for image fields which enables you to store as many images as you like in a single image field.
The handling is very easy.
Load new images into the image field and store them by clicking the button [+].
With [<] and [>] you can switch between the stored images and to delete images you just need to click on [-].

Ein Bild im Bildfeld … // One image in the image field …

… und ein weiteres Bild im Bildfeld // … and another image in the image field.


Beispiel
//
Sample
https://files.acrobat.com/a/preview/a9ed406e-d0e5-4480-a020-bac01a7faf1d


Diese Lösung jetzt kaufen
//
Buy this solution now
Sie erhalten ein Fragment mit dieser Lösung für Ihren LiveCycle Designer ES3/ES4 oder AEM Forms Designer.

You'll receive a fragment of this solution for your LiveCycle Designer ES3/ES4 or AEM Forms Designer.


20.10.2015

Markierung modifizieren
//
Modify check mark

Kontrollkästchen und Optionsfelder kommen immer sehr farblos daher.
Dieses Beispiel zeigt, wie man ihnen mehr Farbe und einen anderen Markierungsstil verpasst.


Check boxes and radio buttons are by default very colorless.
This sample demonstrates how you can give them more color and different check mark styles.





Beispiel
//
Sample
https://files.acrobat.com/a/preview/786f55fc-242d-460a-badf-12b80a6e28db

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

28.06.2015

Formulare mit neuem Namen in bestimmtes Verzeichnis speichern
//
Save forms with new name in specified directory

Vor langer Zeit hab ich mal ein Beispiel veröffentlicht, um zu zeigen, wie man Formulare mit neuem Dateinamen in gewünschte Verzeichnisse speichert.
Auch wenn das Beispiel schon gut funktionierte, war mir der Aufbau immer noch etwas zu kompliziert, daher habe ich eine neue Version entworfen.
Das Beispiel zeigt 4 Möglichkeiten ein Formular zu speichern.

Long ago I've posted a sample to demonstrate how you can save forms with new file names in desired directories.
Weell, even if the sample was working I always felt a bit unsatisfied with its structure so I I've designed a new version.
It show 4 methods to save a form.

Folder Level Script – JavaScript
var lcbSaveAs = app.trustedFunction( function (vDoc, vPath) {      
    app.beginPriv();
   vDoc.saveAs({cPath: vPath});
    app.endPriv();
});

Funktion zum Speichern mittels Folder Level Script
//
Function to save through folder level script
function lcbSave (vDoc, vPath, vCurrentName, vDefaultName) { 
 if (vCurrentName === vDefaultName) {
  try {
   event.target.lcbSaveAs(vDoc, vPath);
   xfa.host.messageBox("File was saved under:\r\r" + vPath.toUpperCase(), "File Saved", 3, 0);
         xfa.form.execInitialize();
  } catch (error) {
   xfa.host.messageBox(error.toString().replace("RaiseError: ", "") + "\r\rEnsure the destination folder exists and there isn't already a file with the same file name in that folder!\n\n" + error, "Failed to save file", 0, 0);
  }
 } else {
  app.execMenuItem("SaveAs");
 }
}

Skript zum Erstellen des Zielpfads in einem Unterordner (nur eine der Möglichkeiten)
//
Script to create save path in sub folder (just one of the methodes)
var vSlash = "/",
 vNewName = Topic1.Variables.FormName.rawValue,
 vNewPath = Topic1.Variables.CurrentPath.rawValue,
 vSubfolder = Topic1.Variables.Subfolder.rawValue,
 vCurrentName = event.target.documentFileName,
 vCurrentPath = event.target.path,
 vDefaultName = vDefaultFileName.value,
 vSeparator = Topic1.Variables.Separator.boundItem(Topic1.Variables.Separator.getDisplayItem(Topic1.Variables.Separator.selectedIndex)),
 vDate = util.printd("ddmmyyyy", new Date());
 
if (vCurrentName === vDefaultName) {
 if (vNewName !== null && vNewPath !== null) {
  vNewPath += vSubfolder;
  vNewPath += vSlash;
  vNewPath += vNewName.replace(/[\s\!\?\<\>\'\"\*\/\\\=\?\^\`\{\}\|\~]+/g, vSeparator);
  vNewPath += vSeparator;
  vNewPath += vDate;
  vNewPath += ".pdf";
  console.println(vNewPath);
 } else {
  vNewPath = vCurrentPath;
 }
}
this.rawValue = vNewPath;


Beispiel – Zip-Datei mit Formular, Folder Level Script und Unterordner
//
Example – Zip file containing form, folder level script and sub folders
https://files.acrobat.com/a/preview/fe8ef306-986e-4a20-908f-69cdff4be0e5