【问题标题】:What is XPS files and how it is being used什么是 XPS 文件以及如何使用它
【发布时间】:2013-03-23 09:59:03
【问题描述】:

我有一个简单的 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'的构造函数引发异常。'行号“2”和行位置“20”。

在以下代码行中:

FixedDocumentSequence sequence = xps.GetFixedDocumentSequence();

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

【问题讨论】:

  • 如果您正在编写一个处理文件格式的应用程序,您可能应该知道从里到外的格式。
  • 这是为了自学我正在寻找xps和位图
  • 当我运行上面的代码时,出现了一个错误,显示为 XamlParserException 发生('对与指定绑定约束匹配的'System.Windows.Documents.DocumentReference'类型的构造函数的调用引发了异常。'行编号'2'和行位置'20'。)在代码行中 FixedDocumentSequence sequence = xps.GetFixedDocumentSequence();

标签: c# .net web-applications bmp xps


【解决方案1】:

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

解决办法是:

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

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

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

祝你好运……

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

【讨论】:

  • 这是一条愚蠢的错误信息,但请提供解决方案!
【解决方案2】:

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

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

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

【讨论】:

  • 很可能你是对的。我对 xps 文件概念非常陌生。我已经从msdn.microsoft.com/en-us/library/windows/hardware/gg463422.aspx 下载了示例 XPS 文件(我从那里获得了 160MB 的 zip 文件。当我解压缩它时,有许多文件夹和文件扩展名为 .xps。)我不知道如何使用这些文件。
猜你喜欢
  • 2011-10-21
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2015-03-13
  • 2013-10-25
  • 2014-11-19
  • 1970-01-01
相关资源
最近更新 更多