使用 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);
我尝试通过 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);