Java et le presse papier avec mise en forme.

nasix
Java et le presse papier avec mise en forme.

Bonjour tout le monde,

Je génère un texte en java, et je le copie en presse papier système pour le coller par la suite dans un fichier MSWord.

Tout ceci marche à merveille via mon code :

try {
   StringSelection ss = new StringSelection(sReport);
   Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
} catch (IllegalStateException e ) {
   e.printStackTrace();
}

Mon but ne se limite pas à ceci, en fait, il faut que mon fichier word respecte une certaines forme (style je veux dire), des parties en gras, d'autres en italique, et d'autres encadrés et pas mal d'autres choses, ...

Franchement je ne sais pas comment faire, j'ai fait les choses dans le sens inverse, c'est à dire, j'ai fait un paragraphe en word, je l'ai mis en forme puis je l'ai copié, et en java je l'ai récupéré du presse papier et je l'ai affiché via le code suivant :

Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
try {
   String txt = (String) t.getTransferData(DataFlavor.stringFlavor);
   System.out.println(txt);
} catch (UnsupportedFlavorException e1) {
   e1.printStackTrace();
} catch (IOException e2) {
   e2.printStackTrace();
} catch (IllegalStateException e ) {
   e.printStackTrace();
}

Mais en vain, ça ne m'affiche que le texte brut.

NB : Je sais très bien que je peux créer un template avec OpenOffice, et je peux générer tout un fichier avec son style, mais ce dont j'ai besoin colle exactement aux besoin du client, et je n'ai pas à improviser.

Si quelqu'un a une idée qui peut m'aider, je lui en serais vraiment remerciant.

fredericmazue
Re: Java et le presse papier avec mise en forme.

J'avais travaillé avec ça il y a très longtemps et je ne me souviens plus très bien, mais je pense que je peux te mettre sur une piste. Tu écris

Quote:
Mais en vain, ça ne m'affiche que le texte brut.

C'est normal. Tu utilises DataFlavor.stringFlavor qui est un des DataFlavor prédéfini. Celui-ci met tout à plat, et tu obtiens une string brut, comme le nom stringFlavor le suggère.

J'ai souvenir qu'en instanciant un DataFlavor autour d'une type mime, tu peux récupérer des données particulières. Par exemple

DataFlavor jpegFlavor = new DataFlavor("image/jpeg","JPEG image");

va te permettre de récupérer une image au format JPEG depuis le presse-papier système.

Pour des données encore plus complexes, je crois bien qu'il faut que tu codes entièrement un DataFlavor adapté.

Bon courage, et comme dirait niroken, bonne chance.

PhiLho Portrait de PhiLho
Re: Java et le presse papier avec mise en forme.

Note 1: Dans Windows, quand on copie quelque chose de complexe, le presse-papier peut en fait contenir plusieurs formats simultanés, par exemple du RTF, du HTML, du texte brut, Ascii et Unicode, voire du format propriétaire. Ainsi, quand on colle dans une application, elle peut examiner les formats existant et choisir celui qui lui convient.
Note 2: Dans une application Java, on met dans le presse-papier du HTML (enrichi par feuille de style, sans header/body), et il s'avère que coller dans Excel 200x fonctionne à merveille, même si le format est texte brut. Cela peut être une approche intéressante dans ton cas, si cela fonctionne aussi avec Word (la version que ton client utilise...).

[EDIT] Ouch, faut que je surveille les dates dans ce forum, je suppose que le problème est résolu depuis longtemps... Bon, je laisse ma réponse, elle sera peut-être utile à quelqu'un d'autre.