Что такое XPS-файл? | База знаний

Введение

Из статьи о языках описания страниц вы узнали, что XPS — это один из статических PDL. В этой статье вы найдете дополнительную информацию о формате XPS и файлах XPS, их особенностях, структуре и использовании.

Что такое XPS-файл?

Файл XPS или сокращенно XML Paper Specification представляет собой сжатый в формате ZIP пакет ресурсов (изображений, шрифтов и т. д.) и файлов на основе XML, которые ссылаются на эти ресурсы. Файлы на основе XML хранят содержимое документов и страниц, а также связи между различными частями пакета. Важной особенностью формата XPS является то, что все необходимые ресурсы документов хранятся в том же пакете, что и сами документы.

Типичная структура файла формата XPS

Если мы откроем любой файл XPS с помощью какой-либо ZIP-утилиты, мы увидим следующую структуру:

Пакет XPS

«Фиксированный документ sequense.fdseq» является корнем дерева пакетов. Содержит список документов в пакете.

<FixedDocumentSequence xmlns="http://schemas.microsoft.com/xps/2005/06">
    <DocumentReference Source="Documents/1/FixedDocument.fdoc" />
</FixedDocumentSequence>

В приведенном выше примере фиксированная последовательность документов содержит только один документ, но может содержать и больше документов.

«[Content_Type].xml» содержит сопоставление между расширениями частей пакета и типами контента, описанными в соответствующих схемах XML:

<?xml version="1.0" encoding="utf-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
      <Default Extension="fdseq" ContentType="application/vnd.ms-package.xps-fixeddocumentsequence+xml" />
      <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
      <Default Extension="fdoc" ContentType="application/vnd.ms-package.xps-fixeddocument+xml" />
      <Default Extension="fpage" ContentType="application/vnd.ms-package.xps-fixedpage+xml" />
      <Default Extension="ODTTF" ContentType="application/vnd.ms-package.obfuscated-opentype" />
      <Default Extension="png" ContentType="image/png" />
</Types>

Части «Документ» располагаются в папке «Документы», а также в отдельной папке, имя которой является индексом документа в части «Фиксированная последовательность документов».

Папка документа также содержит части «fpage» или «фиксированная страница» и папку со связями страниц.

«FixedDocument.fdoc» содержит ссылки на части «фиксированной страницы» и списки «целей ссылок».

<FixedDocument xmlns="http://schemas.microsoft.com/xps/2005/06">
	    <PageContent Source="Pages/1.fpage">
			    <PageContent.LinkTargets>
				      <LinkTarget Name="Page1" />
				      <LinkTarget Name="Conditions" />
				      <LinkTarget Name="Rfd_Conditions" />
				      <LinkTarget Name="Label2" />
				      ......................................
				  <PageContent.LinkTargets>
	    </PageContent>
	    <PageContent Source="Pages/2.fpage">
	         <PageContent.LinkTargets>
	             <LinkTarget Name="Page2" />
	             <LinkTarget Name="Rectangle" />
	             <LinkTarget Name="peQ5" />
	             ......................................
	         <PageContent.LinkTargets>
	    </PageContent>
	    <PageContent Source="Pages/3.fpage">
	         <PageContent.LinkTargets>
	             <LinkTarget Name="Page3" />
	             <LinkTarget Name="Followup" />
	             <LinkTarget Name="Rfd_Followup" />
	             <LinkTarget Name="Label41" />
	             ......................................
					</PageContent.LinkTargets>
		  </PageContent>
	</FixedDocument>

Элемент LinkTarget определяет именованный элемент описания страницы, к которому можно обратиться по гиперссылке.

«Фиксированная страница» содержит одно статическое описание страницы, где любой графический элемент представлен XML-элементом со всеми необходимыми свойствами. Ниже приведен сокращенный контент фиксированной страницы с индексом 1.

