Wpf 是否使用XPS查看器打开另存为XPS文档的FlowDocument?
我正在使用以下代码和扩展名为xps的文件名将WPF FlowDocument保存到文件系统:Wpf 是否使用XPS查看器打开另存为XPS文档的FlowDocument?,wpf,xps,flowdocument,Wpf,Xps,Flowdocument,我正在使用以下代码和扩展名为xps的文件名将WPF FlowDocument保存到文件系统: // 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.
// 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);
}
}
}
}
}
(包括如何添加页眉和页脚以及重新缩放输出)。XPS文档与XAML包不同。