Partager via


Filtres XPS standard

Important

Nous vous recommandons d’utiliser le pilote de classe de boîte de réception IPP 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’imprimante.

Pour plus d’informations, consultez le Guide de conception de l’application de support d’impression.

Windows fournit deux filtres XPS (standard) pour prendre en charge la conversion intégrée de XPS en PCL6 et PostScript niveau 3.

Les filtres fournis par Windows sont disponibles pour les pilotes de classe d’impression et les pilotes d’impression v4 spécifiques au modèle. Ces filtres XPS peuvent être combinés avec des filtres de fonctionnalités IHV ainsi qu’avec des filtres de post-traitement IHV, si nécessaire, afin de garantir la compatibilité avec les implémentations de microprogramme existantes.

Les filtres XPS fournis par Windows ne sont pas redistribuables et ne sont pas disponibles pour les pilotes d’impression v3.

Fichier manifeste

Pour utiliser les filtres XPS fournis par Windows, le fichier manifeste du pilote v4 doit utiliser la directive RequiredFiles sous la section DriverConfig pour spécifier les filtres. Voici les noms des filtres :

MSxpsPCL6.dll. Fournit la conversion de XPS en PCL6. MSxpsPS.dll. Fournit la conversion de XPS en PostScript niveau 3. Aucune mise à jour INF n’est requise pour utiliser l’un de ces filtres, et la redistribution n’est pas prise en charge. Nous recommandons aux utilisateurs de cesser d’utiliser ces filtres XPS.

Pour configurer le pipeline de filtre d’impression afin qu’il utilise ces filtres, vous devez créer des fichiers de configuration comme indiqué dans les exemples suivants.

Exemple de fichier de configuration qui spécifie la conversion en PCL6.

<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter dll="MSxpsPCL6.dll" clsid="{3821E518-33AF-4d17-92B3-28EB410D46B6}" name="Microsoft XPS to PCL6">
    <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream" />
    <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream" />
  </Filter>  
</Filters>

Exemple de fichier de configuration qui spécifie la conversion en PostScript.

<?xml version="1.0" encoding="utf-8"?>
<Filters>
  <Filter dll="MSxpsPS.dll" clsid="{8636D90A-5E03-4d62-9269-E06493C57473}" name="Microsoft XPS to PS">
    <Input guid="{4d47a67c-66cc-4430-850e-daf466fe5bc4}" comment="IID_IPrintReadStream" />
    <Output guid="{65bb7f1b-371e-4571-8ac7-912f510c1a38}" comment="IID_IPrintWriteStream" />
  </Filter>  
</Filters>

Fonctionnalités prises en charge

Les filtres XPS standard prennent en charge de nombreuses fonctionnalités courantes. Toutes les définitions de fonctionnalités utilisent le fichier GPD ou PPD pour le pilote. Le filtre MSxpsPCL6.dll nécessite l’utilisation d’un fichier GPD pour la configuration, et le filtre MSxpsPS.dll nécessite l’utilisation d’un fichier PPD pour la configuration. Sauf indication contraire, si une commande PDL personnalisée est spécifiée pour une fonctionnalité, elle est utilisée.

Si des chaînes d’injection existent sous une section particulière (spécifiée avec la commande *Order ), dans le cas de fichiers GPD, le filtre fait un certain nombre d’hypothèses sur le contenu de ces chaînes et évite d’envoyer des commandes par défaut. En effet, l’envoi de commandes par défaut dans ce cas peut entraîner des collisions de commandes. Par conséquent, le créateur d’un fichier GPD doit suivre ces instructions :

  • JOB_SETUP. #

    • Un en-tête de flux binaire PCL6 (par exemple : « )< SP>HP-PCL XL;1 ;< CR><LF> ») doit exister.

    • Un opérateur BeginSession doit exister, y compris tous les attributs requis.

    • Un opérateur OpenDataSource doit exister, y compris tous les attributs requis.

  • PAGE_SETUP. #

    • Un opérateur BeginPage doit exister, y compris tous les attributs requis.
  • PAGE_FINISH. #

    • Un opérateur EndPage doit exister.
  • JOB_FINISH. #

    • Un opérateur CloseDataSource doit exister.

    • Un opérateur EndSession doit exister.

    • Un opérateur EndPJLCommands doit exister.

Les filtres XPS Standard produisent des données PDL appropriées pour définir l’origine d’une page, en fonction des commandes *PrintableArea, *PrintableOrigin ou *ImageableArea. Et pour éviter un décalage supplémentaire par rapport à l’origine attendue, les fichiers GPD ne doivent pas spécifier de commandes =SetPageOrigin dans la définition de chaîne *Cmd pour leur format de papier.

Pour plus d’informations sur les fonctionnalités PrintTicket prises en charge par les filtres XPS standard, consultez Fonctionnalités printTicket prises en charge.