<FixedPage xmlns="http://schemas.microsoft.com/xps/2005/06" xmlns:x="http://schemas.microsoft.com/xps/2005/06/resourcedictionary-key" xml:lang="en-us" Width="784" Height="1024">
			<FixedPage.Resources>
					<ResourceDictionary>
							<ImageBrush x:Key="b0" ViewportUnits="Absolute" TileMode="None" ViewboxUnits="Absolute" Viewbox="0,0,150,84" Viewport="0,0,150,84" ImageSource="/Resources/5acf843b-c331-4268-bedd-1f38575d2cba.png" />
							<ImageBrush x:Key="b1" ViewportUnits="Absolute" TileMode="None" ViewboxUnits="Absolute" Viewbox="0,0,308,222" Viewport="0,0,306.612612612613,221" ImageSource="/Resources/56123998-a878-4552-a78f-652734403449.png" />
							<LinearGradientBrush x:Key="b2" StartPoint="1,1" EndPoint="1,29" ColorInterpolationMode="SRgbLinearInterpolation" MappingMode="Absolute" SpreadMethod="Pad">
	    						<LinearGradientBrush.GradientStops>
	        						<GradientStop Color="sc#0.980392158, 1, 1, 1" Offset="0" />
	        						<GradientStop Color="sc#0.521568656, 1, 1, 1" Offset="1" />
	    						</LinearGradientBrush.GradientStops>
							</LinearGradientBrush>
							<ImageBrush x:Key="b3" ViewportUnits="Absolute" TileMode="None" ViewboxUnits="Absolute" Viewbox="-1.77635683940025E-15,0,30.004187214593,28.0039080669535" Viewport="0,0,34,31.7333333333333" ImageSource="/Resources/1fcae301-7b09-41d4-b09c-adb92c26d9df.png" />
							<ImageBrush x:Key="b4" ViewportUnits="Absolute" TileMode="None" ViewboxUnits="Absolute" Viewbox="0,0,33.92,42.24" Viewport="0,0,33.92,42.24" ImageSource="/Resources/9812220b-fe0b-4df4-946a-391c0ef76f78.png" />
					</ResourceDictionary>
			</FixedPage.Resources>
			<Canvas RenderTransform="0.96150234741784,0,0,0.96150234741784,0,0">
					<Canvas Name="Page1" RenderTransform="1.0400390625,0,0,1.0400390625,0,0">
							<Path Fill="#FFFFFFFF" Data="M0,0L784,0 784,1024 0,1024Z" />
							<Canvas Clip="M0,0L784,0 784,1024 0,1024Z">
								  <Canvas Name="Rfd_Conditions" RenderTransform="1,0,0,1,51,712" />
											<Glyphs Name="Label2" OriginX="517.83" OriginY="22.0533333333333" FontRenderingEmSize="10" FontUri="/Resources/6211f37e-c1a8-4b0a-82b1-9eb64114c039.ODTTF" UnicodeString="Patient Name:" Fill="#FF404040" />
											<Glyphs Name="Label3" OriginX="556.08" OriginY="42.0533333333333" FontRenderingEmSize="10" FontUri="/Resources/6211f37e-c1a8-4b0a-82b1-9eb64114c039.ODTTF" UnicodeString="Acct#:" Fill="#FF404040" />
											<Path Name="Line" Stroke="#FF00529B" StrokeThickness="1" StrokeMiterLimit="10" Fill="#00FFFFFF" RenderTransform="1,0,0,1,41,206" Data="M0,0.5L680,0.5" />
											<Path Name="Image" Fill="{StaticResource b0}" RenderTransform="1,0,0,1,15,7" Data="M0,0L150,0 150,84 0,84Z" />
											<Canvas Name="HxConditionsDissatisfiedPatients" RenderTransform="1,0,0,1,53,714">
													<Path Stroke="#FF000000" StrokeThickness="1" StrokeMiterLimit="10" RenderTransform="0.8,0,0,0.8,2.4,2.4" Data="M0.5,0.5L23.5,0.5 23.5,23.5 0.5,23.5Z" />
													<Glyphs OriginX="33" OriginY="16.16" FontRenderingEmSize="12" FontUri="/Resources/2735f4ff-8c83-44e1-89ed-520ec4c4be53.ODTTF" UnicodeString="Dissatisfied patients" Fill="#FF404040" />
											</Canvas>
											<Path Name="Rectangle3" Stroke="#FF808080" StrokeThickness="1" StrokeMiterLimit="10" Fill="#00FFFFFF" RenderTransform="1,0,0,1,74,951" Data="M0.5,0.5L329.5,0.5 329.5,44.5 0.5,44.5Z" />
											<Canvas Name="Conditions" RenderTransform="1,0,0,1,51,712" />
													<Path Fill="#FF0066CC" Data="M0,12.77L330.4,12.77 330.4,13.47 0,13.47Z" />
											</Canvas>
											<PathGeometry x:Key="all">
									        <PathFigure StartPoint="20,70" IsClosed="true">
									            <PolyLineSegment Points="250,70 250,300 20,300" />
									        </PathFigure>
									        <PathFigure StartPoint="135,70">
									            <ArcSegment Size="115,115" IsLargeArc="true" RotationAngle="0" SweepDirection="Counterclockwise" Point="135,300" />
									            <ArcSegment Size="115,115" IsLargeArc="true" RotationAngle="0" SweepDirection="Counterclockwise" Point="135,70" />
									        </PathFigure>
									        <PathFigure StartPoint="135,70">
									            <PolyQuadraticBezierSegment Points="270,185 135,300" />
									            <PolyQuadraticBezierSegment Points="0,185 135,70" />
									        </PathFigure>
									        <PathFigure StartPoint="250,185">
									            <PolyBezierSegment Points="173.34,85 96.67,285 20,185" />
									            <PolyBezierSegment Points="96.67,85 173.34,285 250,185" />
									        </PathFigure>
									    </PathGeometry>

									</Canvas>
							</Canvas>
					</Canvas>
			</Canvas>
			<Path FixedPage.NavigateUri="http://www.bottomline.com" Fill="#00000000" Data="F1M170,77L500.4,77 500.4,91.58 170,91.58Z" />
	</FixedPage>

