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-файла. Код требуется, когда вы хотите добавить больше функций, вы можете следовать этой статье, чтобы идти дальше.

Преобразование потокового документа XAML в XPS с помощью стиля (несколько страниц, размер страницы, заголовок, поле)

Другие вопросы по тегам