IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Récupération du contenu HTML d'un JTextPane


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Par défaut Récupération du contenu HTML d'un JTextPane
    Bonjour,

    Je cherche à réaliser un traitement de texte mathématique en HTML sous Java. J’utilise pour cela un JTextPane associé à un HTMLDocument.
    J’aimerais savoir comment on peut accéder à l’intégralité du texte contenu dans le JTextPane sous forme HTML, et donc avec les balises associées ?
    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public final class Editeur extends JTextPane implements ActionListener, CaretListener, Serializable{
     
        private HTMLEditorKit editorKit = new HTMLEditorKit();
        private HTMLDocument sdoc = new HTMLDocument();
     
        public Editeur() {
     
            this.setEditable(true);
            this.setEditorKit(editorKit);
            this.setContentType("text/html");
            this.setDocument(sdoc);
            addCaretListener(this);}
    …
    editorKit.insertHTML(sdoc, this.getCaretPosition(),”<b>Bonjour</b>”, 0, 0, Tag.B);
    J’aimerais pouvoir récupérer « <b>Bonjour</b> », mais le HTMLDocument ne renvoie que « Bonjour » à l’aide de la méthode getText().

    Quelqu’un a-t-il une piste pour accéder à ce contenu HTML ?

    Je vous remercie par avance.

  2. #2
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Bonjour,

    Pour obtenir l'intégralité du HTML on peut procéder de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Document doc = getDocument();
    StringWriter out = new StringWriter(doc.getLength());
    editorKit.write(out, doc, 0, doc.getLength());
    System.out.println(out);
    Sinon pour manipuler le document plus finement je ne connais pas d'autre solution que de se palucher l'arbre d'Elements du document et alors ça devient (je trouve) très complexe, donc si c'est ton cas bon courage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Par défaut
    Je te remercie de ta réponse qui m’éclaire déjà pas mal.

    En fait, l’objectif final serait de pouvoir insérer du MathMl dans le JTextPane, et donc d’interpréter des balises de type <math><mfrac>…, puis de sauvegarder le JTextPane, et de pouvoir recharger les formules MathMl dedans.

    La libraire JEuclid permet d’afficher le MathMl en insérant un composant dans le JTextPane via insertComponent(), mais du coup, il n’y a pas moyen de le sauvegarder ni de conserver dans le HTMLDocument les balises de la formule insérée (La méthode que tu m’as proposée m’a permis de voir que le composant était sauvegardé dans le HTMLDocument sous la forme <p $ename="component"> et ne garde donc pas trace des balises MathMl). Je ne peux donc pas recharger ce composant dans le JTextPane.

    C’est pourquoi j’essaye de voir s’il est possible d’insérer les balises MathMl dans le HTMLDocument de façon transparente pour le JTextPane, puis de parser le document au chargement afin de reconstruire les composants MathMl.

    Quelqu’un a-t-il une idée pour effectuer cette opération ? Ou alors une autre piste possible ?

    Merci d'avance.

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Tu peux regarder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTMLDocument.setPreservesUnknownTags(true)
    mais tu vas peut être avoir des effets inattendus à l'affichage.
    Dans ce cas il faut (sûrement ?) jouer avec l'editor kit qui transforme les Elements du texte en View (méthode create(Element))

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 99
    Par défaut
    J'avais effectivement essayé cette méthode, et en effet elle renvoie un affichage étrange des balises... L'idée serait donc de ne rien afficher à la place, mais de conserver ces balises dans le HTMLDocument pour la sauvegarde et le chargement.

    Peux-tu développer un peu la méthode que tu proposes en utilisant l'editorKit ? Je n'ai jamais vraiment manipulé les Elements et les View...
    Merci.

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    En fait le modèle des composants texte dans Swing est relativement chiadé.
    En gros, il y a un objet de type Document qui est la racine d'un arbre n-aire contenant des Elements. A partir de ces derniers des View sont créés (via une ViewFactory) puis utilisés par l'UI (qui dépend généralement du look-and-feel) pour "peindre" le contenu du composant texte.

    Ces classes sont dans javax.swing.text. Je te donne un bout de code - pas forcément très propre - qui s'applique à ton cas et qui affiche des espaces à la place de balises <math> (ou </math>). Si tu veux faire mieux fouille dans toutes ces classes (javadoc et/ou sources) et vois si tu trouves ton bonheur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        private HTMLEditorKit editorKit = new HTMLEditorKit() {
    	final HTMLFactory fact = new HTMLFactory() {
    	    public View create(Element arg0) {
    		View v = super.create(arg0);
    		if (arg0 instanceof LeafElement) {
    		    if (((LeafElement)arg0).getName().equals("math")) {
    			return new GlyphView(arg0);
    		    }
    		}
    		return v;
    	    }
    	};
    	public javax.swing.text.ViewFactory getViewFactory() {
    	    return fact;
    	}
        };

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conflit de récupération de contenu de JTextPane Java
    Par Rittana dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 10/05/2015, 19h05
  2. [1.x] sfWidgetFormTextareaTinyMCE - récupération du contenu html
    Par BritsFan dans le forum Symfony
    Réponses: 4
    Dernier message: 08/05/2011, 22h58
  3. Récupérer le contenu HTML d'un JTextPane
    Par doobinay dans le forum Composants
    Réponses: 3
    Dernier message: 30/12/2010, 16h45
  4. [FLASH MX] Scrollbar et contenu Html externe
    Par efrenik dans le forum Flash
    Réponses: 9
    Dernier message: 21/08/2006, 16h39
  5. la récupération du contenu en pl/sql
    Par squalito dans le forum PL/SQL
    Réponses: 4
    Dernier message: 25/01/2005, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo