2

我正在尝试将 .xps 文档加载到我的 WPF 应用程序中的 DocumentViewer 对象中。一切正常,除非我尝试加载资源 .xps 文档。使用绝对路径时,我能够很好地加载 .xps 文档,但是当我尝试加载资源文档时,它会抛出“DirectoryNotFoundException”

这是我加载文档的代码示例。

     using System.Windows.Xps.Packaging;

      private void Window_Loaded(object sender, RoutedEventArgs e)
        {
//Absolute Path works (below)
            //var xpsDocument = new XpsDocument(@"C:\Users\..\Visual Studio 2008\Projects\MyProject\MyProject\Docs\MyDocument.xps", FileAccess.Read); 
//Resource Path doesn't work (below)
var xpsDocument = new XpsDocument(@"\MyProject;component/Docs/Mydocument.xps", FileAccess.Read);
            DocumentViewer.Document = xpsDocument.GetFixedDocumentSequence();
        }

当抛出 DirectoryNotFoundException 时,它显示“找不到路径的一部分:'C:\MyProject;component\Docs\MyDocument.xps'

它似乎试图从该路径中获取 .xps 文档,就好像它是计算机上的实际路径一样,而不是试图从存储为应用程序内资源的 .xps 中获取。

4

2 回答 2

1

XpsDocument ctor接受文件路径或Package实例。以下是打开包以使用后一种方法的方法:

var uri = new Uri("pack://application:,,,/Docs/Mydocument.xps");
var stream = Application.GetResourceStream(uri).Stream;
Package package = Package.Open(stream);
PackageStore.AddPackage(uri, package);
var xpsDoc = new XpsDocument(package, CompressionOption.Maximum, uri.AbsoluteUri);
var fixedDocumentSequence = xpsDoc.GetFixedDocumentSequence();
_vw.Document = fixedDocumentSequence; // displaying document in viewer
xpsDoc.Close();
于 2010-06-06T02:34:17.793 回答
0

我无法使用包加载 XPS 文档,无论如何,将文档包装在包中以便能够加载它似乎是一种不必要的解决方法。

如果将 XPS 文档的构建操作设置为 不是硬性要求Resource,则可以通过将文档的构建操作设置为Content(并设置“复制到输出目录”)来实现更简单的解决方案。

var docPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!, "Docs/MyDocument.xps");
using var document = new XpsDocument(termsPath, FileAccess.Read);
_vw.Document = document.GetFixedDocumentSequence();
document.Close()
于 2021-08-25T15:02:39.393 回答