使用 docx4j 加粗段落中的特定单词

Using docx4j to bold specify word in a paragrah

我尝试通过 Java 将这样的简单文本生成到 docx 文档中

This is **bold** test

我在网上搜索这部分代码将是最接近的,但是它加粗了整行,而不是特定的单词

ObjectFactory factory = Context.getWmlObjectFactory();
P p = factory.createP();
R r = factory.createR();
Text text = factory.createText();
RPr rpr = factory.createRPr();
text.setValue("This is bold test");
BooleanDefaultTrue boldTrue = new BooleanDefaultTrue();
boldTrue.setVal(Boolean.TRUE);
rpr.setB(boldTrue);
r.getContent().add(text);
p.getContent().add(r);
r.setRPr(this.rpr);
mainDocumentPart.getContent().add(p);

这会将所有段落加粗,但我只想将 "bold" 字词加粗,并保持不加粗。

我该如何解决这个问题?

您可以使用 docx4j webapp or Word Helper AddIn 从合适的示例 Word docx 生成您需要的代码。

在这种情况下:

    // Create object for p
    P p = wmlObjectFactory.createP(); 
        // Create object for r
        R r = wmlObjectFactory.createR(); 
        p.getContent().add( r); 
            // Create object for t (wrapped in JAXBElement) 
            Text text = wmlObjectFactory.createText(); 
            JAXBElement<org.docx4j.wml.Text> textWrapped = wmlObjectFactory.createRT(text); 
            r.getContent().add( textWrapped); 
                text.setValue( "This is "); 
                text.setSpace( "preserve"); 
        // Create object for r
        R r2 = wmlObjectFactory.createR(); 
        p.getContent().add( r2); 
            // Create object for rPr
            RPr rpr = wmlObjectFactory.createRPr(); 
            r2.setRPr(rpr); 
                // Create object for b
                BooleanDefaultTrue booleandefaulttrue = wmlObjectFactory.createBooleanDefaultTrue(); 
                rpr.setB(booleandefaulttrue); 
                // Create object for bCs
                BooleanDefaultTrue booleandefaulttrue2 = wmlObjectFactory.createBooleanDefaultTrue(); 
                rpr.setBCs(booleandefaulttrue2); 
            // Create object for t (wrapped in JAXBElement) 
            Text text2 = wmlObjectFactory.createText(); 
            JAXBElement<org.docx4j.wml.Text> textWrapped2 = wmlObjectFactory.createRT(text2); 
            r2.getContent().add( textWrapped2); 
                text2.setValue( "bold"); 
        // Create object for r
        R r3 = wmlObjectFactory.createR(); 
        p.getContent().add( r3); 
            // Create object for t (wrapped in JAXBElement) 
            Text text3 = wmlObjectFactory.createText(); 
            JAXBElement<org.docx4j.wml.Text> textWrapped3 = wmlObjectFactory.createRT(text3); 
            r3.getContent().add( textWrapped3); 
                text3.setValue( " test"); 
                text3.setSpace( "preserve"); 

然后你的 mainDocumentPart.getContent().add(p);