6

我正在将 WPF FlowDocument 保存到文件系统,使用此代码和带有 xps 扩展名的文件名:

// Save FlowDocument to file system as XPS document
using (var fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
    var textRange = new TextRange(m_Text.ContentStart, m_Text.ContentEnd);
    textRange.Save(fs, DataFormats.XamlPackage);
}

我的应用程序可以使用以下代码重新加载文档:

// Load file
using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
    m_Text = new FlowDocument();
    var textRange = new TextRange(m_Text.ContentStart, m_Text.ContentEnd);
    textRange.Load(fs, DataFormats.XamlPackage);
}

但是,Windows 7 附带的 XPS 查看器无法打开这些文件。保存的 XPS 文件显示 XPS 图标,但是当我双击一个时,XPS 查看器无法打开它。错误消息显示“XPS 查看器无法打开此文档”。

知道我需要对我的 XPS 文档执行哪些操作以使其可由 XPS 查看器打开吗?谢谢你的帮助。

4

1 回答 1

8

正如 Michael 评论的那样,FlowDocument 与 XPS 文档不同。FlowDocuments 用于屏幕阅读,当窗口大小改变时会自动重排,而 XPS 文档的布局是固定的。

编写 XPS 文档所需的类称为 XpsDocument。您需要引用 ReachFramework.dll 程序集才能使用它。下面是一个将 FlowDocument 保存到 XPS 文档的方法的简短示例:

using System.IO;
using System.IO.Packaging;
using System.Windows.Documents;
using System.Windows.Xps.Packaging;
using System.Windows.Xps.Serialization;

namespace XpsConversion
{
    public static class FlowToXps
    {
        public static void SaveAsXps(string path, FlowDocument document)
        {
            using (Package package = Package.Open(path, FileMode.Create))
            {
                using (var xpsDoc = new XpsDocument(
                    package, System.IO.Packaging.CompressionOption.Maximum))
                {
                    var xpsSm = new XpsSerializationManager(
                        new XpsPackagingPolicy(xpsDoc), false);
                    DocumentPaginator dp = 
                        ((IDocumentPaginatorSource)document).DocumentPaginator;
                    xpsSm.SaveAsXaml(dp);
                }
            }
        }
    }
}

Feng Yuan 在他的博客上有一个更大的例子(包括如何添加页眉和页脚以及重新调整输出)。

于 2010-06-24T13:20:12.597 回答