Какой смысл XPS? - PullRequest
       9

Какой смысл XPS?

16 голосов
/ 03 февраля 2010

Когда я читал книги о WPF, я видел, что авторы упоминают XPS, как будто это что-то важное. Windows также включает в себя средство просмотра XPS, и я видел это в списке «функций» Windows.

Но почему? В чем смысл? Кто, черт возьми, использует это? Насколько я понимаю, XPS, в основном, похож на PDF, xhtml или ePub (это просто xhtml) ... или даже на формат Word docx . Многие из этих функций одинаковы среди этих форматов.

Похоже, он не имеет каких-либо существенных преимуществ по сравнению с любым из этих других форматов. Мне кажется, что xhtml был бы гораздо более полезным, чем XPS, как способ сохранения и загрузки FlowDocuments из RichTextBox. Я просмотрел несколько блогов о конвертации между ними. Большая часть или весь расширенный текст в Интернете - это (x) html. Кроме того, я не думаю, что кто-то использует это только для публикации своих документов; PDF предпочтительнее. Похоже, что XPS - это какой-то случайный формат, который MS сделала и решила использовать. Я вообще люблю MS, но у них есть привычка такого рода вещи. Разве MS не могла создать API, используя вместо этого xhtml? Я думаю, это было бы более полезно во многих ситуациях.

Итак, есть ли смысл использовать XPS, особенно по сравнению с одним из других форматов, которые я упомянул (или какой-либо другой)? Вы когда-нибудь использовали XPS в своих программах или иным образом?

Ответы [ 7 ]

8 голосов
/ 03 февраля 2010

Как уже говорилось в U62, WPF поставляется с элементом управления DocumentViewer, который позволяет просматривать документы XPS. DocumentViewer также имеет несколько полезных функций, таких как Print, Zoom, FitToPage и т. Д. Так что вам не нужно реализовывать это или использовать сторонние инструменты.

То, что я только что закончил час назад, используя XPS и DocumentViewer, было своего рода «Предварительным просмотром этикетки на адрес». Разрешить пользователю выбирать некоторые контакты из списка контактов, нажать «Предварительный просмотр». Откроется новое окно XAML, которое содержит элемент управления DocumentViewer и ListBox с выбором разных меток (например, 1 лист с 12 метками [2 столбца, 6 строк], 1 лист с одной меткой, ширину и высоту которой можно определить пользователем) , На основе выбора пользователей я создаю документ XPS в макете, выбранном пользователем, с адресами выбранных контактов. Например, если пользователь выбрал 4 контакта и хочет напечатать их на «SingleLabelSheet», я генерирую 1 документ XPS с 4 страницами, каждая страница содержит 1 адрес. Затем я отображаю XPS в DocumentViewer, и пользователь может распечатать этикетки на нашем Принтере этикеток.

Как только я понял, как работает API XPS (по крайней мере, Основы), это заняло 2 часа, чтобы начать работу.

Итак, в основном я вижу XPS как простой в использовании API для отображения FixedDocuments, которые должны быть сгенерированы на лету. Но я бы не стал лично сохранять их на моем жестком диске или каким-либо образом изменять их или делать то, что вы обычно делаете с документами.

3 голосов
/ 06 февраля 2010

Послушайте, я могу быть пессимистом в XPS в качестве решения для генерации отчетов, но я попробовал его и обнаружил, что первоначальную документацию трудно понять, поскольку в ней меньше реальных примеров, чем мне бы хотелось. Когда я применил его к реальному бизнес-приложению, я обнаружил, что это разочаровывает, особенно в LOB-приложениях, которым требуются таблицы, занимающие несколько страниц.

С того времени все могло измениться, но как только я начал просматривать таблицы, занимающие несколько страниц, и захотел, чтобы заголовки столбцов переместились наверх, и т. Д., Я обнаружил, что API требует от меня того, что я бы назвал чрезмерным обходные пути с ненужной сложностью.

Итак, с тех пор все могло измениться (около 8 месяцев назад), но я перешел с XPS на использование ITextSharp, и это было намного менее болезненно.

Таким образом, единственное преимущество, которое я бы сказал, как и у всех остальных, - это встроенный просмотрщик в WPF - но кроме этого я чувствую, что API, возможно, потребуется немного «взрослеть», прежде чем я попытаюсь что-то в нем повторить.

3 голосов
/ 03 февраля 2010

XPS в WPF похож на WMF в Win32 / WinForms, это постоянный формат, который позволяет хранить и печатать собственную графику WPF.

XPS используется для печати из WPF (даже если вы печатаете напрямую из приложения без сохранения, внутренняя система печати построена на XPS), так что MS должна сделать:

  1. Создайте новый формат файла, который точно соответствует тому, что они пытаются сделать
  2. Создайте на 100% совершенный переводчик из WPF в формат, который они не контролируют, например, в PDF (и надеемся, что Adobe не сломает все приложения WPF в следующей версии Acrobat Reader).

Что бы вы сделали?

Сохранение файлов XPS - просто приятный бонус.

3 голосов
/ 03 февраля 2010

Единственное реальное преимущество, о котором я могу думать, это то, что у вас есть элемент управления для просмотра документов XPS в приложениях WPF. Другие форматы, которые вы упоминаете, означают, что вам придется использовать стороннее средство рендеринга (или написать его самостоятельно, если у вас есть запасной год).

кстати. Я не очень разбираюсь в ePub, но XPS не сопоставим напрямую с XHTML, он больше похож на PDF в том смысле, что он имеет фиксированную компоновку.

2 голосов
/ 19 октября 2015

На самом деле я нашел действительно хорошую причину использовать 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)
1 голос
/ 25 апреля 2011

XPS (с кодовым названием «metro») был явно разработан как альтернатива Microsoft PDF и PostScript в Windows Vista. См. Эту старую статью здесь: Microsoft готовит новую спецификацию печати документов

0 голосов
/ 23 мая 2018

Существуют разные подходы при изобретении форматов документов:

  • Некоторые сделаны для быстрого просмотра на экране (скажем, с низким разрешением), такие как HTML, документ.
  • Некоторые другие (или могут быть) очень уважительно относятся к печати (скажем, на основе качества), такие как PDF, XPS.

Так что XPS так же хорош, как и PDF, плюс он отформатирован в XML, поэтому «возможно», он более стандартный, чем потоковый подход в PDF.

Черное пятно XPS - это, возможно, управление специальными цветами (Pantone, бумажные эффекты).

...