Как мы видим, существует несколько графических элементов: «Путь», «Патгеометрия» и «Глифы», а также элементы, которые группируют другие графические элементы с тем же преобразованием и отсечением, «Холст». «Путь» и «ПутьГеометрия» могут содержать фигуры векторной графики, обведенные и/или заполненные сплошным цветом или сложной кистью, например, градиентной или графической кистью. Градиентная кисть может быть линейной или радиальной, а кисть изображения всегда содержит ссылки на изображение в папке «Ресурсы». Для растрового изображения теперь выделен отдельный графический элемент. Для этой цели используется элемент «Путь», заполненный «ImageBrush».

Еще одна примечательная вещь, которую мы можем найти в этом фрагменте описания страницы, заключается в том, что текст содержится только в элементе “Glyphs” как атрибут “unicodeString”, а не как дочерний элемент этого элемента, как в XML или HTML. Таким образом, содержимое не отделено от разметки. Вот почему XPS нельзя отнести к языкам разметки.

Синтаксис файлов XPS, а также XML находится в расширенной форме Бэкуса–Наура (ABNF).

Ресурсы, используемые страницей, расположены в отдельном элементе «FixedPage.Resources».

Те ресурсы страницы, которые имеют ссылку на удаленные (удаленные для этой страницы, а не для этого файла XPS) файлы, например, шрифты или изображения, также имеют соответствующие примечания в файле связей «*.fpage.rels».

Ресурсы хранятся в папках с названием «Ресурсы». Такие папки могут располагаться на разных уровнях структуры пакета. Как правило, там содержатся шрифты и изображения. Все шрифты имеют расширение *.TTF для шрифтов TrueType или расширение *.ODTTF для скрытых шрифтов TrueType. Обфускация шрифтов сделана для пресечения извлечения шрифтов и использования их в других местах без разрешения. Помимо шрифтов TrueType, XPS поддерживает только коллекции шрифтов TrueType с расширением *.ODTTC. Другие типы шрифтов не поддерживаются. Изображения могут быть в формате PNG, JPEG, TIFF или WDP (фотоизображения Windows Media).

