StartXpsPrintJob, fonction (xpsprint.h)

[StartXpsPrintJob n’est pas pris en charge et peut être modifié ou indisponible à l’avenir. ]

Commence à imprimer un flux de documents XPS sur une imprimante.

Syntaxe

HRESULT StartXpsPrintJob(
  [in]  LPCWSTR            printerName,
  [in]  LPCWSTR            jobName,
  [in]  LPCWSTR            outputFileName,
  [in]  HANDLE             progressEvent,
  [in]  HANDLE             completionEvent,
  [in]  UINT8              *printablePagesOn,
  [in]  UINT32             printablePagesOnCount,
  [out] IXpsPrintJob       **xpsPrintJob,
  [out] IXpsPrintJobStream **documentStream,
  [out] IXpsPrintJobStream **printTicketStream
);

Paramètres

[in] printerName

Nom de l’imprimante à laquelle ce travail sera associé.

[in] jobName

Nom de travail spécifié par l’utilisateur à associer à ce travail. Si le travail ne nécessite pas de nom distinct spécifié par l’utilisateur, ce paramètre peut être défini sur NULL.

[in] outputFileName

Nom de fichier du fichier ou du port vers lequel la sortie de ce travail doit être redirigée. Si vous définissez cette valeur, la sortie du travail d’impression est dirigée vers le fichier ou le port spécifié. Pour envoyer le travail d’impression à l’imprimante spécifiée par printerName, ce paramètre doit avoir la valeur NULL.

[in] progressEvent

Un handle d’événement qui est signalé lorsque les modifications de travail d’impression suivantes se produisent :

  • Un ID de travail est affecté au travail d’impression
  • L’impression d’une page est terminée
  • L’impression d’un document est terminée
  • Le travail d’impression a été annulé ou s’est terminé en raison d’une erreur
Note Cet événement n’est signalé qu’après que l’application a commencé à envoyer des données au travail d’impression.
 

L’API d’impression XPS ne réinitialise pas cet événement, c’est-à-dire la responsabilité de l’appelant.

Si aucune notification de progression n’est requise, ce paramètre peut être défini sur NULL.

[in] completionEvent

Handle d’événement qui est signalé à la fin de la tâche d’impression. Cet événement est garanti pour être signalé exactement une fois par appel StartXpsPrintJob . L’API d’impression XPS ne réinitialise pas cet événement, c’est-à-dire la responsabilité de l’appelant.

Si aucune notification d’achèvement n’est requise, ce paramètre peut être défini sur NULL.

[in] printablePagesOn

Le paramètre fait référence à un tableau UINT8 dont les éléments spécifient un sous-ensemble des pages d’un document à imprimer. Comme indiqué dans le tableau suivant, la valeur de chaque élément indique si la page doit être imprimée.

Valeur de l’élément array Signification
0
N’imprimez pas la page.
Valeur autre que zéro
Imprimez la page.
 

Les événements de progression sont signalés uniquement pour les pages qui sont désignées pour l’impression.

Les éléments du tableau représentent toutes les pages qui sont désignées pour l’impression, dans tous les documents du package XPS. Par exemple, si le package contient deux documents de trois pages chacun, le tableau présenté dans le tableau suivant désigne l’impression des pages 0 et 2 à partir du document 1 et des pages 0 et 2 du document 2.

Index d’élément Valeur de l’élément Imprimer? Numéro du document Nombre de pages
5 1 Oui 2 2
4 0 Non 2 1
3 1 Oui 2 0
2 1 Oui 1 2
1 0 Non 1 1
0 1 Oui 1 0
 

Si printablePagesOn a la valeur NULL, toutes les pages du package seront imprimées.

Si printablePagesOn contient plus d’éléments qu’il n’y a de pages dans le package, les éléments superflus sont ignorés.

Si le tableau contient moins d’éléments qu’il n’y a de pages dans le document, la valeur du dernier élément de tableau du tableau est appliquée aux pages restantes. Cette règle facilite la spécification d’une plage ouverte ou qui n’affiche que quelques pages d’un document volumineux.

[in] printablePagesOnCount

Nombre d’éléments dans le tableau référencé par printablePagesOn. Si printablePagesOn a la valeur NULL, ce paramètre est ignoré.

[out] xpsPrintJob

