将Xaml文档转成XPS文档

来源:互联网 发布:淘宝会员名与昵称 编辑:程序博客网 时间:2024/05/27 02:28

// ConverterWindow.xaml

<Window x:Class="Xaml2XPS.ConverterWindow"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    Title="Window1" Height="300" Width="300">    <Grid>        <Button Height="23" HorizontalAlignment="Right" Margin="0,9,12,0" Name="btnConvert" VerticalAlignment="Top" Width="75" Click="btnConvert_Click">ToXPS</Button>    </Grid></Window>

// ConverterWindow.xaml.cs

using System;using System.Collections.Generic;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Shapes;using System.IO;using System.Windows.Markup;using System.Windows.Xps.Packaging;using System.Windows.Xps.Serialization;namespace Xaml2XPS{    /// <summary>    /// Interaction logic for Window1.xaml    /// </summary>    public partial class ConverterWindow : Window    {        FileStream srcXamlStream = new FileStream(@"E:/WPF_Books/Chapter 10/Xaml2XPS/Files/CommonLogo.xaml", FileMode.Open);        string destXpsFile = @"E:/WPF_Books/Chapter 10/Xaml2XPS/Files/Demo.Xps";        public ConverterWindow()        {            InitializeComponent();               }        private void btnConvert_Click(object sender, RoutedEventArgs e)        {            ParserContext context = new ParserContext();            context.BaseUri = new Uri(Directory.GetCurrentDirectory() + "//");            XamlStreamToXps(srcXamlStream, context, destXpsFile);        }        public void XamlStreamToXps(Stream srcXamlStream, ParserContext context, string destXpsFile)        {            XpsDocument document = null;            try            {                if (System.IO.File.Exists(destXpsFile)) System.IO.File.Delete(destXpsFile);                document = new XpsDocument(destXpsFile, FileAccess.Write);                XpsPackagingPolicy packagePolicy = new XpsPackagingPolicy(document);                XpsSerializationManager serializationMgr =                    new XpsSerializationManager(packagePolicy, false);                object parsedDocObject = (null == context) ?                    XamlReader.Load(srcXamlStream) :                    XamlReader.Load(srcXamlStream, context);                serializationMgr.SaveAsXaml(parsedDocObject);                               MessageBox.Show("OK");            }            catch (Exception ex)            {                string exString = ex.Message;                MessageBox.Show(exString);            }            finally            {                if(document != null)   document.Close();                if (srcXamlStream != null) srcXamlStream.Close();            }        }      }}