Иногда среди других ресурсов встречается файл .dic. Это часть словаря. Он содержит общие для документов или страниц так называемые «удаленные ресурсы», не требующие отдельных файлов. Удаленные в том смысле, что они хранятся не в разделе «Документы», а во внешней папке. Среди этих ресурсов могут быть элементы Brush, PathGeometry, MatrixTransform и т. д. Цвета ICC, используемые в документе, также сохраняются в виде файла «.icc» в папке «Ресурсы».

Необязательные части файла XPS.

Файл XPS может содержать дополнительные, необязательные части для навигации, печати и подписи.

Структура документа XPS.

Навигация по частям документа реализована частью «DocumentSructure» и ее дочерними элементами «DocumentOutline», «Story», «StoryFragment», «Абзац», «Таблица» и «ИменованныйЭлемент». Структура документа хранится в папке «Документ» вместе со страницами.

Часть документа XPS

Структура документа XPS

Файл «DocStructure.struct» содержит DocumentOutline со ссылками на StoryFragments.

<DocumentStructure xmlns="http://schemas.microsoft.com/xps/2005/06/documentstructure">
			<DocumentStructure.Outline>
				  <DocumentOutline xml:lang="en-US">
				  		<OutlineEntry OutlineLevel="1" Description="Print Schema Specification" OutlineTarget="../FixedDoc.fdoc#PG_1_LNK_1069"/>
						  <OutlineEntry OutlineLevel="1" Description="Contents" OutlineTarget="../FixedDoc.fdoc#PG_8_LNK_1070"/>
						  <OutlineEntry OutlineLevel="2" Description="About This Specification" OutlineTarget="../FixedDoc.fdoc#PG_24_LNK_1074"/>
						  <OutlineEntry OutlineLevel="2" Description="How This Specification Is Organized"  OutlineTarget="../FixedDoc.fdoc#PG_24_LNK_1075"/>
						  <OutlineEntry OutlineLevel="3" Description="2.1.4.1 &lt;psf:Property&gt;" OutlineTarget="../FixedDoc.fdoc#PG_49_LNK_1124"/>
						  <OutlineEntry OutlineLevel="4" Description="Example 2.1-6. Property syntax example" OutlineTarget="../FixedDoc.fdoc#PG_50_LNK_1125"/>
						  .....................................................................................................................................
					</DocumentOutline>
		  </DocumentStructure.Outline>
		  <Story StoryName="MainStory">
			    <StoryFragmentReference Page="1"/>
				  <StoryFragmentReference Page="2"/>
				  <StoryFragmentReference Page="3"/>
				  .....................................
			</Story>
			<Story StoryName="s1">
			  	<StoryFragmentReference Page="1"/>
			</Story>
			<Story StoryName="s2">
			  	<StoryFragmentReference Page="2"/>
			</Story>
			<Story StoryName="s3">
			  	<StoryFragmentReference Page="3"/>
			</Story>
			......................................
	</DocumentStructure>

В папке «Фрагменты» хранятся фрагменты рассказа.

Фрагменты структуры документа XPS

Каждый «Фрагмент» содержит «Абзацы» с элементами «NamedElements» и «Tables».

