Partager via


Pilotes pour OpenXPS

Important

La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.

Pour plus d’informations, veuillez consulter la section Plateforme d’impression moderne et le Guide de conception des applications de support d’impression.

OpenXPS est le format Open XML Paper Specification pour les documents, et il est basé sur la spécification standard de l’ECMA International.

Pour obtenir les informations les plus récentes sur cette spécification, consultez la section Spécification papier Open XML.

Windows 8 offre un support complet pour OpenXPS, en parallèle avec le support continu pour le format XPS de Microsoft existant. Cette rubrique se concentre sur le support d’OpenXPS via le modèle de pilote v4. Pour un support OpenXPS pertinent pour les développeurs d’applications Windows, veuillez consulter la section Support des applications pour l’impression OpenXPS.

Scénarios OpenXPS pris en charge

Le chemin d’impression de Windows a été développé pour s’assurer que le format XPS soumis correspond à un format pris en charge par le pilote d’impression cible, et convertira les formats si nécessaire. Windows fournit également des API pour interroger le pilote d’impression, afin que l’application puisse fournir des éléments compatibles et éviter toute conversion supplémentaire au sein du système d’impression.

Un pilote d’impression peut utiliser son manifeste pour indiquer s’il prend en charge Microsoft XPS, Open XPS, ou les deux formats. Microsoft XPS ou OpenXPS peut être présenté aux filtres dans la chaîne de filtres d’impression, en utilisant les interfaces de flux et de modèle objet (OM) existantes - aucun nouveau type d’interface n’est requis pour que les pilotes prennent en charge OpenXPS. Le format qui est présenté aux filtres dépend du format pris en charge par le pilote ou du format fourni par l’application.

Le Microsoft XPS Document Writer (MXDW) a été mis à jour pour permettre à MXDW de produire soit Microsoft XPS, soit OpenXPS à partir de n’importe quelle application de bureau Windows. De même, le Microsoft XPS Viewer et l’application Reader dans Windows 8 peuvent ouvrir les deux formats XPS. Si nécessaire, les utilisateurs peuvent imprimer depuis le XPS Viewer vers MXDW afin de convertir les formats.

Scénarios OpenXPS non pris en charge

Certaines fonctionnalités héritées ne sont pas prises en charge ou offrent une expérience dégradée lorsqu’elles sont utilisées avec OpenXPS.

Non pris en charge : L’envoi de fichiers OpenXPS directement au spooler (en contournant l’API d’impression XPS) est un scénario non pris en charge. Cela entraînera les problèmes fonctionnels suivants :

  • Les fichiers de spool XPS envoyés directement au spooler seront traités comme MSXPS et gérés en conséquence.

  • Les résultats de l’envoi d’un fichier OpenXPS directement au spooler sont indéfinis et provoqueront probablement l’échec de la tâche d’impression.

Remarque : Il n’est pas prévu de fournir un support pour ce scénario.

Non recommandé : L’envoi d’un flux OpenXPS directement depuis une application vers l’API d’impression XPS n’est pas une technique recommandée. Par exemple, n’envoyez pas un flux OpenXPS directement à la méthode StartXPSPrintJob. Si vous le faites, la conversion résultante d’une variante de XPS à une autre en tant que flux peut être très coûteuse en termes de performance.

Vous devriez plutôt utiliser IPrintDocumentPackageTarget pour soumettre la tâche d’impression en tant qu’OM XPS afin d’éviter une dégradation des performances.

Non recommandé : Envoyer un fichier de spool XPS directement au spooler. Si vous le faites, le système d’impression ne trouvera pas les métadonnées requises ajoutées par les API du chemin d’impression, supposera que le format est MSXPS et tentera de le convertir en OpenXPS. Si le fichier de spool envoyé directement au spooler était un fichier au format OpenXPS, la tentative de conversion par la chaîne de filtres d’impression pour le convertir en OpenXPS aura des résultats non définis. Si le fichier envoyé au spooler était un fichier au format MSXPS et que le pilote est un pilote uniquement OpenXPS, alors la conversion par la chaîne de filtres d’impression en OpenXPS réussira. Mais cette conversion à un stade tardif entraînera une perte significative de performances du système d’impression.

Impact sur les développeurs d’applications

Pour des informations sur l’impact sur les développeurs d’applications concernant le support d’OpenXPS dans Windows 8, veuillez consulter la section Prise en charge des applications pour l’impression OpenXPS.

Impact sur les développeurs de pilotes

Voici les étapes de base pour activer OpenXPS dans un pilote d’impression v4 :

  • Manifeste du pilote : Ajouter « OpenXPS » à la section Driver Render.

  • Manifeste du pilote : Ajouter « oxps » à la section FileSave, si applicable.

  • Chaîne de filtres : Mettre à jour les filtres d’impression pour gérer les éléments OpenXPS.

Pour un flux donné, et avec les interfaces objet appropriées, un client peut utiliser le format OpenXPS pour transférer des données vers les filtres dans la chaîne de filtres d’impression. Pour transférer un flux de données, le client utilise les interfaces IID_IPrintReadStream et IID_IPrintWriteStream. Pour transférer des données à un composant OM, le client utilise les interfaces IID_IXpsDocumentProvider et IID_IXpsDocumentConsumer. Les pilotes qui déclarent prendre en charge OpenXPS devront s’assurer que les filtres d’impression fournis peuvent gérer correctement le format OpenXPS lorsque ce format est reçu du gestionnaire de pipeline.

