2013-04-16 10 views
5

Con le esercitazioni che ho visto. Ho imparato come aggiungere del testo sulla generazione di un file docx. ma poi ogni volta aggiungo una riga di testo. Ho notato che c'è sempre uno spazio tra la prima riga di testo e la seconda riga di testo. proprio come premere il tasto Invio due volte. So che la causa principale è che ogni volta che aggiungo una riga di testo, utilizzo un paragrafo. e un paragrafo inizia con uno spazio dopo un altro paragrafo.Come applicare una nuova riga nella generazione di file docx usando DOCX4J

Questo è come aggiungo un testo

ObjectFactory factory; 
factory = Context.getWmlObjectFactory(); 
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 
P spc = factory.createP(); 
R rspc = factory.createR(); 
rspc.getContent().add(wordMLPackage.getMainDocumentPart().createParagraphOfText("sample")); 
spc.getContent().add(rspc); 

java.io.InputStream is = new java.io.FileInputStream(file); 
wordMLPackage.getMainDocumentPart().addObject(spc); 

quindi questo codice viene eseguito con successo e produce l'uscita giusta. ma quando aggiungo un altro paragrafo. o testo. voglio che sia appena sotto la prima riga di testo. c'è un modo per aggiungere una semplice riga di testo senza usare un paragrafo? grazie in anticipo

EDIT: Ho anche provato ad aggiungere un semplice org.docx4j.wml.Text come questo

Text newtext = factory.createText(); 
newtext.setValue("sample new text"); 
wordMLPackage.getMainDocumentPart().addObject(newtext); 

il programma verrà eseguito, ma quando ho aperto il file docx generato, sarà solo pronta un messaggio che dice che ci sono problemi con i contenuti.

+1

Se si desidera utilizzare i paragrafi, è possibile controllare lo spazio prima e dopo. Puoi impostarlo sul paragrafo o su uno stile di paragrafo o in docdefaults nella parte stili. – JasonPlutext

risposta

7

Il codice sottostante verrà generato come riga per riga.

Key è qui aggiungere testo (1) -> paragrafo 1 e Br -> paragrafo 1 dopo il testo (2) -> paragrafo 1

Br è elemento come Text e P. usando questo possiamo andare per una nuova linea.

ObjectFactory factory = Context.getWmlObjectFactory(); 
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage 
     .createPackage(); 

P spc = factory.createP(); 
R rspc = factory.createR(); 

Text t1 = factory.createText(); 
t1.setValue("tset"); 
rspc.getContent().add(t1); 
Br br = factory.createBr(); // this Br element is used break the current and go for next line 
rspc.getContent().add(br); 
Text t2 = factory.createText(); 
t2.setValue("\r\n tset2"); 
rspc.getContent().add(t2); 

spc.getContent().add(rspc); 

wordMLPackage.getMainDocumentPart().addObject(spc); 

wordMLPackage.save(new java.io.File("helloworld.docx")); 

USCITA:

tset

tset2

+0

grazie prova male subito – Weddy

+0

suggerimento: 'org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory();', una volta che ci sono diversi 'ObjectFacotry' nel pacchetto' org.docx4j' – Math

3

È possibile utilizzare ObjectFactory.createBr() per creare una nuova linea di fine.

ObjectFactory factory = Context.getWmlObjectFactory(); 

    R run = factory.createR(); 

    Text text1 = factory.createText(); 
    text1.setValue("asd"); 
    run.getContent().add(text1); 

    Br nl = factory.createBr(); 
    run.getContent().add(nl); 

    Text text2 = factory.createText(); 
    text2.setValue("efg"); 
    run.getContent().add(text2); 

    P para = factory.createP(); 
    para.getParagraphContent().add(run); 

    WordprocessingMLPackage wordMLPackage = 
      WordprocessingMLPackage.createPackage(); 
    wordMLPackage.getMainDocumentPart().addObject(para); 

    wordMLPackage.getMainDocumentPart().addParagraphOfText("p1"); 
    wordMLPackage.getMainDocumentPart().addParagraphOfText("p2"); 

    wordMLPackage.save(new File("test.docx")); 
+0

grazie. mal provarlo subito – Weddy