根据我看过的教程。我学习了如何在生成 docx 文件时添加文本。但后来每次我添加一行文字。我注意到第一行文本和第二行文本之间总是有一个空格。就像按回车键两次一样。我知道主要原因是每次添加一行文本时,我都会使用一个段落。一个段落在另一个段落之后以空格开头。
这是我添加文本的方式
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文件时,它只会提示一条消息说内容有问题。
最佳答案
下面的代码将逐行生成输出。
关键是在 Text(2) ->paragraph1 之后添加 Text(1) ->paragraph1 和 Br ->paragraph1
Br
是类似于Text
和P
的元素。通过使用它我们可以换行。
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"));
输出:
集
tset2
关于java - 如何使用 DOCX4J 在 docx 文件生成中应用新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16029743/