Suche // Search:

15.07.2014

XML per Skript in Adobe Reader importieren
//
Import XML via Script into Adobe Reader

Wenn es im den Import und Export von Daten geht, gibt es im Adobe Reader viele Hürden.
Der Export klappt hier noch relativ einfach über eine E-Mail aber der Import bleibt einen ohne LiveCycle Reader Extensions ersteinmal verwehrt.

Dabei kann man schon seit Version 9.2 externe Dateien mit dem Reader importieren.
Möglich macht das die JavaScript-Methode readFileIntoStream().

Dieses Beispiel zeigt, wie man damit Daten einer XML-Datei in ein XFA-Formular importieren kann – in Adobe Reader natürlich!


When it comes to import and export of data you'll be faced to many barriers, especially in Adobe Reader.
Ok, you can export your data quite easily by sending an email, but the import is a forbidden fruit unless you have LiveCycle Reader Extensions at hand.

Well, since Reader version 9.2 you're already able to import files with Reader.
This is possible through the JavaScript method readFileIntoStream().

This example shows, how you can import data into XFA forms from external XML files – In Adobe Reader of course!

Skript zum Importieren einer XML-Datei
//
Script to import a XML file

var vStream = util.readFileIntoStream();
if (vStream) {
    var vImport, vImportData, vImportXML;
    vImport = util.stringFromStream(vStream)
    .replace(/(\<\?.*\?\>\s*)|(\<!-{2}(.|\n|\r)*-{2}\>)|(\r\n|\r|\n)/g, "");
    vImportData = eval(vImport);
    vImportXML = vImportData.toXMLString();
    xfa.datasets.data.loadXML(vImportXML, false, true);
}

Beispiel Dateien
//
Sample files
https://files.acrobat.com/a/preview/4bbd94e6-c3e9-413a-badc-5154731720a7

Kommentare:

  1. Hallo,
    schönes Beispiel, Danke dafür :-)
    Ich suche noch nach ner Möglichkeit das beim öffnen des PDF's
    die xml Daten automatisch importiert werden (ohne Button und Livecycle Server). Dem Anwender stehen Reader und Acrobat zur Verfügung.
    ne Idee?

    Viele Grüße
    Stephan

    AntwortenLöschen
  2. Hallo,

    hierfür würde evtl. sich die FormCalc-Methode Get() anbieten.
    Diese läd den Inhalt einer URL herunter, z.B. um ein Textfeld zu befüllen.

    Formular1.#subform[0].Textfeld1::docReady - (FormCalc, client)
    $ = Get("http://www.w3schools.com/xml/cd_catalog.xml")

    AntwortenLöschen
  3. Hallo,
    die Datendatei liegt lokal oder auf einem Netzlaufwerk.
    geht da auch was?

    AntwortenLöschen
  4. Also der lokale Zugriff per file Protokoll funktioniert offenbar nicht.
    Die XFA-Spezifikation sagt zwar, dass dies mit Get() geht, aber gibt auch gleich mit an, dass es Sache des Hosts ist, ob er das unterstützt oder nicht.
    Versuche mit z.B: Get("file:///D:/cd_catalog.xml") wurden mir jedenfalls mit dem Fehler 'Operation "file:/" wird nicht unterstützt.' quittiert.
    Bliebe evtl. noch Get("ftp://..."). Hab ich selbst noch nicht probiert.

    AntwortenLöschen
  5. Ein mehrzeiliger Kommentar im XML verhindert den Import. Daher wäre diese Zeile besser:
    vImport = util.stringFromStream(vStream).replace(/^\<\?.*\?\>\s*/, "").replace(/(\r\n|\n|\r)/gm, "").replace(/\/, "");

    AntwortenLöschen
  6. Guter Tipp,

    habe das Beispiel dahingehend etwas verändert.

    AntwortenLöschen