Vue d'ensemble de l'impression

Mise à jour : novembre 2007

Grâce à Microsoft .NET Framework, les développeurs d'applications utilisant Windows Presentation Foundation (WPF) disposent d'un nouvel ensemble riche d'API pour l'impression et la gestion du système d'impression. Avec Windows Vista, certaines de ces améliorations du système d'impression sont également disponibles pour les développeurs qui créent des applications Windows Forms et à ceux utilisant du code non managé. Le nouveau format de fichier XML Paper Specification (XPS) et le chemin d'accès d'impression XPS sont au cœur de cette nouvelle fonctionnalité.

Cette rubrique contient les sections suivantes.

  • À propos de XPS

  • Chemin d'accès d'impression XPS

  • Chemin d'accès d'impression GDI

  • Modèle de pilote XPSDrv (XPSDrv Driver Model)

  • Rubriques connexes

À propos de XPS

XPS est un format de document électronique, un format de fichier de mise en attente et un langage de description de page. C'est un format de document ouvert qui utilise XML, OPC (Open Packaging Conventions) et d'autres normes de l'industrie pour créer des documents multiplateformes. XPS simplifie le processus par lequel les 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 (en anglais).

Plusieurs techniques pour imprimer du contenu de base XPS en utilisant WPF sont illustrées dans l'exemple Impression d'un document XPS et dans Comment : imprimer des fichiers XPS par programme. Vous trouverez des informations utiles sur ces exemples pendant l'examen du contenu de cette rubrique. (Les développeurs de code non managé doivent consulter l'aide de la fonction Microsoft XPS Document Converter printer escape. Les développeurs de Windows Forms doivent utiliser l'API dans l'espace de noms System.Drawing.Printing qui ne prend pas en charge le chemin d'accès d'impression XPS entier, mais prend en charge un chemin d'accès d'impression hybride GDI-XPS. Consultez Architecture du chemin d'accès d'impression ci-dessous.)

Chemin d'accès d'impression XPS

Le chemin d'accès d'impression XML Paper Specification (XPS) 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 du 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'accès d'impression conserve le format XPS depuis la publication de l'application jusqu'au traitement final dans le pilote d'impression ou le périphérique.

Le chemin d'accès d'impression XPS s'appuie sur le modèle de pilote d'imprimante XPS (XPSDrv), qui apporte plusieurs avantages pour les développeurs tels que l'impression WYSIWYG ("What You See Is What You Get, "tel écrit, tel écran"), une meilleure prise en charge de la couleur et une performance d'impression considérablement améliorée. (Pour plus d'informations sur XPSDrv, consultez le Kit de développement des pilotes Windows (en anglais).)

Le fonctionnement du spouleur d'impression pour les documents XPS est identique pour l'essentiel, à celui des versions antérieures de Windows. Toutefois, il a été amélioré pour prendre en charge le chemin d'accès d'impression XPS en plus de chemin d'accès d'impression GDI existant. Le nouveau chemin d'accès d'impression utilise un fichier en attente XPS en mode natif. Bien que les pilotes d'imprimante en mode utilisateur écrits pour les versions antérieures de Windows continueront de fonctionner, un pilote d'imprimante XPS (XPSDrv) est requis pour pouvoir utiliser le chemin d'accès d'impression XPS.

Les avantages du chemin d'accès d'impression XPS sont significatifs et incluent :

  • La prise en charge de l'impression WYSIWYG.

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

  • Une performance d'impression améliorée pour les applications .NET Framework et Win32.

  • Un format XPS aux normes de l'industrie.

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 fournie pour la personnalisation de l'interface utilisateur (UI) (ou pas d'interface utilisateur du tout), les fonctions d'impression synchrone et asynchrone de même que les fonctions d'impression par lots. Les deux options fournissent une prise en charge de l'impression en mode confiance totale ou partielle.

XPS a été conçu pour davantage d'extensibilité. En utilisant l'infrastructure d'extensibilité, des fonctionnalités et des fonctions peuvent être ajoutées à 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 de fonctionnalités de périphérique. (Consultez PrintTicket et PrintCapabilities ci-dessous.)

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

Architecture du chemin d'accès d'impression

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

