【发布时间】:2019-03-10 06:34:30
【问题描述】:
我正在使用下面的代码使用docx4j 生成带有 HTML 内容的 word 文档,并且能够成功生成文档。
我的要求是编写带有一些自定义属性的内容,这样用户修改后可以很容易地阅读相同的文档。
String finalData = "<h1> Heading One </h1>".aapend("<h2> Heading two </h2>");
String str1 = new StringBuffer()
.append("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;
charset=UTF-8\" /><style type='text/css'>
* { font-family: 'Arial Unicode MS'; } </style></head>")
.append(finalData).append("</html>").toString();
str1 = fixWhitespaceIssue(str1);
str1 = cleanHTML(str1);
System.out.println(str1);
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
XHTMLImporter.setRunFormatting(FormattingOption.CLASS_PLUS_OTHER);
NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();
wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert(str1, null));
File exportFile = new File("test.docx");
wordMLPackage.save(exportFile);
例如:
<h1> Heading One </h1> // i'll bind custom property for first element as c_property1
<h2> Heading two </h2> // i'll use custom property for second element as c_property2
生成的文档可以由某些用户查看,之后他会进行一些更改,之后相同的更新文档将出现在我的代码中,因此代码必须能够使用自定义属性读取文档。
如果我想从文档中提取更新的值,所以我只想提供自定义属性,那么它应该返回其关联值。
对于c_property1,代码应返回Heading One 或更新值,例如Updated Heading One.
对于c_property2,代码应返回Heading two 或更新值,例如Updated Heading two.
【问题讨论】:
-
我建议您研究
Content controls的概念。这些可以链接到Custom XML Part,以便将控件的内容保存到XML 文件(自定义XML 部分)。然后您的代码可以读取 XML 文件。 -
@CindyMeister 感谢您的评论,您能分享一些示例或任何参考链接吗?
-
澄清一下,您可以将内容控件绑定到标准属性部分之一,因此不需要额外的自定义 xml 部分。我会看看我是否能在第二天左右找到一个例子。
-
@JasonPlutext 谢谢哥们,等待您的回复,提供一些示例参考。