2013-04-16 45 views
5

通過我所看到的教程適用於的docx文件生成新的生產線。我學會了如何在生成docx文件中添加文本。但每次我添加一行文本。我注意到第一行文本和第二行文本之間總是有空格。就像按兩次Enter鍵一樣。我知道,主要的原因是,每次我添加一行文字,我用一個段落。並且段落以另一段落之後的空格開始。如何使用DOCX4J

這是我如何添加文本

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

所以這段代碼成功運行併產生正確的輸出。但是當我添加另一段時。或文本。我希望它只是在文本的第一行。有沒有什麼辦法可以在不使用段落的情況下添加簡單的文本行?在此先感謝

編輯:我也嘗試添加一個簡單的org.docx4j.wml.Text這樣

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

程序將運行,但是當我打開生成的docx文件,它只是提示一條消息指出內容存在問題。

+1

如果您確實想要使用段落,您可以控制前後的空格。您可以在段落或段落樣式,或者在樣式部分docdefaults設置此。 – JasonPlutext

回答

7

的下面意願代碼將生成出把如線線。

關鍵是在此處添加文本(1) - > PARAGRAPH1和Br - >文本後PARAGRAPH1(2) - > PARAGRAPH1

Br是像TextP元件。通過使用這個我們可以去換新的路線。

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

OUTPUT:

不同廠家

值Tset2

+0

謝謝你生病測試忙​​啥 – Weddy

+0

提示:'org.docx4j.wml.ObjectFactory廠= Context.getWmlObjectFactory();',一旦有幾種不同的'ObjectFacotry'在'org.docx4j'包 – Math

3

您可以使用ObjectFactory.createBr()創建結尾的新行。

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

謝謝。虐待測試馬上 – Weddy