WPF到XPS的轮廓和结构

时间:2015-01-28 13:24:12

标签: c# wpf flowdocument xps fixeddocument

我正在开发一个WPF报告应用程序。

我的报告构建为WPF控件(FlowDocument或FixedDocument)和 包含表格。我希望将其保存为XPS保留其结构(这意味着我可以将表复制为表,而不是像article中所解释的纯文本)。我找到了一种使用XpsDocumentWriter或XpsSerializationManager保存WPF控件的方法,但结果没有结构或轮廓。

是否可以将WPF控件保存为Xps保留其结构?

2 个答案:

答案 0 :(得分:1)

XPS是一种固定的文档格式,WPF允许您将FlowDocument作为XPS文件保存到FixedDocument,当您想要添加更多功能时需要代码,您可以按照本文进一步了解。

Convert XAML Flow Document to XPS with Style (multiple page, page size, header, margin)

答案 1 :(得分:1)

在使用XpsDocumentWriterXpsSerializationManager对其进行序列化时,似乎无法保留WPF元素语义。

构造具有结构的文档的唯一方法是使用System.Windows.Xps.Packaging命名空间中的低级API,如此article中所述。使用此API,您可以获取XmlWriter来构建FixedPage内容

XpsDocument document = new XpsDocument(destFileName,FileAccess.ReadWrite); 
IXpsFixedDocumentSequenceWriter docSeqWriter = document.AddFixedDocumentSequence(); 
IXpsFixedDocumentWriter docWriter = docSeqWriter.AddFixedDocument(); 
IXpsFixedPageWriter pageWriter = docWriter.AddFixedPage();
XmlWriter xmlWriter = pageWriter.XmlWriter;

Stream用于编写文档结构

XpsResource storyFraments = pageWriter.AddStoryFragment();
Stream stream = storyFraments.GetStream();

尽管System.Windows.Documents.DocumentStructures namesapace中有一些类代表StoryFragments元素及其子元素,但在写入资源流时不能使用它们。