16

当我阅读有关 WPF 的书籍时,我看到作者提到 XPS,就好像它很重要一样。Windows 还包括它的 XPS 查看器,我已经看到它被列为 Windows 的“功能”。

但为什么?重点是什么?谁他妈用它?据我了解,XPS 基本上类似于 PDF、xhtml 或 ePub(只是 xhtml)……甚至是 Word 的docx格式。这些格式中的许多功能都是相同的。

与任何其他格式相比,它似乎没有任何重大好处。在我看来,作为一种从 RichTextBox 保存和加载 FlowDocuments 的方法,xhtml 比 XPS 有用得多。我查看了多个关于在两者之间转换的博客。互联网上的大多数或全部富文本是 (x)html。除此之外,我认为没有人使用它来发布他们的文档。首选PDF。XPS 似乎只是 MS 制作并决定推动的一些随机格式。我通常喜欢 MS,但他们确实有这种事情的习惯。MS 不能用 xhtml 制作一个 api 吗?我认为这在很多情况下会更有用。

那么,使用 XPS 是否有意义,尤其是与我提到的其他格式之一(或任何我没有提到的格式)相比?您是否曾经在您的程序或其他程序中使用过 XPS?

4

7 回答 7

8

正如 U62 所述,WPF 带有一个 DocumentViewer 控件,使您能够查看 XPS 文档。DocumentViewer 还具有一些有用的功能,例如打印、缩放、FitToPage 等……因此您无需实现该功能或使用第三方工具。

一个小时前我刚刚使用 XPS 和 DocumentViewer 完成的是某种“地址标签打印预览”。允许用户从联系人列表中选择一些联系人,单击“打印预览”。这将打开一个新的 XAML 窗口,其中包含一个 DocumentViewer 控件和一个列表框,其中包含不同标签的选择(例如,一张带有 12 个标签 [2 列,6 行] 的表格,一张带有单个标签的表格,其宽度和高度可以由用户定义) . 根据用户选择,我在用户选择的布局中生成一个 XPS 文档,其中包含所选联系人的地址。例如,如果用户选择了 4 个联系人并希望将它们打印在“SingleLabelSheet”上,我会生成 1 个包含 4 页的 XPS 文档,每页包含 1 个地址。

一旦我了解了 XPS API 的工作原理(至少是基础知识),只需 2 小时即可启动并运行它。

因此,基本上,我将 XPS 视为一种易于使用的 API,用于显示要即时生成的 FixedDocuments。但我不会亲自将它们保存到我的硬盘驱动器或以某种方式修改它们或您通常对文档所做的任何事情。

于 2010-02-03T14:02:21.217 回答
3

看,我可能对 XPS 作为报告生成解决方案持悲观态度,但我试了一下,发现最初的文档很难理解,现实世界的样本比我想要的要少。当我将它放到一个真实的商业应用程序中时,我发现它令人沮丧,尤其是在需要跨越多个页面的表的 LOB 应用程序中。

从那以后情况可能已经发生了变化,但是当我开始查看跨越多个页面的表格并且我希望列标题位于顶部等时,我发现 API 要求我执行我称之为不必要的过度变通办法的事情复杂。

因此,从那时起(大约 8 个月前)情况可能发生了变化,但我从 XPS 转向使用 ITextSharp,而且痛苦少了很多。

因此,与其他人一样,我要说的唯一优势是 WPF 中的内置查看器 - 但除此之外,我觉得 API 可能需要“成熟”一点,然后我才能再次尝试使用它。

于 2010-02-06T09:05:26.200 回答
3

我能想到的唯一实际优势是您可以控制在 WPF 应用程序中查看 XPS 文档。您提到的其他格式意味着您必须引入 3rd 方渲染器(如果您有一年的空闲时间,或者自己编写一个)。

顺便提一句。我对 ePub 了解不多,但 XPS 不能直接与 XHTML 相提并论,它更像是 PDF,因为它被设计为具有固定的布局。

于 2010-02-03T13:23:11.010 回答
3

XPS 到 WPF 就像 WMF 到 Win32/WinForms,它是一种持久格式,可让您存储和打印原生 WPF 图形。

XPS用于从WPF打印(即使您直接从应用程序打印而不保存,内部打印系统也是建立在XPS之上的)所以MS应该怎么做:

  1. 创建一个完全符合他们想要做的事情的新文件格式
  2. 构建一个 100% 完美的从 WPF 转换为他们无法控制的格式(如 PDF)的翻译器(并希望 Adob​​e 不会在 Acrobat Reader 的下一个版本中破坏所有 WPF 应用程序)。

你会怎么做?

保存 XPS 文件只是一个不错的奖励。

于 2010-02-03T16:03:56.790 回答
2

实际上,我找到了使用 XPS 的一个很好的理由。我想从多个来源打印,合并文档并指定双面和装订。最后,它应该作为一个双面文件打印并装订。我在这样做时遇到了困难,但发现通过打印到 XPS(保存到光盘),我可以轻松完成我的目标。我还没有找到任何其他如此简单明了的方法。

    Dim PrintServer As New SysPrint.PrintServer("\\" & My.Computer.Name)
    Dim PrintQ As New SysPrint.PrintQueue(PrintServer, "Ricoh Main")
    Dim Jobs As SysPrint.PrintJobInfoCollection = PrintQ.GetPrintJobInfoCollection
    Dim able As SysPrint.PrintCapabilities = PrintQ.GetPrintCapabilities()

    Dim CurrentTicket As SysPrint.PrintTicket = PrintQ.CurrentJobSettings.CurrentPrintTicket
    If able.StaplingCapability IsNot Nothing AndAlso able.StaplingCapability.Count > 0 Then
        If able.StaplingCapability.Contains(Printing.Stapling.StapleTopLeft) Then
            CurrentTicket.Stapling = Printing.Stapling.StapleTopLeft
        End If
    Else
        Debug.Print("no stapling capability")
    End If

    CurrentTicket.Duplexing = Printing.Duplexing.TwoSidedLongEdge

    Dim fiName As String = "S:\Temp\PS\XPS\Test.xps"

    Dim TestJob As SysPrint.PrintSystemJobInfo _
            = PrintQ.AddJob("Test job", fiName, False)
于 2015-10-19T16:19:51.843 回答
1

XPS(代号为“metro”)显然被设计为 Microsoft 替代 Windows Vista 中的 PDF 和 PostScript。在此处查看这篇旧文章:Microsoft 准备新文档打印规范

于 2011-04-25T05:41:45.597 回答
0

发明文档格式时有不同的方法:

  • 有些是为了在屏幕上快速查看(比如低分辨率),如 HTML、doc。
  • 其他一些是(或可能是)非常尊重打印约束(比如基于质量),如 PDF、XPS。

所以 XPS 和 PDF 一样好,加上它是 XML 格式的,所以“也许”它比 PDF 中的流方法更标准。

XPS 的黑点可能是特殊颜色的管理(Pantone、纸张效果)。

于 2018-05-23T10:29:53.290 回答