C# 是否有开源XSLT将WPF FlowDocument转换为WordML?
我想使用WPF RichTextBox,它允许用户编辑和格式化文本。这种格式化的文本最终将与其他一些自定义XML数据一起工作到Word文档中 我发现了几个从WordML到FlowDocument的示例,但没有任何示例将RichTextBox FlowDocument转换为WordML 有没有开源XSLT文件可以用来将WPF FlowDocument转换为WordML,而不是重新发明轮子 我不是在寻找100%的解决方案(例如表格、图表、图纸等)。现在,我只对保留字体格式、段落、项目符号列表等感兴趣 编辑:C# 是否有开源XSLT将WPF FlowDocument转换为WordML?,c#,wpf,xslt,openxml,wordml,C#,Wpf,Xslt,Openxml,Wordml,我想使用WPF RichTextBox,它允许用户编辑和格式化文本。这种格式化的文本最终将与其他一些自定义XML数据一起工作到Word文档中 我发现了几个从WordML到FlowDocument的示例,但没有任何示例将RichTextBox FlowDocument转换为WordML 有没有开源XSLT文件可以用来将WPF FlowDocument转换为WordML,而不是重新发明轮子 我不是在寻找100%的解决方案(例如表格、图表、图纸等)。现在,我只对保留字体格式、段落、项目符号列表等感兴趣
如果可能,我需要避免使用Word Interop或昂贵的第三方工具(如Apose)。我正在寻找一种优雅的方法将一些基本的FlowDocument XML格式的内容转换为OpenXML,最好是通过XSLT。由于我对嵌入图片之类的项目不感兴趣,我认为这可能是可行的,因为我发现了一些相反方向的示例(即OpenXML/WordML到XAML Flowdocument)我在搜索中找到了一些解决方案。最简单的方法可能是转换为支持所有必要XSLT内容的.rtf格式。这解释得很好 我在网上找到的另一个解决方案是,有人转到PDF,但首先转换为.DOCX。你可以找到他的解决办法。如果您只需要转换为.DOCX的部分,那么您需要编辑他的代码,这样.DOCX就不会被.PDF替换 根据项目工作方式的细节,您可能会觉得有趣 我希望这对你有帮助。目前,没有直接的方法可以通过单个API实现这一点。您需要转换为一些格式,如.XPS、.RTF等,然后从它们使用另一个API转换为WordMl
快乐编码 免费软件触及了我使用过的一种方法;获取FlowDocument内容并创建rtf,然后构建一个新的Word文档并保存。但是,您可能不想接触像Microsoft.Office.Interop.Word这样的库 还有一些其他方法的例子。例如,您可能希望查看以下开源FlowDocument编辑器。它很旧,但仍然提供信息,并将FlowDocuments转换为docx。这就需要从微软的网站上查看OpenXMLSDK(没有足够的代表提供更多的链接,但谷歌会帮你做到这一点) 此外,您可能会发现作为参考很有用。它是一个Word附加组件,您可以从中获取源代码,从而将Word文档转换为FlowDocuments。这与最初的请求相反,但有可能逆转该过程 希望这能有所帮助 编辑: 如果你真的想作弊,并且你将要创建的文档非常基本,你可以。但是,我知道这只适用于docx
<?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>
测试
测试2
XSLT(仅部分用于演示目的)
因此,有一种方法可以用一个xslt获取所有内容,但这也是令人头痛的。依我看,来自OpenXmlWriter应用程序的代码将是一个更干净的解决方案。或者可能是两者的结合…一位同事发现了这一点,尽管这是一种更为野蛮的力量。我希望有一些更优雅的东西:我在最初的问题中没有明确说明,但我试图避免使用Interop这个词。我引用了OpenXml.biz链接作为对原始问题的评论。不幸的是,这种方法比我所期望的更为残忍。我已经找到了很多Word到XAML的例子,但没有找到XAML到Word的例子。。。这就是问题所在。你引用的文章最后一行说得很好。。。“今天,据我所知,如果不编写自己的XSL转换,就无法提取基于开放式XML标记的XHTML或WPF标记片段。强迫客户为基于6000页规范的XML格式编写自己的XSL转换是残酷和不同寻常的公司惩罚。”这就是我寻找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>