Що таке файл 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» або «fixed page» і папку зі зв’язками сторінок.

«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».

Ще одна примітна річ, яку ми можемо знайти у цьому фрагменті опису сторінки, полягає в тому, що текст міститься лише в елементі «Гліфи» як атрибут «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» у папці «Resources».

Додаткові частини файлу XPS.

Файл XPS може містити додаткові необов’язкові частини для навігації, друку та підпису.

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

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

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

XPS DocumentStructure

Файл “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 DocumentStructure фрагменти

Кожен «Фрагмент» містить «Абзаци» з елементами «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 SignatureDefinitions

Підтримка шрифтів, кольорів і зображень у документах 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 Font (TTF) і Compact Font (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. Якщо ви розробник і хочете використовувати нашу бібліотеку для таких перетворень, ознайомтеся зі статтею PDLs converters, щоб знайти проілюстровані фрагментами коду приклади того, як виконати перетворення.

Чи можу я відкрити файл 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.