Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais

Vue d'ensemble de l'impression

 

Date de publication : juin 2016

Avec Microsoft .NET Framework, les développeurs d'applications utilisant Windows Presentation Foundation (WPF) disposent d'un nouvel ensemble étoffé d'API d'impression et de gestion du système d'impression. Avec Windows Vista, certaines de ces améliorations du système d'impression sont aussi accessibles aux développeurs créant des applications Windows Forms et à ceux utilisant du code non managé. Le nouveau format de fichier XPS (XML Paper Specification) et le chemin d'impression XPS sont au cœur de cette nouvelle fonctionnalité.

Cette rubrique contient les sections suivantes.

XPS est un format de document électronique, un format de fichier de mise en file d'attente (spool) et un langage de description de page. Il s'agit d'un format de document ouvert qui utilise XML, OPC (Open Packaging Conventions) et d'autres normes du secteur pour créer des documents multiplateformes. XPS simplifie le processus par lequel documents numériques sont créés, partagés, imprimés, affichés et archivés. Pour plus d'informations sur XPS, consultez le site web XPS.

Plusieurs techniques permettant d'imprimer du contenu XPS en utilisant WPF sont décrites dans Comment : imprimer des fichiers XPS par programmation. Il peut vous être utile de vous reporter à ces exemples pendant l'examen du contenu de cette rubrique. (Les développeurs de code non managé doivent consulter l'aide sur l'échappement d'imprimante Microsoft XPS Document Converter. Les développeurs Windows Forms doivent utiliser l'API de l'espace de noms System.Drawing.Printing qui ne prend pas en charge le chemin d'impression XPS complet, mais prend en charge un chemin d'impression hybride de GDI vers XPS. Consultez Architecture du chemin d'impression ci-dessous.)

Le chemin d'impression XPS (XML Paper Specification) est une nouvelle fonctionnalité Windows qui redéfinit la façon dont l'impression est gérée dans les applications Windows. Étant donné que XPS peut remplacer un langage de présentation de document (tel que RTF), un format de spouleur d'impression (tel que WMF) et un langage de description de page (tel que PCL ou Postscript), le nouveau chemin d'impression conserve le format XPS de la publication de l'application jusqu'au traitement final dans le pilote ou le périphérique d'impression.

