Hallo,
ich würde gerne die Kanten eines Textfeldes über Scripting bearbeiten, allerdings nicht alle Kanten auf einmal sondern jede Kante anders.
Bisher sieht es so aus
$.border.edge.thickness = "1mm"
$.border.edge.presence = "visible"
allerdings bearbeite ich damit alle Kanten. Ich hätte aber gerne nur die untere bzw. jede Kante mit anderen Attributen
im XML sieht das dann bspw. so aus
-------
<border>
<edge presence="hidden" thickness="0.2mm">
<color value="51,153,102"/>
</edge>
<edge presence="hidden" thickness="0.3mm">
<color value="255,255,0"/>
</edge>
<edge presence="hidden" stroke="dashDot" thickness="0.1mm">
<color value="0,255,255"/>
</edge>
<edge presence="hidden" thickness="2mm"/>
...
----
jede Kante hat nun eine andere Dicke und einige auch eine abweichende Farbe.
Beginnend mit der oberen Kante im Uhrzeigersinn
Aber wie bekomme ich das mittels Scripting übersteuert
ich habe schon
$.border.edge(1).thickness = "1mm"
$.border.edge[1].thickness = "1mm"
versucht, vergebens...
das muss doch irgendwie gehen...
ich bin kurz vor dem verzweifeln....
Danke
Gruß
SG79
Dynamische Feldkanten Bearbeitung
Dynamische Feldkanten Bearbeitung
Willst Du die Kanten zur Designzeit (im Designer) oder später zur Laufzeit (in Acrobat/Reader) ändern?
Zur Laufzeit kannst Du das z.B. mit folgenden Skript erledigen:
Dieses Skript ändert die 4 Kanten (Edges) von Textfeld1 (Stärke, Sichtparkeit, Farbe).
Dies funktioniert aber nur, wenn dass Feld schon Kanten hat, z.B, weiße oder alle auf "hidden" gesetzt.
Zur Designzeit lässt sich das im Designer 8.x wenn überhaupt nur sehr sehr sehr schwer umsetzen.
In den neuere Versionen 9 und 10 könntest Du hingegen einfach mein Makro benutzen, dass ich für diesen Zweck gemacht habe.
http://thelivecycle.blogspot.com/2011/0 ... macro.html
Zur Laufzeit kannst Du das z.B. mit folgenden Skript erledigen:
Code: Alles auswählen
function addEdges(nObject, nThickness, nPresence, nColor) {
for (var e = 0; e < 4; e++) {
var targetEdge = xfa.resolveNode(nObject.somExpression + ".ui.oneOfChild.border.edge[" + e + "]");
console.println(targetEdge);
targetEdge.thickness = nThickness[e];
targetEdge.presence = nPresence[e];
targetEdge.color.value = nColor[e];
}
}
var nThickness = ["1mm", "0.5mm", "0.75mm", "0.01mm"];
var nPresence = ["visible", "visible", "visible", "visible"];
var nColor = ["255,42,18", "15,68,158", "147,22,0", "50,99,210"];
var nObject = xfa.resolveNode("Formular1.#subform.Textfeld1");
addEdges(nObject, nThickness, nPresence, nColor);
Dies funktioniert aber nur, wenn dass Feld schon Kanten hat, z.B, weiße oder alle auf "hidden" gesetzt.
Zur Designzeit lässt sich das im Designer 8.x wenn überhaupt nur sehr sehr sehr schwer umsetzen.
In den neuere Versionen 9 und 10 könntest Du hingegen einfach mein Makro benutzen, dass ich für diesen Zweck gemacht habe.
http://thelivecycle.blogspot.com/2011/0 ... macro.html
Dynamische Feldkanten Bearbeitung
Hallo,
danke erstmal für die schnelle Antwort.
also die Kanten will ich zur Designzeit ändern.
Die Kantendicke bzw. -sichtbarkeit wird über Datenvariablen mit gegeben, die von außerhalb kommen.
Das Textfeld ist übrigens gleichzeitig Zelle einer Tabelle,
Letztendlich will ich damit entscheiden, ob die Tabelletrennlinien je Spalte hat oder nicht, aber ich will nicht jede Zelle der Tabelle komplett umranden.
Interaktiv ist das Formular am Ende auch nicht.
Aufgerufen wird das ganze übrigens aus dem SAP, aber ich denke, dass dürfte für das Scripting keine Rolle spielen.
Ich habe dein Script auch schon ausprobiert,
funktioniert bei mir leider nicht, ich vermute mal, dass ich das
nObject falsch befülle.
als Ereignis verwende ich Layout:Ready
----- data.BODY01.TABLE1.DATA.COL01::ready:layout - (JavaScript, Client) ------------------
Meine Masterseite heißt "Seite1".
und nObject sieht dann entsprechend so aus:
var nObject = xfa.resolveNode("Seite1.#BODY01.TABLE1.DATA.COL01");
Gruß
SG79
danke erstmal für die schnelle Antwort.
also die Kanten will ich zur Designzeit ändern.
Die Kantendicke bzw. -sichtbarkeit wird über Datenvariablen mit gegeben, die von außerhalb kommen.
Das Textfeld ist übrigens gleichzeitig Zelle einer Tabelle,
Letztendlich will ich damit entscheiden, ob die Tabelletrennlinien je Spalte hat oder nicht, aber ich will nicht jede Zelle der Tabelle komplett umranden.
Interaktiv ist das Formular am Ende auch nicht.
Aufgerufen wird das ganze übrigens aus dem SAP, aber ich denke, dass dürfte für das Scripting keine Rolle spielen.
Ich habe dein Script auch schon ausprobiert,
funktioniert bei mir leider nicht, ich vermute mal, dass ich das
nObject falsch befülle.
als Ereignis verwende ich Layout:Ready
----- data.BODY01.TABLE1.DATA.COL01::ready:layout - (JavaScript, Client) ------------------
Meine Masterseite heißt "Seite1".
und nObject sieht dann entsprechend so aus:
var nObject = xfa.resolveNode("Seite1.#BODY01.TABLE1.DATA.COL01");
Gruß
SG79
Dynamische Feldkanten Bearbeitung
Ok,
das was Du vorhast wird so nicht funktionieren.
Die Möglichkeit der Template-Manipulation zur Designzeit in Designer 8 beschränkt sich auf ein absolutes Minimum, da zur Designzeit ja keine JavaScripte ausgeführt werden, sondern nur zur Laufzeit.
Designer 9 und 10 haben eine API bekommen, dies es erlaubt Makros zur Designzeit auszuführen, aber das kommt bei dir nicht in Frage.
Es spielt daher keine Rolle mit welchem Event du arbeitest, es wird vom Designer nicht ausgeführt.
Die einzige, mir bekannte Lösung gibt es unter: http://blogs.adobe.com/formfeed/2009/05 ... ation.html.
Sie nutzt das Initialize Event (Server) beim Laden der PDF in Designer.
Dies ist der einzige Zeitpunkt, beim dem der Designer sich wie ein Server verhält und Server-Skripte ausführen kann, somit kann er auch das Template manipulieren, was die Clients (PDF-Viewer) niemals können.
Du kannst dir mit dieser Methode ein Save-Time-Skript erstellen, dass beim Speichern in dein Template eingeplanzt wird.
Wenn Du das Formular dann erneut in Designer öffnest, wird das Skript im Initialize Event ausgeführt und das Template entsprechend verändert.
das was Du vorhast wird so nicht funktionieren.
Die Möglichkeit der Template-Manipulation zur Designzeit in Designer 8 beschränkt sich auf ein absolutes Minimum, da zur Designzeit ja keine JavaScripte ausgeführt werden, sondern nur zur Laufzeit.
Designer 9 und 10 haben eine API bekommen, dies es erlaubt Makros zur Designzeit auszuführen, aber das kommt bei dir nicht in Frage.
Es spielt daher keine Rolle mit welchem Event du arbeitest, es wird vom Designer nicht ausgeführt.
Die einzige, mir bekannte Lösung gibt es unter: http://blogs.adobe.com/formfeed/2009/05 ... ation.html.
Sie nutzt das Initialize Event (Server) beim Laden der PDF in Designer.
Dies ist der einzige Zeitpunkt, beim dem der Designer sich wie ein Server verhält und Server-Skripte ausführen kann, somit kann er auch das Template manipulieren, was die Clients (PDF-Viewer) niemals können.
Du kannst dir mit dieser Methode ein Save-Time-Skript erstellen, dass beim Speichern in dein Template eingeplanzt wird.
Wenn Du das Formular dann erneut in Designer öffnest, wird das Skript im Initialize Event ausgeführt und das Template entsprechend verändert.
Dynamische Feldkanten Bearbeitung
Zur Not kann ich auch mit Pseudospalten/Zeilen arbeiten,
also sehr dünnen Spalten/Zeilen die vollumrahmt als Linie erscheinen.
Oder ich versuchs mal mit einer neueren Designer Version
Danke nochmal
Gruß
SG79
also sehr dünnen Spalten/Zeilen die vollumrahmt als Linie erscheinen.
Oder ich versuchs mal mit einer neueren Designer Version
Danke nochmal
Gruß
SG79
-
- Beiträge: 90
- Registriert: 02.04.2013, 11:17
Dynamische Feldkanten Bearbeitung
Hallo radzmar,
in meinem Formular frage ich einzelne Felder ab, ob diese vom User gefüllt wurden.
Wurde ein Feld nicht befüllt, wird dies mit einer Farbe gefüllt.
Füllt der User nun dieses Feld korrekt aus, dann wird mit der "validate"-Überprüfung das farbig-markierte Feld wieder mit dem Befehl " fillColor = "255,255,255"; "
quasi farblos gesetzt.
Dabei stört aber immer der dünne schwarze Rand um solch ein Texfeld, da der darin enthaltene Text dann direkt am linken Rand anliegt. (Textausrichtung links)
Wie kann ich bei dem oben genannten Befehl auch gleich den Rand (in diesem Fall farblos) mit definieren)? Border-color oder noborder ?
Viele Grüße
Firefox012
in meinem Formular frage ich einzelne Felder ab, ob diese vom User gefüllt wurden.
Wurde ein Feld nicht befüllt, wird dies mit einer Farbe gefüllt.
Füllt der User nun dieses Feld korrekt aus, dann wird mit der "validate"-Überprüfung das farbig-markierte Feld wieder mit dem Befehl " fillColor = "255,255,255"; "
quasi farblos gesetzt.
Dabei stört aber immer der dünne schwarze Rand um solch ein Texfeld, da der darin enthaltene Text dann direkt am linken Rand anliegt. (Textausrichtung links)
Wie kann ich bei dem oben genannten Befehl auch gleich den Rand (in diesem Fall farblos) mit definieren)? Border-color oder noborder ?
Viele Grüße
Firefox012
Dynamische Feldkanten Bearbeitung
Hallo Firefox012,
lies mal zur Beantwortung der von dir gestellten Frage in der Hilfe bei [font=courier new]borderColor[/font] und [font=courier new]borderWidth[/font] nach.
Bei mir keimt aber der Verdacht, dass du den Rand nach dem "Entfärben" eines Felds vermeiden willst? Dazu musst du dem Feld erst mal einen Rand hinzufügen und dann wieder entfernen. In der XML-Quelle steht dann zusätzlich
[font=courier new]<border>
<edge presence="hidden"/>?
<corner presence="hidden" thickness="0.176mm"/>
</border>[/font]
und der Rand ist weg.
vg armine
lies mal zur Beantwortung der von dir gestellten Frage in der Hilfe bei [font=courier new]borderColor[/font] und [font=courier new]borderWidth[/font] nach.
Bei mir keimt aber der Verdacht, dass du den Rand nach dem "Entfärben" eines Felds vermeiden willst? Dazu musst du dem Feld erst mal einen Rand hinzufügen und dann wieder entfernen. In der XML-Quelle steht dann zusätzlich
[font=courier new]<border>
<edge presence="hidden"/>?
<corner presence="hidden" thickness="0.176mm"/>
</border>[/font]
und der Rand ist weg.
vg armine