JABFreeware 谈到了我使用过的一种方法。获取 FlowDocument 内容并创建一个 rtf,然后构建一个新的 Word 文档并保存。但是,您可能不想接触 Microsoft.Office.Interop.Word 之类的库。
还有一些其他方法的例子。例如,您可能想在此处查看以下开源 FlowDocument 编辑器。它很旧,但仍然提供信息并将 FlowDocuments 转换为 docx。这导致从 Microsoft 的站点查看 OpenXml SDK(没有足够的代表获取更多链接,但 Google 会带您到那里)。
此外,您可能会发现这作为参考很有用。它是一个 Word 插件,您可以获取源代码,以便将 Word 文档转换为 FlowDocuments。它从原始请求倒退,但有可能逆转该过程。
希望有些帮助。
编辑:
如果您真的想作弊并且您将创建的文档非常基础,那么您可以。但是,我知道这仅适用于 docx。
- 首先创建一个带有一些格式的简单 Word 文档(作为 docx)。
- 提取内容并保留除 /word/document.xml 文件之外的所有内容。
- 打开 /word/document.xml 文件并将其用作 XSLT 的模板。我在这里做了一个简单的:
流文档 XML
<?xml version="1.0" encoding="utf-8"?>
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Paragraph>
<Run FontWeight="Bold" Foreground="#FF0000">Testing</Run>
</Paragraph>
<Paragraph>
<Run FontWeight="Bold" Foreground="#0000FF">Testing2</Run>
</Paragraph>
</FlowDocument>
XSLT(仅部分用于演示目的)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<xsl:template match="/x:FlowDocument">
<?mso-application progid="Word.Document"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:sect>
<w:p>
<xsl:for-each select="x:Paragraph">
<w:pPr>
<w:jc w:val="center" />
<w:spacing w:after="0" w:line="240" w:lineRule="auto"/>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Segoe UI" w:hAnsi="Segoe UI" w:cs="Segoe UI" />
<w:sz w:val="18" />
<w:b w:val="on" />
<w:i w:val="off" />
<w:color>
<xsl:attribute name="w:val"><xsl:value-of select="x:Run/@Foreground"/></xsl:attribute>
</w:color>
</w:rPr>
<w:t><xsl:value-of select="x:Run" /></w:t>
</w:r>
</xsl:for-each>
</w:p>
</w:sect>
</w:body>
</w:document>
</xsl:template>
</xsl:stylesheet>
- 使用 XmlDocument 和 XamlWriter 创建要转换的 xml。
- 将转换结果另存为新的“document.xml”并将其放在 /word 目录中,并将所有内容打包为带有 .docx 扩展名的存档。
最令人头疼的是 FlowDocuments 可能是 RGBA,但 WordML 在颜色属性中使用 RBG。
所以,有一种方法可以用一个 xslt 搞定一切,但也很头疼。恕我直言,来自 OpenXmlWriter 应用程序的代码将是一个更清洁的解决方案。或者可能是两者的结合......