Java Docx4j从一个.docx导出样式并在另一个.docx中使用

Java Docx4j从一个.docx导出样式并在另一个.docx中使用,java,ms-word,docx,docx4j,Java,Ms Word,Docx,Docx4j,我正在创建新的Word文档,代码如下: Tidy tidy = new Tidy(); tidy.setShowWarnings(true); tidy.setInputEncoding("UTF-8"); tidy.setOutputEncoding("UTF-8"); tidy.setXHTML(true); tidy.setMakeClean(true);

我正在创建新的Word文档,代码如下:

Tidy tidy = new Tidy();
            tidy.setShowWarnings(true);
            tidy.setInputEncoding("UTF-8");
            tidy.setOutputEncoding("UTF-8");
            tidy.setXHTML(true);
            tidy.setMakeClean(true);
            tidy.setQuoteNbsp(false);

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
            XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);

for (Value v : res.getRules()) {
                System.out.println(v.toString());
                ByteArrayOutputStream ou = new ByteArrayOutputStream();
                tidy.parse(new ByteArrayInputStream(v.toString().getBytes(StandardCharsets.UTF_8)), ou);
                wordMLPackage.getMainDocumentPart().getContent().clear();
                wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert(new String(ou.toByteArray()), null));
            }
            wordMLPackage.save(new java.io.File(System.getProperty("user.dir") + "/report.docx"));

我想做的是使用other.docx的样式,并将其附加到我保存的输出的特定部分。有什么想法吗?我花了很多时间寻找解决方案,但没有发现任何有用的东西。

通常,您会将XHTML直接导入目标docx(而不是像您在问题中所做的那样创建新的docx)。这样,导入的内容就可以使用目标样式(如果您需要的话)

但是,如果您想将样式从一个docx复制到另一个docx,那么这可能很简单或更复杂(但与XHTML导入无关)

首先,您需要引用每个docx中的样式:

Styles styles = wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart().getJaxbElement();
样式通常基于另一种样式。如果要导入的样式基于目标docx中具有相同定义的样式,则只需复制源样式即可

如果basedOn样式在目标docx中不存在或定义不同,则需要通过复制/重命名来处理这种情况。依此类推


此外,样式可以使用编号定义,因此您可能还需要导入这些定义(从NumberingDefinitionsPart)。

第一个文档。我们想从中导入样式

WordprocessingMLPackage wordMLPackage2 = WordprocessingMLPackage
.load(new java.io.File(System.getProperty("user.dir") + "/template.docx"));
第二份文件

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart tempDocPart = wordMLPackage2.getMainDocumentPart();
StyleDefinitionsPart sdp = tempDocPart.getStyleDefinitionsPart();
Styles tempStyle = sdp.getJaxbElement();
wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart().setJaxbElement(tempStyle);
我们从第一个文档导入样式并将它们附加到第二个文档中

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart tempDocPart = wordMLPackage2.getMainDocumentPart();
StyleDefinitionsPart sdp = tempDocPart.getStyleDefinitionsPart();
Styles tempStyle = sdp.getJaxbElement();
wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart().setJaxbElement(tempStyle);
我们可以使用它的id来使用特定的样式

wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Heading1", "Example");

您想使用其他docx中的样式来设置什么样式?你的一些XHTML?如果有的话,请将XHTML代码片段添加到您的问题中。我还想设置.docx的样式。在first.docx中,我定义了样式。我必须使用样式从第一个.docx生成另一个.docx,该样式仅适用于我放入第二个.docx中的文本的特定部分。此部分由我保存。我不知道在哪里添加我定义的样式,也找不到任何关于它的文档。非常感谢。wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart().getJaxbElement().getStyle().add(样式)