Remplacement de variables dans un modèle de document Word par java


Je souhaite charger un modèle de document Word pour ajouter du contenu et l'enregistrer en tant que nouveau document. Je suis en train de travailler sur .fichier doc.

Après une longue recherche je n'ai trouvé que des solutions pour docx :

Http://www.smartjava.org/content/create-complex-word-docx-documents-programatically-docx4j

Http://www.sambhashanam.com/mail-merge-in-java-for-microsoft-word-document-part-i/

Je veux donc remplacer toute variable écrite dans ce format: $VAR par sa valeur. Puis-je le faire avec velocity ou Apache-poi, quelle est la meilleure solution pour cela. Toute aide sera appréciée.

Author: Drunix, 2014-03-24

2 answers

Oui, vous pouvez le faire en utilisant Apache-POI. Vos noms de variables doivent être uniques. Voir le code suivant

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class HWPFTest {
    public static void main(String[] args){
        String filePath = "F:\\Sample.doc";
        POIFSFileSystem fs = null;        
        try {            
            fs = new POIFSFileSystem(new FileInputStream(filePath));            
            HWPFDocument doc = new HWPFDocument(fs);
            doc = replaceText(doc, "$VAR", "MyValue1");
            saveWord(filePath, doc);
        }
        catch(FileNotFoundException e){
            e.printStackTrace();
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }

    private static HWPFDocument replaceText(HWPFDocument doc, String findText, String replaceText){
        Range r1 = doc.getRange(); 

        for (int i = 0; i < r1.numSections(); ++i ) { 
            Section s = r1.getSection(i); 
            for (int x = 0; x < s.numParagraphs(); x++) { 
                Paragraph p = s.getParagraph(x); 
                for (int z = 0; z < p.numCharacterRuns(); z++) { 
                    CharacterRun run = p.getCharacterRun(z); 
                    String text = run.text();
                    if(text.contains(findText)) {
                        run.replaceText(findText, replaceText);
                    } 
                }
            }
        } 
        return doc;
    }

    private static void saveWord(String filePath, HWPFDocument doc) throws FileNotFoundException, IOException{
        FileOutputStream out = null;
        try{
            out = new FileOutputStream(filePath);
            doc.write(out);
        }
        finally{
            out.close();
        }
    }
}
 23
Author: Liquidpie, 2014-03-29 22:56:05

Vikrant,

L'extrait de code est donné ci-dessus et pour fonctionner, nous avons besoin de jar mentionné ci-dessus. Avec ce pot, utilisez / téléchargez poi-3.5-FINAL.jar aussi.

J'espère que cela répondra à votre question.

 -5
Author: SandeepManda, 2016-06-22 06:12:23