Pointeur vers l’interface IXpsPrintJob qui représente le travail d’impression créé par StartXpsPrintJob. Pour obtenir le status du travail d’impression ou l’annuler, utilisez l’interface IXpsPrintJob. Si un IXpsPrintJob n’est pas requis, ce paramètre peut être défini sur NULL.

[out] documentStream

Pointeur vers l’interface IXpsPrintJobStream dans laquelle l’appelant écrit le document XPS à imprimer par ce travail d’impression.

[out] printTicketStream

Pointeur vers l’interface IXpsPrintJobStream utilisée par l’appelant pour écrire le ticket d’impression au niveau du travail qui sera associé à ce travail. Si ce paramètre a la valeur NULL, les tickets d’impression (le cas échéant) du document XPS écrit dans documentStream seront utilisés.

Valeur retournée

Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.

Code de retour Description
S_OK
S_OK
E_POINTER
printerName ou documentStream a la valeur NULL.
E_OUTOFMEMORY
Mémoire insuffisante pour créer un objet IXpsPrintJob .

Remarques

StartXpsPrintJob est une fonction asynchrone, qui peut être retournée avant que le spouleur d’impression crée ou démarre un travail d’impression.

Les interfaces retournées dans xpsPrintJob, documentStream et printTicketStream ne doivent pas être utilisées tant que StartXpsPrintJob n’a pas été retourné avec succès.

Une fois que l’appelant a commencé à envoyer des données, il doit surveiller les événements de progression qui sont signalés à l’événement passé dans progressEvent. Lorsque l’événement est signalé, l’appelant doit appeler IXpsPrintJob ::GetJobStatus pour obtenir le status actuel du travail d’impression.

Lorsque le travail d’impression se termine, qu’il réussisse ou non, l’événement passé dans completionEvent est signalé une fois et une seule fois. Pour éviter la perte de données, l’appelant doit surveiller cet événement et le thread ou l’application de l’appelant ne doit pas être arrêté tant que l’événement n’a pas été signalé.

Les états de travail ne sont ni stockés ni mis en file d’attente par le spouleur d’impression. Étant donné que le traitement du travail n’attend pas que le status soit lu après le signal des événements, l’appelant peut manquer certaines modifications d’état, en fonction du délai entre le moment où l’application a reçu la notification de modification et l’heure à laquelle elle a appelé IXpsPrintJob ::GetJobStatus. Pour recevoir des notifications ultérieures, l’application doit réinitialiser l’événement de progression après avoir reçu la notification.

Si un appel à StartXpsPrintJob échoue, le travail status est mis à jour, les événements d’achèvement et de progression sont signalés et un code d’erreur est retourné. Pour obtenir la status du travail d’impression ayant échoué, appelez IXpsPrintJob ::GetJobStatus.

StartXpsPrintJob appelle DuplicateHandle sur completionEvent et progressEvent pour s’assurer qu’ils restent valides pendant toute la durée de vie du travail. Étant donné que le spouleur d’impression utilise un handle en double pour les événements, il est possible pour l’appelant de fermer ces handles à tout moment sans affecter l’exécution du travail. Toutefois, la procédure recommandée consiste à ce que l’appelant ferme ces handles uniquement après que l’événement completionEvent a été signalé et observé par l’appelant.

Les interfaces IXpsPrintJobStream retournées dans documentStream et printTicketStream sont des flux en écriture seule qui ne permettent pas la recherche, mais qui peuvent être fermés. L’appelant écrit le document XPS et imprime le contenu du ticket dans ces flux, puis appelle Close une fois toutes les données écrites. Les appels à la méthode Write des flux sont thread-safe ; Toutefois, si de tels appels sont effectués à partir de threads différents, il n’est pas garanti qu’ils soient validés dans le flux dans l’ordre attendu.

Note Lors de l’impression dans un fichier, l’application est chargée de fournir la valeur qui sera passée dans le paramètre outputFileName pour les opérations d’impression à fichier. Pour imprimer sur une imprimante qui utilise un pilote qui affiche le port FILE :, l’appelant doit récupérer le nom de fichier de l’utilisateur en affichant la boîte de dialogue fichier commune.
 

Configuration requise

   
Client minimal pris en charge Windows 7 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 R2 [applications de bureau uniquement]
Plateforme cible Windows
En-tête xpsprint.h
Bibliothèque XpsPrint.lib
DLL XpsPrint.dll

Voir aussi

Documents

StartXpsPrintJob1

XML Paper Specification