# Suche: Teile von Wörtern finden und dann Seiten einblenden



## Michael.David (13. Dez 2019)

Guten Morgen Miteinander,

kurz zu mir:
Ich habe so gut wie keine Erfahrung mit Java Programmierung.

Soll aber etwas programmieren, und zwar:

Wir haben ein Dokument, dass, je nach vorheriger Auswahl, in ein bestimmtes Textfeld Werte schreibt.
Das Dokument ist eine xdp Datei, andere Formate kann ich nicht nutzen.

Derzeit ist es so eingetragen: 

if (this.rawValue.substring(0,5) == "Eigen"){OSPDMS.Anlage_01.presence = "visible";}
if (this.rawValue.substring(0,5) == "Eigen"){OSPDMS.Anlage_02.presence = "visible";}
if (this.rawValue.substring(0,6) == "Selbst"){OSPDMS.Anlage_03.presence = "visible";}
if (this.rawValue.substring(0,6) == "Selbst"){OSPDMS.Anlage_04.presence = "visible";}
if (this.rawValue.substring(0,6) == "Selbst"){OSPDMS.Anlage_05.presence = "visible";}
if (this.rawValue.substring(0,6) == "Selbst"){OSPDMS.Anlage_06.presence = "visible";}

Wenn dann in dem Textfeld der automatische Eintrag mit "Eigen" beginnt, werden die Anlagen 1 und 2 eingeblendet.
Bei dem Wort "Selbst" dann die Anlagen 3 bis 6.

Das funktioniert allerdings nur, wenn der Eintrag in dem Textfeld mit genau einem dieser Wörter beginnt.
Wenn z.B. davor noch "Ort" steht und dann "Eigen", geht es nicht, da anscheinend von vorn die ersten Buchstaben verglichen werden.
Ist das so richtig?

Das Ziel wäre nun, dass das Wort, dass angegeben ist ("Eigen" oder "Selbst") nicht zwingend an erster Stelle stehen muss, sondern auch irgendwo im Text stehen kann, es trotzdem gefunden wird und die Seiten dann entsprechend eingeblendet werden.

Das "presence = "visible" ist dem geschuldet, da die Anlagen 1 bis 6 normalerweise in dem Dokument ausgeblendet sind, und nur bei Treffer eingeblendet werden sollen.

Versucht habe ich auch :

if (this.rawValue.includes("Eigen") == true){OSPDMS.Anlage_01.presence = "visible";} 
if (this.rawValue.search("Eigen") != -1){OSPDMS.Anlage_01.presence = "visible";}

Vielen Dank schon mal im voraus für die Hilfe  

Schöne Grüße

Michael


----------



## kneitzel (13. Dez 2019)

Also mir sagt das mit dem xdp erst mal recht wenig. Aber einfach mal davon ausgehend, dass Du da irgend eine Library hast, die dann in rawValue einen String hat mit irgend einem Text:

So dies eine Java Applikation ist und rawValue ein String, dann hast Du natürlich alle Methoden zur Verfügung, die String bietet:
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Was da alles Sinn machen könnte:
a) String.matches - da prüfst Du den String gegen einen regulären Ausdruck. Siehe z.B. https://regex101.com/ zum testen / herum spielen mit regulären Ausdrücken.
b) String.contains - da wird geprüft, ob eine Zeichenkette in dem String vor kommt.


----------



## mihe7 (13. Dez 2019)

Michael.David hat gesagt.:


> Ich habe so gut wie keine Erfahrung mit Java Programmierung.
> 
> Soll aber etwas programmieren, und zwar:


Also beste Voraussetzungen  



Michael.David hat gesagt.:


> Das Dokument ist eine xdp Datei, andere Formate kann ich nicht nutzen.


Meinst Du das Format von Adobe? Dann dürfte es sich um JavaScript handeln.



Michael.David hat gesagt.:


> Ist das so richtig?


Ja



Michael.David hat gesagt.:


> Das Ziel wäre nun, dass das Wort, dass angegeben ist ("Eigen" oder "Selbst") nicht zwingend an erster Stelle stehen muss, sondern auch irgendwo im Text stehen kann, es trotzdem gefunden wird und die Seiten dann entsprechend eingeblendet werden.


Sollte mit includes funktionieren (JavaScript). In Java wäre das contains. Wichtig: das Zeug berücksichtigt Groß- und Kleinschreibung.


----------



## Michael.David (13. Dez 2019)

Also wäre richtig:

_str_.includes(searchString[, position])

->
if (_str_.includes("Eigen") == "True"){OSPDMS.Anlage_01.presence = "visible";}

Passt das dann so?


----------



## mihe7 (13. Dez 2019)

Wobei Du Dir den Vergleich auf "True" sparen kannst:

```
if (str.includes("Eigen")) { ... }
```
Außerdem brauchst Du natürlich nicht für jedes presence eine eigene if-Abfrage. Mit dem ternären Operator kann man das auch schön zusammenfassen:

```
var anlagen1 = str.includes("Eigen") ? "visible" : "hidden";
OSPDMS.Anlage_01.presence = anlagen1;
OSPDMS.Anlage_02.presence = anlagen1;

var anlagen2 = str.includes("Selbst") ? "visible" : "hidden";
OSPDMS.Anlage_03.presence = anlagen2;
OSPDMS.Anlage_04.presence = anlagen2;
OSPDMS.Anlage_05.presence = anlagen2;
OSPDMS.Anlage_06.presence = anlagen2;
```
Hat dann den Vorteil, dass presence auch wieder auf "hidden" gestellt wird, wenn der betreffende Wert abgewählt wird.


----------



## Michael.David (13. Dez 2019)

Hi,

also, grundsätzlich funktioniert es anscheinend so wie gewünscht.

Aaaber:
Das Dokument wird erstellt (aus dem xdp wird ein pdf). Dieses wird im Explorer gespeichert.
In dem Textfeld ist das gesuchte Wort "mitten drin", nicht mehr am Anfang.
Allerdings werden die Anlagen erst eingeblendet, wenn man im pdf auf die Stelle klickt, wo beim Textfeld die Java Formel hinterlegt ist. 
Kann das sein? 
Kann man das irgendwie "automatisieren", also, dass die Prüfung bzw. die Java Formale beim Öffnen "automatisch ausgeführt" wird, und alles entsprechend eingeblendet wird?

Merci.

LG


----------



## mihe7 (13. Dez 2019)

Michael.David hat gesagt.:


> Kann das sein?


Klar. Das wäre sogar relativ normal.



Michael.David hat gesagt.:


> Kann man das irgendwie "automatisieren", also, dass die Prüfung bzw. die Java Formale beim Öffnen "automatisch ausgeführt" wird, und alles entsprechend eingeblendet wird?


Das weiß ich nicht genau. Allerdings: wenn man Acrobat JavaScript Scripting Guide auf S. 21 schaut, sieht es so aus, als könnte man Ereignisse beim Öffnen einer Seite hinterlegen.


----------



## Michael.David (18. Dez 2019)

Hi,

ich arbeite mit dem Adobe Experience Manager.
Hier finde ich zwar etwas zum Einstellen. allerdings funktioniert das leider nicht.
Kann man das irgendwie in den Quelltext eintragen, z.B. nach dem letzten "if..." ?
Dass im Prinzip diese Formel immer ausgeführt wird, sobald das Dokument geöffnet wird???

Dankeschön


----------



## mihe7 (18. Dez 2019)

Michael.David hat gesagt.:


> ich arbeite mit dem Adobe Experience Manager.


Oh, davon habe ich null Ahnung, sorry.


----------



## Michael.David (18. Dez 2019)

mihe7 hat gesagt.:


> Oh, davon habe ich null Ahnung, sorry.


Du, ich glaub, das Programm ist egal. Die Frage ist halt, kann man das in den Quelltext, also in die Programmierung schreiben, dass das automatisch passiert?


----------



## mihe7 (18. Dez 2019)

Michael.David hat gesagt.:


> Die Frage ist halt, kann man das in den Quelltext, also in die Programmierung schreiben, dass das automatisch passiert?


Die Frage ist halt: in welchen Quelltext?  Wie wird denn aktuell dafür gesorgt, dass die Funktion beim Kick auf den Button ausgeführt wird?


----------



## Michael.David (19. Dez 2019)

mihe7 hat gesagt.:


> Die Frage ist halt: in welchen Quelltext?  Wie wird denn aktuell dafür gesorgt, dass die Funktion beim Kick auf den Button ausgeführt wird?


Indem man draufdrückt  
Derzeit kein Automatismus.

Frage:
Bei der ursprünglichen Programmierung war es dann so, wenn der Wert in dem Feld war, sind die Anlagen automatisch eingeblendet worden.
Nun nicht.
Warum ? Kann man da eine Abfrage einfügen, so nach dem Motto "if Textfeld ist nicht leer dann starte Funktion".


----------



## Michael.David (19. Dez 2019)

Michael.David hat gesagt.:


> Indem man draufdrückt
> Derzeit kein Automatismus.


Speziell: Man muss mit der Maus auf das nun befüllte Textfeld klicken, dann kommt kurz die Sanduhr und dann sind die Seiten da...


----------



## mihe7 (19. Dez 2019)

Michael.David hat gesagt.:


> Bei der ursprünglichen Programmierung war es dann so, wenn der Wert in dem Feld war, sind die Anlagen automatisch eingeblendet worden.


Äh, das ist doch das, was Du eigentlich willst. Warum ist das jetzt nicht mehr so?


----------