Récupération de PrintTicket dans les filtres de post-traitement

Dans le modèle de pilote v4 qui a été publié avec Windows 8, lorsque vous avez ajouté un filtre de post-traitement après l’un des filtres MSxps, vous deviez parfois également ajouter un filtre de prétraitement. L’ajout du filtre de prétraitement était nécessaire pour capturer le ticket d’impression au niveau du travail. Mais cette approche a essentiellement ajouté un filtre basé sur un modèle objet, avant l’un des filtres MSxps basés sur le flux, ce qui a entraîné la désérialisation, puis la sérialisation des données d’impression pour extraire simplement un PrintTicket.

Dans Windows 8.1, l’utilisateur par défaut PrintTicket est fusionné avec le PrintTicket au niveau du travail dans les filtres MSxps, puis le PrintTicket fusionné est ajouté au conteneur de propriétés du pipeline de filtre d’impression. Le PrintTicket fusionné est ajouté au conteneur de propriétés du pipeline de filtre d’impression de la même manière que l’objet User PrintTicket. La propriété est nommée comme suit :

#define XPS_FP_JOB_LEVEL_PRINTTICKET    "JobPrintTicket"

Pendant InitializeFilter, les filtres MTI ajoutent une implémentation de IPrintReadStreamFactory dans le conteneur de propriétés. L’une des méthodes de cette interface, GetStream, se bloque jusqu’à ce que le flux PrintTicket soit disponible. Cela permet de synchroniser l’accès à la propriété .

Important : si GetStream est appelé à partir d’InitializeFilter, cela entraînera un blocage.

Autres fonctionnalités

Dans le cas des fonctionnalités PrintTicket qui ne sont pas prises en charge par les filtres XPS standard, les filtres vérifient tous les membres PrintTicket pour voir s’ils sont référencés dans le GPD/PPD, puis spécifient les commandes à générer. Dans ce cas, les commandes spécifiées sont générées.

Les fonctionnalités GPD sont mappées dans l’ordre suivant :

  1. Une valeur PrintSchemaKeywordMap est spécifiée et correspond au nom de la fonctionnalité PrintTicket.

  2. L’attribut PrintSchemaPrivateNamespaceURI est spécifié et le nom de la fonctionnalité GPD correspond au nom de la fonctionnalité PrintTicket. La correspondance des noms de fonctionnalités n’est pas simple et suit un certain nombre de règles :

    1. Si la section *Ordre de la première option est PAGE_SETUP ou PAGE_FINISH, et que la fonctionnalité GPD ne commence pas par « Page », « Page » est ajouté au nom de la fonctionnalité GPD avant de tenter de faire correspondre.

    2. Si la section *Ordre de la première option est DOC_SETUP ou DOC_FINISH et que la fonctionnalité GPD ne commence pas par « Document », « Document » est ajouté au nom de la fonctionnalité GPD avant d’essayer de faire correspondre.

    3. Si la section *Ordre de la première option est JOB_SETUP ou JOB_FINISH, et que la fonctionnalité GPD ne commence pas par « Travail », « Travail » est ajouté au nom de la fonctionnalité GPD avant de tenter de faire correspondre.

    4. Tout caractère qui n’est pas [A-Z], [a-z], [0-9] ou '_' est remplacé par un caractère '_' avant de tenter de correspondre. Toutefois, si *NoPunctuationCharSubstitute ? l’attribut a la valeur TRUE. Le filtre ne remplace pas « . » ou « - » par un caractère « _ ».

Les fonctionnalités PPD sont mappées dans l’ordre suivant :

  1. Une valeur PrintSchemaKeywordMap est spécifiée et elle correspond au nom de la fonctionnalité PrintTicket.

  2. L’attribut PrintSchemaPrivateNamespaceURI est spécifié et le nom de la fonctionnalité PPD correspond au nom de la fonctionnalité PrintTicket. La correspondance des noms de fonctionnalités n’est pas simple et suit un certain nombre de règles :

    1. Si la section OrderDependency est ExitServer, Prolog ou JCLSetup et que le nom de la fonctionnalité PPD ne commence pas par « Job », « Job » est précédé du nom de la fonctionnalité PPD avant de tenter de faire correspondre.

    2. Si la section OrderDependency est DocumentSetup et que le nom de la fonctionnalité PPD ne commence pas par « Document », « Document » est ajouté au nom de la fonctionnalité PPD avant de tenter de faire correspondre.

    3. Si la section OrderDependency est AnySetup, le filtre effectue deux vérifications de correspondance :

      1. Si le nom de la fonctionnalité PPD ne commence pas par « Document », « Document » est ajouté au nom de la fonctionnalité PPD avant d’essayer de faire correspondre.

      2. Si aucune correspondance n’est trouvée ou si le nom de la fonctionnalité PPD ne commence pas par « Travail », « Travail » est ajouté au nom de la fonctionnalité PPD avant de tenter de faire correspondre.

    4. Si la section OrderDependency est PageSetup et que le nom de la fonctionnalité PPD ne commence pas par « Page », « Page » est ajouté au nom de la fonctionnalité PPD avant de tenter de faire correspondre.

    5. Tout caractère qui n’est pas [A-Z], [a-z], [0-9] ou '_' est remplacé par un caractère '_' avant de tenter de correspondre. Toutefois, si *MSNoPunctuationCharSubstitute ? Chaîne est définie sur TRUE, le filtre ne remplace pas « . » ou « - » par un caractère « _ ».