<StoryFragments xmlns="http://schemas.microsoft.com/xps/2005/06/documentstructure">
		 <StoryFragment FragmentType="Content" StoryName="MainStory">
		 		<ParagraphStructure>
			  		<NamedElement NameReference="a5"/>
			      <NamedElement NameReference="a6"/>
			      <NamedElement NameReference="a7"/>
			  </ParagraphStructure>
			  <ParagraphStructure>
			      <NamedElement NameReference="a8"/>
			  </ParagraphStructure>
			  <TableStructure>
				    <TableRowGroupStructure>
						    <TableRowStructure>
							      <TableCellStructure>
								        <ParagraphStructure>
									          <NamedElement NameReference="a28"/>
									          <NamedElement NameReference="a29"/>
								        </ParagraphStructure>
							      </TableCellStructure>
						     		<TableCellStructure>
						     				<ParagraphStructure>
									      		<NamedElement NameReference="a30"/>
									      		<NamedElement NameReference="a31"/>
									      		<NamedElement NameReference="a32"/>
						     				</ParagraphStructure>
						     		</TableCellStructure>
						    </TableRowStructure>
						    <TableRowStructure>
						    		<TableCellStructure>
						     				<ParagraphStructure>
						       					<NamedElement NameReference="a33"/>
						       					<NamedElement NameReference="a34"/>
						     				</ParagraphStructure>
						    		</TableCellStructure>
						     		<TableCellStructure>
						      			<ParagraphStructure>
						       					<NamedElement NameReference="a35"/>
						       					<NamedElement NameReference="a36"/>
						     				</ParagraphStructure>
						     </TableCellStructure>
						    </TableRowStructure>							    
				    </TableRowGroupStructure>
			  </TableStructure>
			  <ParagraphStructure>
			      <NamedElement NameReference="a9"/>
			      <NamedElement NameReference="a10"/>
			  </ParagraphStructure>
			  ...................................................................
		</StoryFragment>
	</StoryFragments>

Распечатывайте билеты в файлах XPS.

Возможности печати реализованы через части PrintTicket. Он содержит настройки печати, которые можно прикрепить к последовательности документов, одному документу или странице. Части PrintTicket хранятся в файлах с маской «*_PT.xml», где «PT» означает PrintTicket. Файлы PrintTicket находятся в папке «Метаданные».

XPS PrintTickets

Пример PrintTicket.

	<?xml version="1.0" encoding="UTF-8"?>
	<psf:PrintTicket xmlns:psf="http://schemas.microsoft.com/windows/2003/08/printing/printschemaframework"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
		version="1"
		xmlns:ns0000="http://schemas.microsoft.com/windows/2006/06/printing/printschemakeywords/microsoftxpsdocumentwriter"
		xmlns:psk="http://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords">
			<psf:ParameterInit name="ns0000:PageDevmodeSnapshot">
					<psf:Value xsi:type="xsd:string">
							TQBpAGMAcgBvAHMAbwBmAHQAIABYAFAAUwAgAEQAb........=
					</psf:Value>
			</psf:ParameterInit>
			<psf:ParameterInit name="psk:JobCopiesAllDocuments">
					<psf:Value xsi:type="xsd:integer">1</psf:Value>
			</psf:ParameterInit>
			<psf:Feature name="psk:PageMediaSize">
					<psf:Option name="psk:ISOA4">
							<psf:ScoredProperty name="psk:MediaSizeWidth">
									<psf:Value xsi:type="xsd:integer">210000</psf:Value>
							</psf:ScoredProperty>
							<psf:ScoredProperty name="psk:MediaSizeHeight">
									<psf:Value xsi:type="xsd:integer">297000</psf:Value>
							</psf:ScoredProperty>
					</psf:Option>
			</psf:Feature>
			<psf:Feature name="psk:JobInputBin">
					<psf:Option name="psk:AutoSelect"/>
			</psf:Feature>
			<psf:Feature name="ns0000:JobInterleaving">
					<psf:Option name="ns0000:OFF"/>
			</psf:Feature>
			<psf:Feature name="ns0000:JobImageType">
					<psf:Option name="ns0000:JPEGMed"/>
			</psf:Feature>
			<psf:Feature name="psk:PageOrientation">
					<psf:Option name="psk:Portrait"/>
			</psf:Feature>
			<psf:Feature name="psk:DocumentCollate">
					<psf:Option name="psk:Uncollated"/>
			</psf:Feature>
			<psf:Feature name="psk:PageResolution">
					<psf:Option name="ns0000:Option1">
							<psf:ScoredProperty name="psk:ResolutionX">
									<psf:Value xsi:type="xsd:integer">600</psf:Value>
							</psf:ScoredProperty>
							<psf:ScoredProperty name="psk:ResolutionY">
									<psf:Value xsi:type="xsd:integer">600</psf:Value>
							</psf:ScoredProperty>
					</psf:Option>
			</psf:Feature>
			<psf:Feature name="psk:PageOutputColor">
					<psf:Option name="psk:Color">
							<psf:ScoredProperty name="psk:DeviceBitsPerPixel">
									<psf:Value xsi:type="xsd:integer">24</psf:Value>
							</psf:ScoredProperty>
							<psf:ScoredProperty name="psk:DriverBitsPerPixel">
									<psf:Value xsi:type="xsd:integer">24</psf:Value>
							</psf:ScoredProperty>
					</psf:Option>
			</psf:Feature>
	</psf:PrintTicket>

