什么是XPS文件以及如何使用它们

我有一个简单的C#.net Web应用程序。 我正在使用XPS文件。 我使用了以下代码

private void button1_Click(object sender, EventArgs e) { try { string xpsFile = "D:\\Completed-Form.xps"; xpsToBmp(xpsFile); MessageBox.Show("Done"); } catch (Exception ex) { MessageBox.Show (ex.Message); } } static public void xpsToBmp(string xpsFile) { XpsDocument xps = new XpsDocument(xpsFile, System.IO.FileAccess.Read); FixedDocumentSequence sequence = xps.GetFixedDocumentSequence(); for (int pageCount = 0; pageCount < sequence.DocumentPaginator.PageCount; ++pageCount) { DocumentPage page = sequence.DocumentPaginator.GetPage(pageCount); RenderTargetBitmap toBitmap = new RenderTargetBitmap((int)page.Size.Width,(int)page.Size.Height,96,96,System.Windows.Media.PixelFormats.Default); toBitmap.Render(page.Visual); BitmapEncoder bmpEncoder = new BmpBitmapEncoder(); bmpEncoder.Frames.Add(BitmapFrame.Create(toBitmap)); FileStream fStream = new FileStream("D:\\xpstobmp" + pageCount + ".bmp", FileMode.Create, FileAccess.Write); bmpEncoder.Save(fStream); fStream.Close(); } } 

当我调试代码时,出现一个显示为XamlParserException的错误

‘在类型’System.Windows.Documents.DocumentReference’上调用与指定绑定约束匹配的构造函数会引发exception。 行号“2”和行位置“20”。

在以下代码行中:

 FixedDocumentSequence sequence = xps.GetFixedDocumentSequence(); 

我从http://msdn.microsoft.com/en-us/library/windows/hardware/gg463422.aspx下载了一个示例XPS文件(我从那里获得了160MB的zip文件。当我解压缩它时,有一些文件夹和扩展名为.xps的文件。我不知道如何使用这些文件)并在上面的代码中使用。 我对这个文件概念很新。 我不知道如何解决此错误以及如何使用.xps文件。 我对位图文件知之甚少。

即使我在运行Windows应用程序时遇到同样的问题。

解决方案是:

调用线程必须处于STA模式。 默认情况下,Visual Studio创建的大多数项目都设置为MTA。

你可以做的是在STA线程中运行你的代码。

我试过: Visual Studio 2010,Windows XP Srv Pack 3 64位和.Net Framework 4.0

祝好运…

如果它解决了您的问题,请接受此作为答案

您的代码正常运行,我刚刚在我的环境中进行了测试(VS 2010,Windows 7 64位)。

作为输入文件,我使用了内置Microsoft XPS Document Writer打印的Google页面。

所以问题在于您正在测试的XPS文档。