Les options GPD et PPD sont mappées dans l’ordre suivant :

  1. Une valeur PrintSchemaKeywordMap est spécifiée et elle correspond au nom de l’option PrintTicket.

  2. L’attribut PrintSchemaPrivateNamespaceURI est spécifié et le nom de l’option GPD/PPD correspond au nom de l’option PrintTicket. La correspondance des noms d’options n’est pas simple et suit un certain nombre de règles :

    1. Si le nom de l’option GPD/PPD commence par [0-9] ou '_', un caractère '_' est ajouté au nom de l’option GPD/PPD avant de tenter de faire correspondre. Toutefois, les règles supplémentaires suivantes s’appliquent :

      1. S’il s’agit d’une option GPD et de l’option *NoPunctuationCharSubstitute ? l’attribut est défini sur TRUE, puis le filtre n’ajoute pas « _ » avec un caractère « _ ».

      2. S’il s’agit d’une option PPD et de l’option *MSNoPunctuationCharSubstitute ? string a la valeur TRUE, puis le filtre n’ajoute pas '_' avec un caractère '_'.

    2. Tout caractère qui n’est pas [A-Z], [a-z], [0-9] ou '_' est remplacé par un caractère '_' avant de tenter de correspondre. Toutefois, les règles supplémentaires suivantes s’appliquent :

      1. S’il s’agit d’une option GPD et de l’option *NoPunctuationCharSubstitute ? l’attribut a la valeur TRUE. Le filtre ne remplace pas « . » ou « - » par un caractère « _ ».

      2. S’il s’agit d’une option PPD et de l’option *MSNoPunctuationCharSubstitute ? string a la valeur TRUE, puis le filtre ne remplace pas « . » ou « - » par un caractère « _ ».

Mappage de formulaire à plateau

Les filtres XPS vers PCL6 et XPS vers PS prennent en charge la table de mappage de formulaire à plateau. Si plusieurs bacs prennent en charge la taille de média sélectionnée (par exemple, une lettre), les filtres cassent la liaison comme suit :

  1. Si la barre d’état par défaut (comme spécifié dans le fichier GPD ou PPD) est configurée pour utiliser la taille de média spécifiée, la barre d’état par défaut est utilisée.

  2. Sinon, le filtre choisit la première barre d’état (de haut en bas, car elles ont été spécifiées dans le fichier GPD/PPD) configurée avec la taille de média spécifiée.

Suppression de page arrière supplémentaire

Par défaut, les filtres XPS vers PCL6 et XPS vers PS gèrent l’impression duplex de documents qui contiennent des tailles multimédias mixtes, des types de supports, des compartiments d’entrée ou de sortie, en insérant une page vide. Lorsque les filtres insèrent cette page vide, cela force l’appareil à imprimer la page suivante à l’avant d’un nouveau support. Pour les appareils qui ne nécessitent pas la sortie d’une page backside, ce comportement peut être supprimé en ajoutant les mots clés suivants au fichier GPD ou PPD du pilote.

Type de fichier Mot clé de suppression de page backside
GPD *SuppressExtraBacksidePages?: TRUE
PPD *MSSuppressExtraBacksidePages : True

Optimisation des commandes SetPageDevice

Le comportement par défaut d’un appareil PostScript qui utilise un pilote avec MSxpsPS.dll est qu’une commande SetPageDevice est émise pour chaque page, et cette commande indique l’ensemble complet des options spécifiées pour la page. Notez que certains appareils peuvent ne pas fonctionner correctement avec cette technique.

Toutefois, si votre appareil utilise MSxpsPS.dll et que le fichier PPD associé spécifie *MSOptimizeSetPageDevice : True, le comportement de l’appareil PostScript est le suivant : - Pour chaque page où une partie de la commande SetPageDevice a été modifiée depuis la page précédente, une nouvelle commande SetPageDevice est émise pour indiquer l’ensemble des options spécifiées pour la page. Toutefois, si aucune partie de la commande SetPageDevice n’a été modifiée depuis la page précédente, aucune commande SetPageDevice n’est émise pour la page.

Fonctionnalités PrintTicket prises en charge

Rendu du pilote d’imprimante V4