Миниатюры.

В папках «Метаданные» также хранятся миниатюры изображений, если они есть.

Миниатюры XPS

Определения подписи.

Часть «SignatureDefinitions» позволяет подписывать, запрашивать и проверять подпись произвольных частей документов XPS в соответствии с политикой подписи, определенной в части «SignatureDefinitions».

Определения подписи XPS

Поддержка шрифтов, цветов и изображений в документах XPS.


Font formats

- Compact Fonts (CFF)
- TrueType

Color space types

- sRGB
- scRGB
- CMYK
- N-Channel
- ICC version 2

Image formats

- JPEG
- PNG
- TIFF
- Windows Media Photo Image (WDP)

XPS поддерживает только формат шрифтов OpenType, который расширен форматом Microsoft TrueType, объединяющим форматы шрифта TrueType (TTF) и компактного шрифта (CFF).

Как открыть файл XPS?

Файл XPS можно открыть с помощью Microsoft XPS Viewer. Это стандартный компонент Windows, начиная с Windows Vista. Альтернативный способ — просмотреть файл XPS с помощью веб-приложения Aspose.Page XPS Viewer.

Могу ли я преобразовать файл XPS в PDF?

Самый быстрый способ конвертировать файлы XPS в PDF — использовать Веб-приложение Aspose.Page Conversion. Конвертер Aspose XPS поддерживает преобразования XPS в PDF, DOC, DOCX, HTML, TEX, SVG, PNG, JPG, TIFF, BMP. Если вы разработчик и хотите использовать нашу библиотеку для таких преобразований, изучите статью Конвертеры PDL, чтобы найти иллюстрированные фрагментами кода примеры выполнения преобразования.

Могу ли я открыть файл XPS в Word?

Это невозможно напрямую, но вы можете преобразовать файл XPS в документ Word через веб-приложение Aspose.Page Conversion, а затем открыть его в текстовом редакторе Microsoft Word.

Можно ли преобразовать файлы XPS в Excel?

Да, вы можете конвертировать XPS в Excel онлайн в веб-приложении Aspose.Page Conversion. Документ XPS будет распознан как таблица. Картинки не переносятся в результирующий файл XLSX.

Как открыть файл XPS в Photoshop?

Это невозможно напрямую, но вы можете открыть либо файлы растровых изображений, полученные в результате преобразования XPS в изображение (JPG, PNG, TIFF, BMP), в веб-приложении Aspose.Page Conversion, либо просто открыть файл XPS с помощью ZIP. Утилита, как было описано ранее, находит среди ресурсов в папках «Ресурсы» необходимое изображение, извлекает его в свою папку и, наконец, открывает в Adobe Photoshop.

XPS лучше PDF?

Это зависит от ваших потребностей. См. статью Сравнение языков описания страниц. Надеюсь, это поможет вам принять правильное решение.

Как открыть файл XPS на телефоне?

Вы можете открыть файл XPS в любом браузере с помощью веб-приложения Aspose.Page XPS Viewer.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.