¿Qué es el archivo XPS? | Base de conocimientos

Introducción

En el artículo sobre lenguajes de descripción de páginas, descubrió que XPS es uno de los PDL estáticos. El artículo aquí le brindará más información sobre el formato XPS y los archivos XPS, sus peculiaridades, estructura y uso.

¿Qué es el archivo XPS?

El archivo XPS o XML Paper Especificación abreviado representa un paquete comprimido en ZIP de recursos (imágenes, fuentes, etc.) y archivos basados ​​en XML que hacen referencia a estos recursos. Los archivos basados ​​en XML almacenan el contenido de documentos y páginas y las relaciones entre varias partes del paquete. Una característica importante del formato XPS es que todos los recursos necesarios de los documentos se almacenan en el mismo paquete que los propios documentos.

Estructura típica de un archivo de formato XPS

Si abrimos cualquier archivo XPS con alguna utilidad ZIP podremos visualizar la siguiente estructura:

paquete XPS

“Sequense.fdseq del documento fijo” es una raíz del árbol de paquetes. Contiene una lista de documentos en el paquete.

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

En el ejemplo anterior, la secuencia de documentos fija contiene solo un documento, pero puede contener más documentos.

“[Content_Type].xml” contiene mapeo entre extensiones de partes del paquete y tipos de contenido descritos en los esquemas XML correspondientes:

<?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>

Las partes “Documento” se encuentran en la carpeta “Documentos” y también en su propia carpeta cuyo nombre es un índice del documento en la parte “Secuencia fija de documentos”.

La carpeta del documento también contiene partes “fpage” o “página fija” y una carpeta con las relaciones de las páginas.

“FixedDocument.fdoc” contiene referencias a partes de “página fija” y listas de “objetivos de enlace”.

<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>

El elemento LinkTarget define el elemento de descripción de la página con nombre al que se puede acceder mediante un hipervínculo.

La “página fija” contiene una descripción de página estática donde cualquier elemento gráfico está representado por un elemento XML con todas las propiedades necesarias. A continuación se muestra el contenido reducido de la página fija con índice 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>

Como podemos ver hay varios elementos gráficos: “Path”, “PathGeometry” y “Glyphs” y elementos que agrupan otros elementos gráficos con la misma transformación y recorte, “Canvas”. “Path” y “PathGeometry” pueden contener formas de gráficos vectoriales con trazos y/o rellenos con un color sólido o un pincel complejo, por ejemplo, un degradado o un pincel de imagen. El pincel de degradado puede ser lineal o radial y el pincel de imagen siempre contiene referencias a una imagen en la carpeta “Recursos”. Ahora hay un elemento gráfico separado para una imagen rasterizada. Para este propósito se utiliza el elemento “Ruta” lleno de “ImageBrush”.

Otra cosa destacable que podemos encontrar en este fragmento de descripción de la página es que el texto está contenido únicamente en el elemento “Glifos” como atributo “unicodeString” en lugar de como un elemento secundario de este elemento como en XML o HTML. Por lo tanto, el contenido no está separado del marcado. Por este motivo, no se puede hacer referencia a XPS como lenguaje de marcado.

La sintaxis de los archivos XPS, así como la de XML, está en formato Backus-Naur aumentado (ABNF).

Los recursos utilizados por la página se encuentran en un elemento separado “FixedPage.Resources”.

Aquellos recursos de página que tienen referencias a archivos remotos (remotos para esta página, no para este archivo XPS), por ejemplo, fuentes o imágenes, también tienen notas correspondientes en el archivo de relaciones “*.fpage.rels”.

Los recursos se almacenan en carpetas con el nombre “Recursos”. Estas carpetas se pueden ubicar en diferentes niveles de la estructura del paquete. Por regla general, allí se encuentran fuentes e imágenes. Todas las fuentes tienen la extensión *.TTF para fuentes TrueType o la extensión *.ODTTF para fuentes TrueType ofuscadas. La ofuscación de fuentes se realiza para suprimir la extracción de fuentes y usarlas en otros lugares sin permiso. Además de las fuentes TrueType, XPS solo admite colecciones de fuentes TrueType con la extensión *.ODTTC. No se admiten otros tipos de fuentes. Las imágenes pueden estar en formato PNG, JPEG, TIFF o WDP (Windows Media Photo Images).

