Autor Thema: Text in RT-Feld finden und löschen  (Gelesen 1532 mal)

Offline haeppchen

  • Junior Mitglied
  • **
  • Beiträge: 55
Text in RT-Feld finden und löschen
« am: 19.03.05 - 11:35:04 »
Hallo zusammen,

ich habe ein Rich-Text-Feld, das Text enthält aber auch Bilder, Tabellen etc.
Ich möchte jetzt NUR DEN TEXT aus diesem RT-Feld löschen, alles andere soll bestehen bleiben.

Bisher verwende ich folgenden Code (Java), der aber leider den kompletten Inhalt des RT-Feldes löscht:

         
rtTemp = (RichTextItem)docNeu.getFirstItem("RT_Temp");
rtNav = rtTemp.createNavigator();
            
if (rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH))
{
     RichTextRange rtRange = rtTemp.createRange();
     do
     {
        rtRange.setBegin(rtNav);
                    
        if (rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH))
            rtRange.remove();
     }
     while (rtNav.findNextElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH));
}


Wer kann mir weiterhelfen? Wie komme ich an die Textelemente des RT-Feldes dran, um nur diese zu löschen?

Gruß, Simon

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Text in RT-Feld finden und löschen
« Antwort #1 am: 19.03.05 - 13:37:20 »
Ich befürchte das geht nicht so ohne weiteres.

Ich denke eine Möglichkeit wäre, über DXL da ranzugehen und entsprechend den Text entfernen. Müsste man mal untersuchen wie die Tags für den Text aussehen, und eben diese dann mit Inhalt (oder nur den Inhalt) rauswerfen.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Text in RT-Feld finden und löschen
« Antwort #2 am: 21.03.05 - 23:59:57 »
Simon, was auf jeden Fall noch fehlt, ist das SetEnd des RTRange auf das gefundene Textelement. Du setzt zwar mit SetBegin, aber SetEnd bleibt immer beim Default - des Range-Ende, also dem Ende des RTItems - stehen.
Praktisch umgesetzt habe ich das aber auch noch nie.

Vielleicht hilft es ...

Bernhard

Offline haeppchen

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Text in RT-Feld finden und löschen
« Antwort #3 am: 25.03.05 - 15:08:23 »
Hallo zusammen,

@Bernhard:
Danke für deinen Tipp, es lag wirklich daran, dass ich das SetEnd beim RichTextRange vergessen hatte.

Jetzt habe ich noch ein kleines Problem:
In meinem RT-Feld ist jetzt der komplette Text entfernt worden und alle EmbeddedObjects wurden erhalten (so wie ich das wollte !!)
Leider stehen jetzt dort, wo vorher Text vorhanden war, leere Zeilen, dadurch ist mein RT-Feld noch genauso groß wie vorher.
Wie kann ich diesen überflüssigen Platzverbrauch verhindern bzw. das RT-Feld auf den Platz "zusammenschrumpfen", den die dort enthaltenen EmbeddedObjects benötigen?

Habe es bisher mit rti.compact() versucht aber ohne Erfolg.
Mein Java-Code:

private void removeText(Document docNeu)
   {
      try
      {   
         rtTemp = (RichTextItem)docNeu.getFirstItem("RT_Temp");
         rtNav = rtTemp.createNavigator();
            
         if (rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH) |
            rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTRUN))
         {
            RichTextRange rtRange = rtTemp.createRange();
            do
            {
                rtRange.setBegin(rtNav);
                rtRange.setEnd(rtNav);
                rtRange.remove();
                rtTemp.update();   
            }
            
            while (rtNav.findNextElement(RichTextItem.RTELEM_TYPE_TEXTPARAGRAPH) |
                  rtNav.findFirstElement(RichTextItem.RTELEM_TYPE_TEXTRUN));
         }
         rtTemp.compact();
      }
      catch(Exception e) {e.printStackTrace();}
   }



Gruß, Simon
« Letzte Änderung: 29.03.05 - 15:03:29 von haeppchen »

Offline haeppchen

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Text in RT-Feld finden und löschen
« Antwort #4 am: 29.03.05 - 15:11:01 »
Hallo zusammen,

konnte mein neu entstandenes Problem leider übers Wochenende nicht lösen, habe nach wie vor folgendes Problem:

Habe aus einem RT-Feld Text entfernt mit rtRange.remove(), so dass nur noch Bilder, Tabellen oder adere EmbeddedObjects enthalten sind.
Wie kann ich den Platz, den der Text vorher eingenommen hat, komprimieren? (dort stehen jetzt nur noch leere Zeilen). Das RT-Feld nimmt momentan unnötig viel Platz in Anspruch.
Habe es mit rti.compact() versucht, aber erfolglos.

Würde mich über Hilfe sehr freuen!!


Gruß, Simon

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz