我正在开发一个WPF报告应用程序。
我的报告构建为WPF控件(FlowDocument或FixedDocument)和
包含表格。我希望将其保存为XPS保留其结构(这意味着我可以将表复制为表,而不是像article中所解释的纯文本)。我找到了一种使用XpsDocumentWriter或XpsSerializationManager保存WPF控件的方法,但结果没有结构或轮廓。
是否可以将WPF控件保存为Xps保留其结构?
答案 0 :(得分:1)
XPS是一种固定的文档格式,WPF允许您将FlowDocument作为XPS文件保存到FixedDocument,当您想要添加更多功能时需要代码,您可以按照本文进一步了解。
Convert XAML Flow Document to XPS with Style (multiple page, page size, header, margin)
答案 1 :(得分:1)
在使用XpsDocumentWriter
或XpsSerializationManager
对其进行序列化时,似乎无法保留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
元素及其子元素,但在写入资源流时不能使用它们。