A veces, entre otros recursos, se encuentra el archivo .dic. Es una parte del Diccionario. Contiene los llamados “recursos remotos” comunes para documentos o páginas que no requieren archivos separados. Remotos en el sentido de que no se almacenan en una parte de “Documento” sino en una carpeta externa. Entre estos recursos se pueden encontrar elementos Brush, PathGeometry, MatrixTransform, etc. Los colores ICC que se utilizan en el documento también se colocan como archivo “.icc” en la carpeta “Recursos”.

Partes opcionales de un archivo XPS.

El archivo XPS puede contener partes adicionales, no obligatorias, para navegar, imprimir y firmar.

Estructura del documento XPS.

La navegación por las partes del documento se realiza mediante la parte “DocumentSructure” y sus elementos secundarios “DocumentOutline”, “Story”, “StoryFragment”, “Párrafo”, “Tabla” y “NamedElement”. La estructura del documento se almacena en la carpeta Documento junto con las páginas.

Parte del documento XPS

Estructura del documento XPS

El archivo “DocStructure.struct” contiene DocumentOutline con referencias a 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>

En la carpeta “Fragmentos” se almacenan fragmentos de historias.

Fragmentos de estructura del documento XPS

Cada “Fragmento” contiene “Párrafos” con elementos “NamedElements” y “Tablas”.

<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>

Imprima boletos en archivos XPS.

Las funciones de impresión se implementan a través de partes “PrintTicket”. Contiene configuraciones de impresión que se pueden adjuntar a una secuencia de documentos, un documento o una página. Las partes de “PrintTicket” se almacenan en archivos con la máscara “*_PT.xml”, donde “PT” significa PrintTicket. Los archivos PrintTicket se encuentran en la carpeta “Metadatos”.

XPS Imprimir Boletos

Ejemplo de Imprimir Boleto.

	<?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>

Miniaturas.

En las carpetas “Metadatos” también se almacenan imágenes en miniatura, si es así.

Miniaturas XPS

Definiciones de firma.

La parte “SignatureDefinitions” permite firmar, solicitar y validar la firma de partes arbitrarias de documentos XPS de acuerdo con la Política de firma definida en la parte “SignatureDefinitions”.

Definiciones de firma XPS

Soporte para fuentes, colores e imágenes en documentos 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 sólo admite el formato de fuente OpenType, que se amplía con el formato Microsoft TrueType que combina los formatos TrueType Font (TTF) y Compact Font (CFF).

¿Cómo abrir un archivo XPS?

El archivo XPS se puede abrir con XPS Viewer de Microsoft. Es un componente estándar de Windows que comienza con Windows Vista. Una forma alternativa es ver el archivo XPS con la aplicación web Aspose.Page XPS Viewer.

¿Puedo convertir un archivo XPS a PDF?

La forma más rápida de convertir archivos XPS a PDF es utilizar Conversión de página Aspose aplicación web. El convertidor Aspose XPS admite conversiones de XPS a PDF, DOC, DOCX, HTML, TEX, SVG, PNG, JPG, TIFF, BMP. Si es desarrollador y desea utilizar nuestra biblioteca para dichas conversiones, lea el artículo Convertidores de PDL para encontrar ejemplos ilustrados con fragmentos de código sobre cómo realizar la conversión.

¿Puedo abrir un archivo XPS en Word?

No es posible directamente, pero puede convertir un archivo XPS a un documento de Word a través de la aplicación web Aspose.Page Conversion y luego abrir el editor de texto de Microsoft Word.

¿Se pueden convertir archivos XPS a Excel?

Sí, puede convertir XPS a Excel en línea en la aplicación web Aspose.Page Conversion. El documento XPS se reconocerá como una tabla. Las imágenes no se transfieren al archivo XLSX resultante.

¿Cómo abro un archivo XPS en Photoshop?

No es posible directamente, pero puede abrir archivos de imágenes rasterizadas resultantes de la conversión de XPS a imagen (JPG, PNG, TIFF, BMP) en la aplicación web Aspose.Page Conversion o simplemente puede abrir el archivo XPS con ZIP. utilidad, como se describió anteriormente, busque entre los recursos en las carpetas “Recursos” la imagen necesaria, extráigala en su carpeta y, finalmente, ábrala en Adobe Photoshop.

¿XPS es mejor que PDF?

Depende de tus necesidades. Consulte el artículo Comparación de lenguajes de descripción de páginas. Espero que te ayude a tomar la decisión correcta.

¿Cómo abro un archivo XPS en mi teléfono?

Puede abrir un archivo XPS en cualquier navegador con la aplicación web Aspose.Page XPS Viewer.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.