WPF в XPS с контуром и структурой
Я разрабатываю приложение для отчетов WPF.
Мой отчет построен как элемент управления WPF (FlowDocument или FixedDocument) и содержит таблицы. Я хочу сохранить его как XPS, сохранив его структуру (это означает, что я могу скопировать таблицу как таблицу, а не простой текст, как описано в этой статье). Я нашел способ сохранить WPF Control с помощью XpsDocumentWriter или XpsSerializationManager, но результат не имеет структуры или контура.
Можно ли сохранить WPF Control как Xps, сохранив его структуру?
2 ответа
Кажется, что нет способа сохранить семантику элемента WPF при сериализации с XpsDocumentWriter
или же XpsSerializationManager
,
Единственный способ создать документ со структурой - использовать низкоуровневый API из System.Windows.Xps.Packaging
пространство имен, как описано в этой статье. Используя этот 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
пространство имен, представляющее StoryFragments
элементы и их потомки, вы не можете использовать их во время записи в поток ресурсов.
XPS - это фиксированный формат документа, а WPF позволяет сохранять FlowDocument в FixedDocument в виде XPS-файла. Код требуется, когда вы хотите добавить больше функций, вы можете следовать этой статье, чтобы идти дальше.