1.docx4j的依赖

首先确保已经添加了docx4j的依赖。在pom.xml中添加:

<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-core</artifactId>
<version>8.2.3</version>
</dependency>

2.创建段落

创建一个WordprocessingMLPackage实例,然后创建段落(P)和文本运行(R),并将文本(Text)添加到运行中。

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.wml.*;

public class CreateParagraphExample {
    public static void main(String[] args) throws Exception {
        // 创建Word文档包
        WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
        
        // 创建对象工厂
        ObjectFactory factory = new ObjectFactory();
        
        // 创建段落
        P paragraph = factory.createP();
        
        // 创建文本运行
        R run = factory.createR();
        
        // 创建文本
        Text text = factory.createText();
        text.setValue("这是一个简单的段落。");
        
        // 将文本添加到运行
        run.getContent().add(text);
        
        // 将运行添加到段落
        paragraph.getContent().add(run);
        
        // 将段落添加到文档的主体
        wordPackage.getMainDocumentPart().addObject(paragraph);
        
        // 保存文档
        wordPackage.save(new java.io.File("simple_paragraph.docx"));
    }
}

3.文字加粗

在docx4j中,要设置文字加粗,我们可以使用以下步骤:

  1. 创建一个运行(Run)对象,用于包含文本。

  2. 设置运行的粗体属性。

  3. 将文本添加到运行中。

// 创建加粗文本运行
private static R createBoldRun(ObjectFactory factory, String textContent) {
    R run = factory.createR();
    Text text = factory.createText();
    text.setValue(textContent);

    RPr rpr = factory.createRPr();
    rpr.setB(factory.createBooleanDefaultTrue()); // 加粗
    run.setRPr(rpr);
    run.getContent().add(text);
    return run;
}

4.换行

下面分别介绍如何实现这两种换行。

1. 段落换行:在docx4j 中,每个段落都是独立的,当我们添加多个段落时,它们会自动换行。

2.段内换行:在 docx4j 中,实现段内换行(在同一段落内的换行),主要通过添加 <w:br> 元素来实现。

以下是详细的实现方法和示例:

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.wml.*;

public class WordLineBreakExample {

    public static void main(String[] args) throws Exception {
        // 创建Word包
        WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
        ObjectFactory factory = new ObjectFactory();

        // 示例1:段落换行(两个段落)
        P p1 = factory.createP();
        R r1 = factory.createR();
        Text t1 = factory.createText();
        t1.setValue("这是第一段");
        r1.getContent().add(t1);
        p1.getContent().add(r1);

        P p2 = factory.createP();
        R r2 = factory.createR();
        Text t2 = factory.createText();
        t2.setValue("这是第二段");
        r2.getContent().add(t2);
        p2.getContent().add(r2);

        wordPackage.getMainDocumentPart().addObject(p1);
        wordPackage.getMainDocumentPart().addObject(p2);

        // 示例2:段内换行(一个段落,两个换行)
        P p3 = factory.createP();

        R r3 = factory.createR();
        Text t3 = factory.createText();
        t3.setValue("这是第一行");
        r3.getContent().add(t3);
        r3.getContent().add(factory.createBr());
        p3.getContent().add(r3);

        // 添加换行

        R r4 = factory.createR();
        Text t4 = factory.createText();
        t4.setValue("这是第二行");
        r4.getContent().add(t4);
        r4.getContent().add(factory.createBr());
        p3.getContent().add(r4);

        // 再添加一个换行
        Br br2 = factory.createBr();
        p3.getContent().add(br2);

        R r5 = factory.createR();
        Text t5 = factory.createText();
        t5.setValue("这是第三行");
        r5.getContent().add(t5);
        p3.getContent().add(r5);

        wordPackage.getMainDocumentPart().addObject(p3);

        // 保存文档
        wordPackage.save(new java.io.File("LineBreakExample.docx"));
    }
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