2013-04-16 10 views
5

Według tutoriali, które widziałem. Nauczyłem się dodawać tekst podczas generowania pliku docx. ale za każdym razem dodaję linię tekstu. Zauważyłem, że zawsze istnieje spacja między pierwszym wierszem tekstu a drugim wierszem tekstu. podobnie jak dwukrotne naciśnięcie klawisza Enter. Wiem, że główną przyczyną jest to, że za każdym razem, gdy dodaję linię tekstu, używam akapitu. a akapit zaczyna się spacją po innym akapicie.Jak zastosować nową linię w generowaniu plików docx za pomocą DOCX4J

ten sposób mogę dodać tekst

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); 

więc ten kod powodzeniem działa i wytwarza odpowiednią wydajność. ale kiedy dodaję kolejny akapit. lub tekst. chcę, żeby znajdowała się tuż pod pierwszym wierszem tekstu. czy jest jakiś sposób, aby dodać prostą linię tekstu bez użycia akapitu? z góry dzięki

EDIT: Próbowałem zostały również dodanie prostego org.docx4j.wml.Text jak ten

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

program będzie działał, ale gdy otwieram plik wygenerowany docx, to po prostu szybka komunikat informujący o problemie z zawartością.

+1

Jeśli chcesz używać akapitów, możesz kontrolować spację przed i po. Możesz ustawić to na akapicie lub stylu akapitu, lub w docdefaults w części style. – JasonPlutext

Odpowiedz

7

Poniższy kod wygeneruje wynik jako linia po linii.

Kluczowe jest tu dodać tekst (1) -> ustęp 1 i Br -> ustęp 1 po tekście (2) -> ustęp 1

Br jest elementem jak Text i P. dzięki temu możemy przejść do nowej linii.

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")); 

WYJŚCIE:

tset

tset2

+0

dziękuję źle przetestować to od razu – Weddy

+0

wskazówka: 'org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory();', gdy istnieje kilka różnych 'ObjectFacotry' w pakiecie' org.docx4j' – Math

3

Można użyć ObjectFactory.createBr() aby utworzyć nową linię końcową.

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

dziękuję. źle to przetestować – Weddy

Powiązane problemy