générateur de document RTF

testeurforme
générateur de document RTF

Bonjour

Je voudrais developper une application qui puisse générer un fichier RTF à partir d'un document text, XML ou autre

Mon idée de base etait de rechercher les différentes balises utilisées par un fichier RTF mais cela me semble tres lourd... surtout si je veux pouvoir inserer des tableaux, des puces ... faire une mise en page plus riche que celle d'un simple fichier Text.

En cherchant sur le net j'ai trouvé ceci :http://rtftemplate.sourceforge.net/userguide/java-development.html

J'avoue que le faite que cela soit en anglais m'a un peu découragé (:oops: ) donc avant de me lancer dans sa traduction j'aurai aimé savoir si quelqu'un pouvait me dire de quoi il s'agissait .

De plus je suis surpris qu'il n'existe pas de bibliotheque java permettant de générer des fichier RTF ...

ps : J'ai bien vu que le JTextPane savait interpreter le RTF mais je ne veux pas un interpreteur, je voudrais un générateur...

En esperant que quelqu'un aura une piste a me donner ...
Dans tous les cas merci d'avoir lu mon post...
a+

fredericmazue

Bonjour,

Quote:

oudrais developper une application qui puisse générer un fichier RTF

Je vois que tu as choisi RTF finalement :)

Quote:

Mon idée de base etait de rechercher les différentes balises utilisées par un fichier RTF mais cela me semble tres lourd... surtout si je veux pouvoir inserer des tableaux, des puces ... faire une mise en page plus riche que celle d'un simple fichier Text.

Mais faire une mise en page riche, c'est toujours lourd....

Quote:

J'avoue que le faite que cela soit en anglais m'a un peu découragé (Embarassed ) donc avant de me lancer dans sa traduction j'aurai aimé savoir si quelqu'un pouvait me dire de quoi il s'agissait .

Je tente une explication: un de ces gros bouzins dont Java a le secret :twisted: :wink:

Autre explication. C'est une moulinette qui te permet de définir des modèles de documents et qui à partir de tes données te génère un document final. Un peu comme un modèle dans un traitement de texte te sert de moule pour un document

Quote:

De plus je suis surpris qu'il n'existe pas de bibliotheque java permettant de générer des fichier RTF

Si, ça s'appelle Saffron mais c'est un produit commercial je crois.
http://www.dynalivery.com/products/saffron/saffron.html

Sinon tu as des librairies pour générer des PDF
http://schmidt.devlib.org/java/libraries-pdf.html

Sinon puisque tu as l'air sous Windows tu peux piloter Word depuis une application car c'est un serveur COM/Automatino et il existe des librairies Java qui font le pont entre Java et Automation de Microsoft.
C'est pas mal de piloter Word.
Mais ça ne sera sans doute pas trop "léger"...

testeurforme

hello Mr Fred

Merci beaucoup pour ces precisions!! Je regraderai demain, la je suis crevé ..

Je te tiens au courant de mes recherches/choix

bonne soirée

Julien

testeurforme

bonjour Fred (et aux autres bien sur...)

Apres mult recherche , j'ai plus ou moins trouvé mon bonheur avec la librairie jfor-0.7.2rc1.jar

http://sourceforge.net/project/showfiles.php?group_id=29441

Je dis plus ou moins car j'ai un problème avec les bordure de tableau. Je sais les bordure de tableau c'est pas le plus important mais bon pour avoir un document qui en jette un peu ca l'est quand meme.

Le truc c'est que je n'arrive pas à obtenir un tableau (de plusieurs ligne et de plusieurs cellules) avec des bordures. C'est un vrai casse tete. JE ne comprend pas la logique , j'en viens meme a me demander si il n'y a pas un bug! (oui je sais c'est ce qu'on dit quand on comprend pas mais la ...)

Je me doute que tu n'as pas eu l'occasion de tester cette librairie mais peut etre connais tu quelqu'un qui pourrai m'aider ?

si une personne aurait la gentillesse de m'orienter ....

( Au passage je precise que je commence a maitriser un peu la librairie donc si quelqu'un a des question qu'il n'hesites pas)

Merci à tous
bonne journée

fredericmazue

Quote:

Je me doute que tu n'as pas eu l'occasion de tester cette librairie

Non seulement je ne l'ai pas testée, mais je ne connais pas du tout cette librairie.
Si j'ai le temps je vais regarder. Fondamentalement ça m'intéresse car je suis en train de réfléchir (suite à ta question sur ce forum :) ) à un article simple sur la génération de .rtf et .pdf en Java. En principe pour Programmez! 97. Oui c'est loin ;)
Mais peut être quelqu'un d'autre saura-t-il t'aider ici et tout de suite ?

