Qu’est-ce que le fichier XPS ? | Base de connaissances
Introduction
Dans l’article sur les langages de description de page, vous avez découvert que XPS est l’un des PDL statiques. L’article ici va vous donner plus d’informations sur le format XPS et les fichiers XPS, leurs particularités, leur structure et leur utilisation.
Qu’est-ce que le fichier XPS ?
Le fichier XPS ou abrégé XML Paper Spécification représente un ensemble de ressources compressé au format ZIP (images, polices, etc.) et de fichiers XML qui font référence à ces ressources. Les fichiers XML stockent le contenu des documents et des pages ainsi que les relations entre les différentes parties du package. C’est une caractéristique importante du format XPS que toutes les ressources nécessaires des documents soient stockées dans le même package que les documents eux-mêmes.
Structure typique d’un fichier au format XPS
Si nous ouvrons un fichier XPS avec un utilitaire ZIP, nous pouvons afficher la structure suivante :
“Fixed document sequense.fdseq” est une racine de l’arborescence des packages. Il contient une liste de documents dans le package.
<FixedDocumentSequence xmlns="http://schemas.microsoft.com/xps/2005/06">
<DocumentReference Source="Documents/1/FixedDocument.fdoc" />
</FixedDocumentSequence>
Dans l’exemple ci-dessus, la séquence de documents fixe ne contient qu’un seul document, mais elle peut contenir plusieurs documents.
“[Content_Type].xml” contient un mappage entre les extensions des parties du package et les types de contenu décrits dans les schémas XML correspondants :
<?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>
Les parties « Document » se trouvent dans le dossier « Documents » ainsi que dans leur propre dossier dont le nom est un index du document dans la partie « Séquence de documents fixe ».
Le dossier du document contient également des parties “fpage” ou “page fixe” et un dossier avec les relations entre les pages.
“FixedDocument.fdoc” contient des références sur des parties de “page fixe” et des listes de “cibles de lien”.
<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>
L’élément LinkTarget définit l’élément de description de page nommé qui peut être adressé par un lien hypertexte.
“Page fixe” contient une description de page statique où tout élément graphique est représenté par un élément XML avec toutes les propriétés nécessaires. Ci-dessous le contenu réduit de la page fixe avec un index 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>
Comme nous pouvons le voir, il existe plusieurs éléments graphiques : “Path”, “PathGeometry” et “Glyphs” et des éléments qui regroupent d’autres éléments graphiques avec la même transformation et le même découpage, “Canvas”. « Path » et « PathGeometry » peuvent contenir une forme graphique vectorielle tracée et/ou remplie avec une couleur unie ou un pinceau complexe, par exemple un dégradé ou un pinceau d’image. Le pinceau dégradé peut être linéaire ou radial et le pinceau image contient toujours des références sur une image dans le dossier “Ressources”. Il existe désormais un élément graphique distinct pour une image raster. L’élément “Path” rempli de “ImageBrush” est utilisé à cet effet.
Une autre chose notable que nous pouvons trouver dans ce fragment de description de page est que le texte est contenu uniquement dans l’élément « Glyphs » en tant qu’attribut « unicodeString » au lieu d’être un enfant de cet élément comme dans XML ou HTML. Ainsi, le contenu n’est pas séparé du balisage. C’est pourquoi XPS ne peut pas être considéré comme un langage de balisage.
La syntaxe des fichiers XPS ainsi que XML est au format ABNF (Augmented Backus–Naur form).
Les ressources utilisées par la page se trouvent dans un élément distinct “FixedPage.Resources”.
Les ressources de page qui ont une référence sur des fichiers distants (distants pour cette page et non pour ce fichier XPS), par exemple des polices ou des images, ont également des notes correspondantes dans le fichier de relations “*.fpage.rels”.
Les ressources sont stockées dans des dossiers portant le nom « Ressources ». Ces dossiers peuvent être situés à différents niveaux de la structure du package. En règle générale, les polices et les images y sont contenues. Toutes les polices ont soit une extension *.TTF pour les polices TrueType, soit une extension *.ODTTF pour les polices TrueType obscurcies. L’obscurcissement des polices vise à supprimer l’extraction des polices et à les utiliser à d’autres endroits sans autorisation. Outre les polices TrueType, XPS ne prend en charge que les collections de polices TrueType avec l’extension *.ODTTC. Aucun autre type de police n’est pris en charge. Les images peuvent être au format PNG, JPEG, TIFF ou WDP (Windows Media Photo Images).
Parfois, parmi d’autres ressources, le fichier .dic est rencontré. C’est une partie du dictionnaire. Il contient des ressources communes pour les documents ou les pages dites « ressources distantes » qui ne nécessitent pas de fichiers séparés. Distants dans le sens où ils sont stockés non pas dans une partie « Document » mais dans un dossier externe. Parmi ces ressources peuvent figurer les éléments Brush, PathGeometry, MatrixTransform, etc. Les couleurs ICC utilisées dans le document sont également placées sous forme de fichier “.icc” dans le dossier “Ressources”.
Parties facultatives d’un fichier XPS.
Le fichier XPS peut contenir des parties supplémentaires, non obligatoires, pour la navigation, l’impression et la signature.
Structure des documents XPS.
La navigation sur les parties du document est réalisée par la partie “DocumentSructure” et ses éléments enfants “DocumentOutline”, “Story”, “StoryFragment”, “Paragraphe”, “Tableau” et “NamedElement”. La structure du document est stockée dans le dossier Document avec les pages.
Le fichier “DocStructure.struct” contient DocumentOutline avec des références sur 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 <psf:Property>" 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>
Dans le dossier “Fragments”, des fragments d’histoire sont stockés.
Chaque “Fragment” contient des “Paragraphs” avec des éléments “NamedElements” et “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>
Imprimez des tickets dans des fichiers XPS.
Les fonctionnalités d’impression sont implémentées via les parties “PrintTicket”. Il contient des paramètres d’impression qui peuvent être attachés à une séquence de documents, un document ou une page. Les parties “PrintTicket” sont stockées dans des fichiers avec le masque “*_PT.xml” où “PT” signifie PrintTicket. Les fichiers PrintTicket se trouvent dans le dossier « Metadata ».
Exemple de 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>
Miniatures.
Dans les dossiers “Métadonnées”, les images miniatures sont également stockées, le cas échéant.
SignatureDéfinitions.
La partie « SignatureDefinitions » permet de signer, de demander et de valider la signature de parties arbitraires de documents XPS conformément à la politique de signature définie dans la partie « SignatureDefinitions ».
Prise en charge des polices, des couleurs et des images dans les documents 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 prend uniquement en charge le format de police OpenType, étendu par le format Microsoft TrueType combinant les formats TrueType Font (TTF) et Compact Font (CFF).
Comment ouvrir le fichier XPS?
Le fichier XPS peut être ouvert avec la visionneuse XPS de Microsoft. Il s’agit d’un composant Windows standard commençant par Windows Vista. Une autre méthode consiste à afficher le fichier XPS avec l’application Web Aspose.Page XPS Viewer.
Puis-je convertir un fichier XPS en PDF ?
Le moyen le plus rapide de convertir des fichiers XPS en PDF est d’utiliser Application Web Conversion Aspose.Page. Le convertisseur Aspose XPS prend en charge les conversions XPS en PDF, DOC, DOCX, HTML, TEX, SVG, PNG, JPG, TIFF, BMP. Si vous êtes un développeur et souhaitez utiliser notre bibliothèque pour de telles conversions, lisez l’article Convertisseurs PDL pour trouver des exemples illustrés d’extraits de code sur la façon d’effectuer la conversion.
Puis-je ouvrir un fichier XPS dans Word ?
Ce n’est pas possible directement, mais vous pouvez convertir un fichier XPS en document Word via l’application Web Aspose.Page Conversion, puis l’ouvrir dans l’éditeur de texte Microsoft Word.
Les fichiers XPS peuvent-ils être convertis en Excel ?
Oui, vous pouvez convertir XPS en Excel en ligne dans l’application Web Aspose.Page Conversion. Le document XPS sera reconnu comme un tableau. Les images ne sont pas transférées vers le fichier XLSX résultant.
Comment ouvrir un fichier XPS dans Photoshop ?
Ce n’est pas possible directement, mais vous pouvez ouvrir soit les fichiers d’image raster résultant de la conversion XPS en image (JPG, PNG, TIFF, BMP) dans l’application Web Aspose.Page Conversion, soit simplement ouvrir le fichier XPS avec ZIP. utilitaire, comme décrit précédemment, recherchez parmi les ressources des dossiers “Ressources” l’image nécessaire, extrayez-la dans votre dossier et, enfin, ouvrez-la dans Adobe Photoshop.
XPS est-il meilleur que PDF ?
Cela dépend de vos besoins. Voir un article Comparaison des langages de description de page. J’espère que cela vous aidera à prendre la bonne décision.
Comment ouvrir un fichier XPS sur mon téléphone ?
Vous pouvez ouvrir un fichier XPS dans n’importe quel navigateur avec l’application Web Aspose.Page XPS Viewer.