Pour activer l'utilisation des imprimantes via XPSDrv par les applications Win32 et Windows Forms, le pilote d'imprimante XPS (XPSDrv) prend en charge la conversion du GDI au format XPS. Le modèle XPSDrv fournit également un convertisseur pour XPS au format GDI pour que les applications Win32 puissent imprimer des documents XPS. Pour les applications WPF, la conversion de XPS au format GDI s'effectue 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 n'a pas de pilote XPSDrv. (Les applications Windows Forms ne peuvent pas imprimer de 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

Impression XPS de base

WPF définit à la fois une API de base et avancée. Pour les applications qui ne requièrent pas de personnalisation étendue de l'impression ou d'accès au jeu de fonctionnalité XPS complet, la prise en charge de l'impression de base est disponible. La prise en charge de l'impression de base est exposée via un contrôle de la boîte de dialogue d'impression qui requiert 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é.

PrintDialog

Le contrôle System.Windows.Controls.PrintDialog fournit 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.

Impression XPS avancée

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

PrintTicket et PrintCapabilities

Les classes PrintTicket et PrintCapabilities constituent la fondation des fonctionnalités XPS avancées. Les deux types d'objets sont des structures au format XML de fonctionnalités orientées impression telles que le classement, l'impression recto-verso, l'agrafage, etc. Ces structures sont définies par le Schéma d'impression (en anglais). 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 fonctions prises en charge par une imprimante. De même, des fonctionnalités non prises en charge peuvent être évitées.

L'exemple suivant montre comment interroger les 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()

Pour obtenir l'exemple complet, consultez Création d'un document XPS, exemple.

PrintServer et PrintQueue

La classe PrintServer représente un serveur d'impression de 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 la 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 accéder à son PrintQueue par défaut à l'aide de 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()

Pour obtenir l'exemple complet, consultez Impression d'un document XPS.

XpsDocumentWriter

Un XpsDocumentWriter, avec ses nombreuses méthodes Write et WriteAsync est utilisé pour écrire des documents XPS dans un PrintQueue. Par exemple, la méthode Write(FixedPage, PrintTicket) est utilisée de façon synchrone pour sortir un document XPS et un PrintTicket. La méthode WriteAsync(FixedDocument, PrintTicket) est utilisée de façon asynchrone pour sortir un document XPS et un PrintTicket.

L'exemple suivant montre comment créer un XpsDocumentWriter à l'aide de 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()

Pour obtenir l'exemple complet, consultez Impression d'un document XPS.

Les méthodes AddJob vous permettent également d'imprimer. Pour plus d'informations, consultez Comment : imprimer des fichiers XPS par programme.

Chemin d'accès d'impression GDI

Bien que les applications WPF prennent en charge en mode natif le chemin d'accès d'impression XPS, les applications Win32 et Windows Forms peuvent également tirer parti de quelques fonctionnalités de XPS. Le pilote d'imprimante XPS (XPSDrv) peut convertir la sortie GDI au format XPS. Pour les scénarios avancés, la conversion personnalisée du contenu est prise en charge à l'aide de Microsoft XPS Document Converter printer escape. De même, les applications WPF peuvent aussi sortir vers le chemin d'accès d'impression GDI en appelant l'une des méthodes Write ou WriteAsync de la classe XpsDocumentWriter et en désignant une imprimante qui n'est pas une imprimante XpsDrv comme file d'attente à l'impression cible.

Pour les applications qui ne requièrent pas de fonctionnalités ou de prise en charge XPS, le chemin d'accès d'impression GDI actuel reste inchangé.

Modèle de pilote XPSDrv (XPSDrv Driver Model)

Le chemin d'accès d'impression XPS améliore l'efficacité du spouleur en utilisant XPS comme format de spoule d'impression natif lors de l'impression vers une imprimante ou un pilote compatible XPS. Le processus de mise en file d'attente simplifié élimine le besoin de générer un fichier d'attente intermédiaire, tel qu'un fichier de données EMF avant que le document ne soit mis en file d'attente. Grâce à des tailles de fichier en attente plus petites, le chemin d'accès d'impression XPS peut réduire le trafic réseau et améliorer la performance d'impression.

EMF est un format fermé qui représente la sortie d'application comme une série d'appels dans GDI pour le rendu des services. Contrairement à EMF, le format de spoule XPS représente le document réel sans nécessiter d'interprétation supplémentaire lors de la sortie vers un pilote d'imprimante au format XPS (XPSDrv). Les pilotes peuvent fonctionner directement sur les données au format concerné. Cette fonction élimine les données et les conversions d'espaces de couleurs requises lorsque vous utilisez des fichiers EMF et des pilotes d'imprimante au format GDI.

Les tailles du fichier en attente sont réduites en général lorsque 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 qui est très complexe, superposé en plusieurs couches ou écrit d'une façon inefficace 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 GDI mis en attente 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 mis en attente est exécutée via plusieurs mécanismes :

  • Création d'un sous-ensemble de police. Seuls les caractères utilisés à l'intérieur du 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 la transparence et du dégradé évitent 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.

Voir aussi

Tâches

Impression d'un document XPS

Concepts

Documents dans Windows Presentation Foundation

Sérialisation et stockage de documents

Référence

PrintDialog

XpsDocumentWriter

XpsDocument

PrintTicket

PrintCapabilities

PrintServer

PrintQueue

Microsoft XPS Document Converter printer escape

Autres ressources

Rubriques Comment relatives à l'impression

Schéma d'impression

XPS

Impression et spouleur d'impression