testeurforme

Dans tous les cas si tu as l'occasion de te mettre sur cette librairie , et que tu as des questions ... n'hesites pas, qui sait je pourrai pour une fois te rendre l'appareil...

a+

fredericmazue

Je n'y manquerai pas, et avec plaisir

Merci :)

testeurforme

de rien ...

fredericmazue

Salut,

J'ai regardé Jfor. Heu... belle bouteille à encre pleine de noir de café :) Tout ce que j'aime pas :)
Mais pour les bordures ça devrait être possible si je comprends bien ce qu'ils racontent.
Tu as un bout de code à montrer dans ce que tu as fait qui ne marche pas ?

A part ça je me demande s'il est très actif le projet jfor. Arrêté, intégré à un autre projet ? A voir...

testeurforme

hello

Effectivement je comprend ta rétissence....
Pour ce qui est du code je te le mettrai demain (normalement...)
Quand au projet Jfor voila ce que m'a repondu un des participants :

Quote:

Note that the jfor project is inactive, the code has been donated to
FOP (http://xmlgraphics.apache.org/fop) where development continues.
You might want to go with FOP instead, this will give you more chances
of getting support.

A+

testeurforme

hello

voila comme prevu un exemple de code ou j'utilise un tableau avec des bordure. Le 1er exemple correspond au parametrage que j'utilise. IL ne me convient pas mais c'est la seule manière que j'ai trouvé pour avoir un semblant de bordure.

Il y a un pointsur lequel je ne me suis pas penché c'est l'impl"mentation de l'interface ITableColumnsInfo. J'ai créé la classe TableColumnsInfo mais je me demande si mon implémentation est bonne...

Pour pouvoir executer cela il faut avoir mis la bibliotheque
jfor-0.7.2rc1.jar disponible à l'adresse suivante :

http://sourceforge.net/project/showfiles.php?group_id=29441

import org.jfor.jfor.rtflib.rtfdoc.*;
import org.jfor.jfor.interfaces.ITableColumnsInfo;
import java.io.IOException;
import java.io.File;
import java.io.FileWriter;

public class TestBordure {
    private static final int MM_TO_TWIPS = (int) (1440f / 25.4f);

    public static void main(String[] arg) {
        TestBordure testBordure = new TestBordure();
        try {
            testBordure.generate();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void generate() throws IOException {
        File output = new File(new File("work"), "GenBordureTable.rtf");
        RtfFile f = new RtfFile(new FileWriter(output));
        RtfDocumentArea rda = f.startDocumentArea();
        RtfSection sect = rda.newSection();


        {
            RtfTable tbl = sect.newTable(new TableColumnsInfo());
            RtfAttributes att = new RtfAttributes();
            att.set(RtfTableRow.CELL_BORDER_BOTTOM, RtfText.BDR_BOTTOM_SINGLE);
            att.set(RtfTableRow.CELL_BORDER_RIGHT, RtfText.BDR_BOTTOM_SINGLE);

            for (int i = 0; i < 5; i++) {
                RtfTableRow r0 = tbl.newTableRow();
                r0.newTableCell(50 * MM_TO_TWIPS, att).newParagraph().newText("R" + i + " - 0");
                r0.newTableCell(50 * MM_TO_TWIPS, att).newParagraph().newText("R" + i + " - 1");
                r0.newTableCell(50 * MM_TO_TWIPS, att).newParagraph().newText("R" + i + " - 2");
            }
        }

        sect.newParagraph().newLineBreak();
        sect.newParagraph().newLineBreak();

        {
            RtfTable tbl2 = sect.newTable(new TableColumnsInfo());
            RtfAttributes att2 = new RtfAttributes();
            att2.set(RtfTableRow.CELL_BORDER_BOTTOM, RtfText.BDR_BOTTOM_SINGLE);
            att2.set(RtfTableRow.CELL_BORDER_RIGHT, RtfText.BDR_BOTTOM_SINGLE);
            att2.set(RtfTableRow.CELL_BORDER_LEFT, RtfText.BDR_BOTTOM_SINGLE);
            att2.set(RtfTableRow.CELL_BORDER_TOP, RtfText.BDR_BOTTOM_SINGLE);

            for (int i = 0; i < 5; i++) {
                RtfTableRow r0 = tbl2.newTableRow();
                r0.newTableCell(50 * MM_TO_TWIPS, att2).newParagraph().newText("R" + i + " - 0");
                r0.newTableCell(50 * MM_TO_TWIPS, att2).newParagraph().newText("R" + i + " - 1");
                r0.newTableCell(50 * MM_TO_TWIPS, att2).newParagraph().newText("R" + i + " - 2");
            }
        }

        sect.newParagraph().newLineBreak();
        sect.newParagraph().newLineBreak();

        {
            RtfTable tbl3 = sect.newTable(new TableColumnsInfo());
            RtfAttributes att3 = new RtfAttributes();
            att3.set(RtfTableRow.ROW_BORDER_BOTTOM, RtfText.BDR_BOTTOM_SINGLE);
            att3.set(RtfTableRow.ROW_BORDER_RIGHT, RtfText.BDR_BOTTOM_SINGLE);

            for (int i = 0; i < 5; i++) {
                RtfTableRow r0 = tbl3.newTableRow();
                r0.newTableCell(50 * MM_TO_TWIPS, att3).newParagraph().newText("R" + i + " - 0");
                r0.newTableCell(50 * MM_TO_TWIPS, att3).newParagraph().newText("R" + i + " - 1");
                r0.newTableCell(50 * MM_TO_TWIPS, att3).newParagraph().newText("R" + i + " - 2");
            }
        }

        sect.newParagraph().newLineBreak();
        sect.newParagraph().newLineBreak();

        {
            RtfTable tbl4 = sect.newTable(new TableColumnsInfo());
            RtfAttributes att4 = new RtfAttributes();
            att4.set(RtfTableRow.ROW_BORDER_RIGHT, RtfText.BDR_BOTTOM_SINGLE);
            att4.set(RtfTableRow.ROW_BORDER_LEFT, RtfText.BDR_BOTTOM_SINGLE);
            att4.set(RtfTableRow.ROW_BORDER_HORIZONTAL, RtfText.BDR_BOTTOM_SINGLE);
            att4.set(RtfTableRow.ROW_BORDER_VERTICAL, RtfText.BDR_BOTTOM_SINGLE);

            for (int i = 0; i < 5; i++) {
                RtfTableRow r0 = tbl4.newTableRow();
                r0.newTableCell(50 * MM_TO_TWIPS, att4).newParagraph().newText("R" + i + " - 0");
                r0.newTableCell(50 * MM_TO_TWIPS, att4).newParagraph().newText("R" + i + " - 1");
                r0.newTableCell(50 * MM_TO_TWIPS, att4).newParagraph().newText("R" + i + " - 2");
            }
        }

        sect.newParagraph().newLineBreak();
        sect.newParagraph().newLineBreak();


        f.flush();
    }

    class TableColumnsInfo implements ITableColumnsInfo {
        public float getColumnWidth() {
            return INVALID_COLUM_WIDTH;
        }

        public void selectFirstColumn() {
        }

        public int getNumberOfColumns() {
            return 0;
        }

        public int getColumnIndex() {
            return 0;
        }

        public void selectNextColumn() {
        }

        public boolean getFirstSpanningCol() {
            return false;
        }
    }

}

Si quelqu'un peut me dire pourquoi cela ne fonctionne pas, ou plutot comment faire pour avoir un tableau avec des bordures (et pas que les bordures externes, les cellules aussi doivent avoir des bordures).

Si des précisions sont nécessaires sur le code que je viens de fournir, n'hésitez pas ...

merci

bonne journée

fredericmazue

Sincèrement je ne vois pas. Je comprends les choses comme toi.
Et générer un document à partir d'un modèle xml tu as essayé ?

testeurforme

d'un certain coté ca me rassure quand meme un peu... je me dis que je suis pas trop nono lol ... en même temps j'en viens à me demander si j'aurai pas preféré passer pour un attardé mais avoir la solution ...

Pour ce qui est du xml ... ba je ne connais pas ... mais je vais sans doute en avoir besoin, c'est pt etre l'occasion que je m'y mette...

merci de t'etre penché sur la question
Je te tiens au courant de mes découvertes

bonne journée

fredericmazue

Quote:
Pour ce qui est du xml ... ba je ne connais pas ... mais je vais sans doute en avoir besoin, c'est pt etre l'occasion que je m'y mette...

Tu as des exemples dans les sources de jfor
testeurforme

ok , je vais regarder ca...
merci