Bildfeld auf "change" überprüfen

Alles was sich mit dem Thema dynamische XML Formulare auf Basis des LiveCycleDesigners beschäftigt
Benutzeravatar
NTCNC9
Beiträge: 20
Registriert: 18.09.2011, 18:19

Bildfeld auf "change" überprüfen

Beitrag von NTCNC9 » 05.01.2012, 09:59

Hallo Zusammen,

Ich habe in meinem Formular ein dynamisches Bildfeld welches mit einem Demobild gefüllt ist. ich möchte nun sobald der User ein anderes Bild auswählt (change/click Ereignis) das Hinweitexte o.ä. verschwinden? Wie kann man das abfragen?

Viele Grüße und Danke

NTCNC9

Benutzeravatar
radzmar
Beiträge: 962
Registriert: 26.10.2011, 10:18

Bildfeld auf "change" überprüfen

Beitrag von radzmar » 05.01.2012, 10:17

Wo werden die Hinweise angezeigt? Separates Textfeld oder in der Beschriftung?

Benutzeravatar
NTCNC9
Beiträge: 20
Registriert: 18.09.2011, 18:19

Bildfeld auf "change" überprüfen

Beitrag von NTCNC9 » 05.01.2012, 10:18

In einem separaten textfeld.

Benutzeravatar
radzmar
Beiträge: 962
Registriert: 26.10.2011, 10:18

Bildfeld auf "change" überprüfen

Beitrag von radzmar » 05.01.2012, 12:04

Ok,

du brauchst 2 Skripte.
Das erste im initialize:Event des Bildfeldes:

Code: Alles auswählen

if (this.extras.nodes.namedItem("prevImage") === null) {
    this.extras.nodes.append(xfa.form.createNode("extras", "prevImage"));
    this.extras.prevImage.nodes.append(xfa.form.createNode("integer", "dataLength"));
    while (this.extras.prevImage.nodes.length > 0) {
        this.extras.prevImage.nodes.remove(this.extras.prevImage.nodes.item(this.extras.prevImage.nodes.length - 1));
    }
    var newData = xfa.form.createNode("integer", "dataLength");
    newData.value = this.value.oneOfChild.value.length;
    this.extras.prevImage.nodes.append(newData);
}
Das zweite im change:Event.

Code: Alles auswählen

var prevData = this.extras.prevImage.dataLength.value;
var newData = this.value.oneOfChild.value.length;
this.extras.prevImage.dataLength.value = newData;

if (prevData !== newData) {
    TextField1.rawValue = "Es wurde ein neues Bild eingefügt.";
} else {
    TextField1.rawValue = "Es wurde dasselbe Bild eingefügt.";
}
Was macht es?
Das erste Skript ermittelt die Datenlänge des Base64-Strings des Bildfeldes und speichert diesem in Extras-Objekt.
Das zweite Skript vergleicht dann die Datenlänge des neu eingefügten Bildes mit der gespeicherten und ändert entsprechend den Inhalt eines Textfeldes.

Benutzeravatar
NTCNC9
Beiträge: 20
Registriert: 18.09.2011, 18:19

Bildfeld auf "change" überprüfen

Beitrag von NTCNC9 » 05.01.2012, 13:57

Hey,

Danke dir, funktioniert gut, ganz schön aufwendig. Hätte nicht gedacht das man solche Klimmzüge machen muss.

cheerz

Benutzeravatar
radzmar
Beiträge: 962
Registriert: 26.10.2011, 10:18

Bildfeld auf "change" überprüfen

Beitrag von radzmar » 05.01.2012, 15:43

Ja,

bei Bildern kann man leider nicht mit xfa.event.newText mit xfa.event.prevText vergleichen, daher muss das etwas umständlicher gelöst werden.

Aber Hauptsache es geht.

Benutzeravatar
NTCNC9
Beiträge: 20
Registriert: 18.09.2011, 18:19

Bildfeld auf "change" überprüfen

Beitrag von NTCNC9 » 05.01.2012, 16:10

Kann man eigentlich Bilddaten aus einem normalen Bildfeld auslesen und in ein anderes Bildfeld einlesen?

Benutzeravatar
radzmar
Beiträge: 962
Registriert: 26.10.2011, 10:18

Bildfeld auf "change" überprüfen

Beitrag von radzmar » 05.01.2012, 17:28

Klar.

Code: Alles auswählen

Bildfeld2.value.oneOfChild.value = Bildfeld1.value.oneOfChild.value

Benutzeravatar
NTCNC9
Beiträge: 20
Registriert: 18.09.2011, 18:19

Bildfeld auf "change" überprüfen

Beitrag von NTCNC9 » 31.01.2012, 15:18

Hallo,

Anbei einfach mal ne Frage zum Frust ablassen:

Warum heisst das "unsichtbar"-machen von Bildern "invisible" und nicht "hidden"?
"hidden" funktioniert auch aber lässt sich mit "visible" nicht wieder einblenden?

@radzmar:

Das mit dem Bildinhalt verschieben
Bildfeld2.value.oneOfChild.value = Bildfeld1.value.oneOfChild.value
funktioniert leider nicht.

Ich würde gerne von einem statischen Bild dieses Bild auf einer anderen Seite "auftauchen" lassen wenn das entsprechende Optionsfeld aktiviert wurde.

Viele Grüße und Danke :-)

Benutzeravatar
radzmar
Beiträge: 962
Registriert: 26.10.2011, 10:18

Bildfeld auf "change" überprüfen

Beitrag von radzmar » 01.02.2012, 20:35

Achso, hatte ich leider nicht erwähnt, dass die zuvor genannte Methode nur klappt, wenn das Bild eingebettet ist.

Wenn es nicht eingebettet ist (empfohlen) geht es aber auch.
Man kopiert einfach die contentType und href-Attribute des Quellbildes auf das andere Bild.

Code: Alles auswählen

Bild2.value.image.contentType = "application/octet-stream"
Bild2.value.image.href =  Bild1.value.image.href
Der Vorteil dabei ist, dass beide Bilder dieselbe Bildquelle im PDF-Datenstrom, somit wächst die Dateigröße beim Speichern nicht jedes mal um die Datenmenge des Bildes an.

Die Beispiele anbei verdeutlichen das mal.
Beide sind anfangs 460KB groß, aber während die mit dem verlinkten Bild auch nach dem Kopieren des Bildes nahezu unverändert groß ist (464KB), ist die mit dem eingebetteten Bild schon merklich angeschwollen (488KB).
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten