【问题标题】:How to apply new line in docx file generation using DOCX4J如何使用 DOCX4J 在 docx 文件生成中应用新行
【发布时间】:2013-04-08 10:14:57
【问题描述】:

根据我看过的教程。我学会了如何在生成 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 文件时,它只会提示一条消息,说内容有问题。

【问题讨论】:

  • 如果你确实想使用段落,你可以控制前后的空间。您可以在段落或段落样式或样式部分的 docdefaults 中设置此设置。

标签: java file newline documentation-generation docx4j


【解决方案1】:

以下代码将逐行生成输出。

这里的关键是在 Text(2) ->paragraph1 之后添加 Text(1) ->paragraph1 和 Br ->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"));

输出:

tset

tset2

【讨论】:

  • 提示:org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory();,一旦org.docx4j 包中有几个不同的ObjectFacotry
  • 你好,我刚刚测试了你的代码,t2.setValue("\r\n tset2"); 不会返回换行符。
【解决方案2】:

您可以使用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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多