Le chemin d'impression XPS repose sur le modèle de pilote d'imprimante XPS (XPSDrv), qui offre aux développeurs plusieurs avantages tels que l'impression WYSIWYG (tel écrit, tel écran), une meilleure prise en charge de la couleur et des performances d'impression nettement améliorées. (Pour plus d'informations sur XPSDrv, consultez Kit de développement de pilotes Windows.)

Le fonctionnement du spouleur d'impression pour les documents XPS est pour l'essentiel le même que dans les versions précédentes de Windows. Cependant, il a été amélioré pour prendre en charge le chemin d'impression XPS, en plus du chemin d'impression existante GDI. Le nouveau chemin d'impression utilise un fichier spool XPS en mode natif. Bien que les pilotes d'imprimantes en mode utilisateur écrits pour les versions antérieures de Windows continuent de fonctionner, un pilote d'imprimante XPS (XPSDrv) est nécessaire pour pouvoir utiliser le chemin d'impression XPS.

Le chemin d'impression XPS présente des avantages significatifs, à savoir :

  • prise en charge de l'impression WYSIWYG ;

  • prise en charge native de profils de couleurs avancés, qui incluent 32 bits par canal (bpc), CMJN, les couleurs nommées, les encres n et prise en charge native de la transparence et des dégradés ;

  • performances d'impression améliorées pour les applications .NET Framework et Win32 ;

  • format XPS conforme aux normes du secteur.

Pour les scénarios d'impression de base, une API simple et intuitive est disponible avec un point d'entrée unique pour l'interface utilisateur, la configuration et la soumission de travaux. Pour les scénarios avancés, une prise en charge supplémentaire est ajoutée pour la personnalisation de l'interface utilisateur (UI) (ou pas d'Interface utilisateur du tout), l'impression synchrone ou asynchrone et les fonctions d'impression par lots. Les deux options assurent une prise en charge de l'impression en mode confiance totale ou partielle.

XPS a été conçu dans l'optique d'offrir une extensibilité. Grâce à l'infrastructure d'extensibilité, il est possible d'ajouter des fonctionnalités et des fonctions à XPS de façon modulaire. Les fonctionnalités d'extensibilité sont les suivantes :

  • Schéma d'impression. Le schéma public est mis à jour régulièrement et permet l'extension rapide des fonctions des périphériques. (Consultez PrintTicket et PrintCapabilities ci-dessous.)

  • Pipeline de filtres extensible. Le pipeline de filtres du pilote d'imprimante XPS (XPSDrv) a été conçu pour permettre l'impression directe et évolutive de documents XPS. (Recherchez « XPSDrv » dans Kit de développement de pilotes Windows.)

Bien que les applications Win32 et .NET Framework prennent en charge XPS, les applications Win32 et Windows Forms utilisent une conversion GDI à XPS pour créer du contenu au format XPS pour le pilote d'imprimante XPS (XPSDrv). Ces applications ne sont pas tenues d'utiliser le chemin d'impression XPS et peuvent continuer d'utiliser l'impression métafichier amélioré (EMF) Cependant, la plupart des fonctionnalités et améliorations de XPS sont disponibles uniquement pour les applications qui ciblent le chemin d'impression XPS.

Pour permettre aux applications Win32 et Windows Forms d'utiliser des imprimantes XPSDrv, le pilote d'imprimante XPS (XPSDrv) prend en charge la conversion du format GDI au format XPS. Le modèle XPSDrv fournit également un convertisseur du format XPS au format GDI pour permettre aux applications Win32 d'imprimer des documents XPS. Pour les applications WPF, la conversion du format XPS au format GDI est assurée automatiquement par les méthodes Write et WriteAsync de la classe XpsDocumentWriter chaque fois que la file d'attente à l'impression cible de l'opération d'écriture ne dispose pas d'un pilote XPSDrv (les applications Windows Forms ne peuvent pas imprimer les documents XPS).

L'illustration suivante représente le sous-système d'impression et définit les parties fournies par Microsoft et celles définies par les fournisseurs de matériel et de logiciels.

Système d'impression XPS

WPF définit une API de base et avancée. Pour les applications qui n'exigent pas une personnalisation étendue de l'impression ou un accès à l'ensemble complet de fonctionnalités XPS, la prise en charge de l'impression de base est disponible. La prise en charge de l'impression de base est exposé via un contrôle de boîte de dialogue d'impression qui nécessite une configuration minime et présente une Interface utilisateur familière. De nombreuses fonctionnalités XPS sont disponibles en utilisant ce modèle d'impression simplifié.

Le contrôle System.Windows.Controls.PrintDialog offre un point d'entrée unique pour l'Interface utilisateur, la configuration et la soumission de travaux XPS. Pour plus d'informations sur l'instanciation et l'utilisation du contrôle, consultez Comment : appeler une boîte de dialogue Imprimer.

Pour accéder à l'ensemble complet de fonctionnalités XPS, il convient d'utiliser l'API d'impression avancée. Plusieurs API pertinentes sont décrites plus en détail ci-dessous. Pour obtenir une liste complète des API du chemin d'impression XPS, consultez les références des espaces de noms  System.Windows.Xps et System.Printing.

Les classes PrintTicket et PrintCapabilities constituent la fondation des fonctionnalités XPS avancées. Ces deux types d'objets sont des structures XML de fonctionnalités d'impression telles que le classement, l'impression recto verso, l'agrafage, etc. Ces structures sont définies par le schéma d'impression. PrintTicket indique à une imprimante comment traiter un travail d'impression. La classe PrintCapabilities définit les fonctionnalités d'une imprimante. En interrogeant les fonctionnalités d'une imprimante, un PrintTicket peut être créé pour tirer pleinement parti des fonctionnalités prises en charge de l'imprimante. De la même manière, les fonctionnalités non prises en charge peuvent être évitées.

L'exemple suivant montre comment interroger l'élément PrintCapabilities d'une imprimante et créer un PrintTicket à l'aide de code.

// ---------------------- GetPrintTicketFromPrinter -----------------------
/// <summary>
///   Returns a PrintTicket based on the current default printer.</summary>
/// <returns>
///   A PrintTicket for the current local default printer.</returns>
private PrintTicket GetPrintTicketFromPrinter()
{
    PrintQueue printQueue = null;

    LocalPrintServer localPrintServer = new LocalPrintServer();

    // Retrieving collection of local printer on user machine
    PrintQueueCollection localPrinterCollection =
        localPrintServer.GetPrintQueues();

    System.Collections.IEnumerator localPrinterEnumerator =
        localPrinterCollection.GetEnumerator();

    if (localPrinterEnumerator.MoveNext())
    {
        // Get PrintQueue from first available printer
        printQueue = (PrintQueue)localPrinterEnumerator.Current;
    }
    else
    {
        // No printer exist, return null PrintTicket
        return null;
    }

    // Get default PrintTicket from printer
    PrintTicket printTicket = printQueue.DefaultPrintTicket;

    PrintCapabilities printCapabilites = printQueue.GetPrintCapabilities();

    // Modify PrintTicket
    if (printCapabilites.CollationCapability.Contains(Collation.Collated))
    {
        printTicket.Collation = Collation.Collated;
    }

    if ( printCapabilites.DuplexingCapability.Contains(
            Duplexing.TwoSidedLongEdge) )
    {
        printTicket.Duplexing = Duplexing.TwoSidedLongEdge;
    }

    if (printCapabilites.StaplingCapability.Contains(Stapling.StapleDualLeft))
    {
        printTicket.Stapling = Stapling.StapleDualLeft;
    }

    return printTicket;
}// end:GetPrintTicketFromPrinter()

La classe PrintServer représente un serveur d'impression réseau et la classe PrintQueue représente une imprimante et la file d'attente des travaux de sortie qui lui est associée. Ensemble, ces API permettent une gestion avancée des travaux d'impression d'un serveur. Un PrintServer ou l'une de ses classes dérivées est utilisé pour gérer un PrintQueue. La méthode AddJob est utilisée pour insérer un nouveau travail d'impression dans la file d'attente.

L'exemple suivant montre comment créer un LocalPrintServer et comment accéder au PrintQueue par défaut associé avec du code.

// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
///   Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
///   An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
    // Create a local print server
    LocalPrintServer ps = new LocalPrintServer();

    // Get the default print queue
    PrintQueue pq = ps.DefaultPrintQueue;

    // Get an XpsDocumentWriter for the default print queue
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
    return xpsdw;
}// end:GetPrintXpsDocumentWriter()

Un XpsDocumentWriter, avec ses nombreuses méthodes Write et WriteAsync, permet d'écrire des documents XPS dans un PrintQueue. Par exemple, la méthode Write(FixedPage, PrintTicket) permet de sortir un document XPS et un PrintTicket de manière synchrone. La méthode WriteAsync(FixedDocument, PrintTicket) permet de sortir un document XPS et un PrintTicket de manière asynchrone.

L'exemple suivant montre comment créer un XpsDocumentWriter avec du code.

// -------------------- GetPrintXpsDocumentWriter() -------------------
/// <summary>
///   Returns an XpsDocumentWriter for the default print queue.</summary>
/// <returns>
///   An XpsDocumentWriter for the default print queue.</returns>
private XpsDocumentWriter GetPrintXpsDocumentWriter()
{
    // Create a local print server
    LocalPrintServer ps = new LocalPrintServer();

    // Get the default print queue
    PrintQueue pq = ps.DefaultPrintQueue;

    // Get an XpsDocumentWriter for the default print queue
    XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
    return xpsdw;
}// end:GetPrintXpsDocumentWriter()

Le méthodes AddJob permettent aussi d'imprimer. Consultez Comment : imprimer des fichiers XPS par programmation pour plus d'informations.

Bien que les applications WPF prennent en charge les chemins d'impression XPS en mode natif, les applications Win32 et Windows Forms peuvent aussi tirer parti de certaines fonctionnalités XPS. Le pilote d'imprimante XPS (XPSDrv) peut convertir une sortie GDI au format XPS. Pour les scénarios avancés, la conversion personnalisée du contenu est pris en charge en utilisant l'échappement d'imprimante Microsoft XPS Document Converter. De même, les applications WPF peuvent aussi effectuer une sortie vers le chemin d'impression GDI en appelant l'une des méthodes Write ou WriteAsync de la classe XpsDocumentWriter et en désignant une imprimante non-XpsDrv comme file d'attente à l'impression cible.

Pour les applications qui n'exigent pas la fonctionnalité ou la prise en charge XPS, le chemin d'impression GDI actif reste inchangé.

  • Pour obtenir des documents de référence supplémentaires sur le chemin d'impression GDI et les différentes options de conversion XPS, consultez Échappement d'imprimante Microsoft XPS Document Converter et « XPSDrv » dans Kit de développement de pilotes Windows.

Le chemin d'impression XPS améliore l'efficacité du spouleur en utilisant XPS comme format spool d'impression natif lors de l'impression vers une imprimante ou un pilote XPS. Le processus de mise en file d'attente simplifié dispense de la nécessité de générer un fichier spool intermédiaire, tel qu'un fichier de données EMF avant que le document soit mis en file d'attente. À la faveur de fichiers spool de plus petite taille, le chemin d'impression XPS peut réduire le trafic réseau et améliorer les performances d'impression.

EMF est un format fermé qui représente la sortie de l'application sous la forme d'une série d'appels dans GDI pour le rendu des services. Contrairement à EMF, le format de fichier spool XPS représente le document réel sans nécessiter d'interprétation supplémentaire lors de sortie vers un pilote d'imprimante XPS (XPSDrv). Les pilotes peuvent fonctionner directement sur les données dans le format concerné. Ainsi, il n'est plus utile de procéder aux conversions de données et d'espaces de couleurs qu'impose l'utilisation des fichiers EMF et des pilotes d'imprimante GDI.

Les tailles de fichier de mise en attente sont généralement réduites quand vous utilisez des documents XPS qui ciblent un pilote d'imprimante XPS (XPSDrv) par rapport à leurs équivalents EMF, mais il existe des exceptions :

  • Un graphique vectoriel très complexe, superposé en plusieurs couches ou mal écrit peut être plus grand qu'une version bitmap du même graphique.

  • À des fins d'affichage sur écran, les fichiers XPS incorporent des polices de périphérique, ainsi que des polices basées sur ordinateur, alors que les fichiers spool GDI n'incorporent pas de polices de périphérique. Mais les deux types de polices sont des sous-ensembles (voir ci-dessous) et les pilotes d'imprimante peuvent supprimer les polices de périphérique avant de transmettre le fichier à l'imprimante.

La réduction de la taille des fichiers spool est exécutée via plusieurs mécanismes :

  • Création de sous-ensembles de polices : seuls les caractères utilisés dans le document réel sont stockés dans le fichier XPS.

  • Prise en charge avancée des graphiques : la prise en charge native des primitives de transparence et de dégradé évite la rastérisation du contenu dans le document XPS.

  • Identification des ressources communes : les ressources utilisées plusieurs fois (comme une image qui représente un logo d'entreprise) sont traitées comme des ressources partagées et sont chargées une seule fois.

  • Compression ZIP : tous les documents XPS utilisent la compression ZIP.

Afficher: