我正在使用以下代码创建新的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"));
我想要做的是使用来自其他.docx的样式并将其附加到我保存的输出的特定部分。有任何想法吗 ?我花了很多时间寻找解决方案,但我没有找到任何有用的东西。
答案 0 :(得分:4)
第一份文件。我们想从中导入样式。
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);
我们可以使用其ID
来使用特定的样式wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Heading1", "Example");
答案 1 :(得分:1)
通常,您可以将XHTML直接导入目标docx(而不是像在问题中那样创建新的docx)。这样,导入的内容可以使用目标样式(如果你想要的话)。
但是,如果您想将样式从一个docx复制到另一个docx,那可能很简单或更复杂(但与XHTML导入无关)。
首先,您需要参考每个docx中的样式:
Styles styles = wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart().getJaxbElement();
样式通常是" basedOn"另一种风格。如果要导入的样式基于目标docx中具有相同定义的样式,则只需复制源样式。
如果目标docx中不存在basedOn样式或以不同方式定义,则您需要通过复制/重命名来处理该情况。等等。等等。
此外,样式可以使用编号定义,因此您可能还需要导入它们(来自NumberingDefinitionsPart)。