gpt4 book ai didi

wpf - 使用 XPS 查看器打开保存为 XPS 文档的 FlowDocument?

转载 作者:行者123 更新时间:2023-12-01 19:34:29 28 4
gpt4 key购买 nike

我正在将 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 查看器打开吗?感谢您的帮助。

最佳答案

正如 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 has a larger example on his blog (包括如何添加页眉和页脚以及重新缩放输出)。

关于wpf - 使用 XPS 查看器打开保存为 XPS 文档的 FlowDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2794532/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com