Manifeste du pilote : section DriverRender. Lors de l’installation du pilote, le processus de configuration vérifie la section DriverRender du manifeste pour voir si l’entrée XpsFormat inclut OpenXPS. L’entrée XpsFormat peut inclure à la fois XPS (pour Microsoft XPS) et OpenXPS, pour indiquer une double prise en charge. L’ordre dans lequel les deux formats sont listés dans l’entrée XpsFormat détermine le format préféré pour le pilote.

Voici quelques exemples de mise à jour de la section DriverRender.

Indiquer une prise en charge uniquement pour OpenXPS :

[DriverRender]
XpsFormat = OpenXPS

Indiquer une prise en charge uniquement pour MSXPS :

[DriverRender]
XpsFormat = XPS

Indiquer une prise en charge des deux formats, avec une préférence pour OpenXPS :

[DriverRender]
XpsFormat = OpenXPS,XPS

Indiquer une prise en charge des deux formats, avec une préférence pour MSXPS :

[DriverRender]
XpsFormat = XPS,OpenXPS

Le développeur du pilote détermine le format préféré pour son pilote d’impression v4, et cette décision est basée sur la fonctionnalité que le pilote a été conçu pour fournir. Par exemple, un pilote d’impression pourrait être développé pour offrir un support JPEG XR pour des images de haute fidélité.

Le système d’impression prend diverses décisions basées sur les informations DriverRender dans le manifeste. Voici quelques exemples de ces décisions :

  • Tâches d’impression GDI envoyées aux pilotes v4

    Le Microsoft XPS Document Converter (MXDC) prend en entrée une tâche d’impression GDI et la convertit en un fichier de spool XPS. Le format de ce fichier de spool correspondra au format XPS préféré indiqué dans la section DriverRender du manifeste.

  • Conversion de format par l’API d’impression XPS

    L’API d’impression XPS interrogera les formats XPS pris en charge pour le pilote cible. Si le pilote prend en charge les deux formats, l’API d’impression XPS transmettra la tâche d’impression XPS au spooler TELLE QU’ELLE A ÉTÉ SOUMISE par l’application. Aucune conversion ne sera effectuée.

    Si le pilote cible ne prend en charge qu’un seul format ou l’autre, la tâche sera convertie au format correct avant d’être spoulée.

    Si aucun format XpsFormat n’est fourni dans le manifeste, le comportement par défaut sera uniquement MSXPS. Les entrées OpenXPS seront converties en MSXPS. Ce comportement offre la plus grande compatibilité rétroactive pour les pilotes.

  • Fichiers XPS envoyés directement au spooler

    Les fichiers XPS envoyés directement au spooler sont, par défaut, au format MSXPS. L’envoi direct d’OpenXPS au spooler n’est pas pris en charge. Cependant, les versions antérieures à .NET 4.5+ sérialisaient leur propre MSXPS et soumettaient la tâche directement au spooler. Ce comportement a été mis en œuvre avant l’introduction de l’API d’impression XPS (xpsprint.dll).

    Pour garantir la compatibilité rétroactive de ces applications .NET, le gestionnaire de la chaîne de filtres d’impression vérifiera le fichier de spool pour déterminer s’il a été reçu directement par le spooler. Si c’est le cas, il sera supposé être MSXPS. Le gestionnaire de la chaîne de filtres d’impression interrogera les formats XPS du pilote à ce stade. Si le pilote prend en charge MSXPS, aucune conversion ne sera effectuée. Si le pilote prend uniquement en charge OpenXPS, le gestionnaire de la chaîne de filtres d’impression effectuera une conversion du fichier. La conversion à ce stade de la tâche est coûteuse en termes de performance ; cependant, elle garantit que les anciennes applications .NET pourront imprimer vers les nouveaux pilotes v4 OpenXPS.

Manifeste du pilote : section FileSave. La section FileSave du manifeste du pilote d’impression v4 fournit des extensions pour la boîte de dialogue File Save utilisée par le port PORTPROMPT:. (PORTPROMPT: doit être utilisé à la place de FILE: dans Windows 8.1, car PORTPROMPT: permettra aux utilisateurs d’accéder à tous les emplacements de fichiers auxquels ils ont des droits, même lorsque l’application s’exécute en mode à droits limités). Les entrées de la section FileSave sont associées aux entrées de la section DriverRender par index.

Exemple :

[FileSave]
xps=0
oxps=0

[DriverRender]
XpsFormat=XPS,OpenXPS

Cela garantira que lorsque l’utilisateur envoie une tâche d’impression à ce pilote, et que le port est défini sur PORTPROMPT:, la boîte de dialogue File Save affichera XPS et OpenXPS comme options de type de fichier dans la boîte de dialogue, et appliquera respectivement .xps ou .oxps comme extension de fichier.

Pour des informations supplémentaires sur les autres options de la section FileSave du manifeste, veuillez consulter la section manifeste de pilote V4.

Prise en charge des applications pour l’impression OpenXPS

Spécification Open XML Paper

Manifeste du pilote v4