В чем смысл XPS?

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

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

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

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


person Benny Jobigan    schedule 03.02.2010    source источник


Ответы (7)


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

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

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

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

person Gilles Radrizzi    schedule 03.02.2010

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

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

person U62    schedule 03.02.2010

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

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

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

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

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

person Nir    schedule 03.02.2010
comment
Я бы попытался заставить его работать с обычными существующими вещами, которые люди действительно используют. - person Benny Jobigan; 04.02.2010

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

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

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

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

person Mark Pearl    schedule 06.02.2010

На самом деле я нашел действительно хорошую причину для использования 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)
person D_Bester    schedule 19.10.2015

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

person Simon Mourier    schedule 25.04.2011

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

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

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

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

person Sandburg    schedule 23.05.2018