Partager via


Personnaliser l’interface utilisateur d’aperçu avant impression

Cette rubrique explique comment personnaliser les options et paramètres d’impression dans l’interface utilisateur d’aperçu avant impression. Pour plus d’informations sur l’impression, consultez Imprimer à partir de votre application.

Personnaliser les options d’impression

Par défaut, l’interface utilisateur d’aperçu avant impression affiche les options d’impression ColorMode, Copies et Orientation. En plus de celles-ci, il existe plusieurs autres options d’imprimante courantes que vous pouvez ajouter à l’interface utilisateur d’aperçu avant impression :

Ces options sont définies dans la classe StandardPrintTaskOptions . Vous pouvez ajouter ou supprimer des options dans la liste des options affichées dans l’interface utilisateur d’aperçu avant impression. Vous pouvez également modifier l’ordre dans lequel ils apparaissent et définir les paramètres par défaut affichés à l’utilisateur.

Toutefois, les modifications que vous apportez de cette façon affectent uniquement l’interface utilisateur d’aperçu avant impression. L’utilisateur peut toujours accéder à toutes les options que l’imprimante prend en charge en appuyant sur Plus de paramètres dans l’interface utilisateur d’aperçu avant impression.

Définir les options à afficher

Lorsque vous inscrivez votre application pour l’impression (voir Imprimer à partir de votre application), une partie de cette inscription inclut la définition du gestionnaire d’événements PrintTaskRequested . Le code permettant de personnaliser les options affichées dans l’interface utilisateur d’aperçu avant impression est ajouté au gestionnaire d’événements PrintTaskRequested.

Après avoir créé PrintTask dans le gestionnaire d’événements PrintTaskRequested, vous pouvez obtenir la liste DisplayedOptions, qui contient les éléments d’option affichés dans l’interface utilisateur d’aperçu avant impression. Vous pouvez modifier cette liste en insérant, en ajoutant, en supprimant ou en récommandant des options.

Remarque

Bien que votre application puisse spécifier les options d’impression à afficher, seules celles prises en charge par l’imprimante sélectionnée sont affichées dans l’interface utilisateur d’aperçu avant impression. L’interface utilisateur d’impression n’affiche pas les options que l’imprimante sélectionnée ne prend pas en charge.

private void PrintTask_Requested(PrintManager sender, PrintTaskRequestedEventArgs args)
{
    // Create the PrintTask.
    // Defines the title and delegate for PrintTaskSourceRequested.
    PrintTask printTask = args.Request.CreatePrintTask("WinUI 3 Printing example", PrintTaskSourceRequested);

    // Handle PrintTask.Completed to catch failed print jobs.
    printTask.Completed += PrintTask_Completed;

    DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Normal, () =>
    {
        InvokePrintingButton.IsEnabled = false;
    });

    // Customize options displayed in print preview UI.
    // Get the list of displayed options.
    IList<string> displayedOptions = printTask.Options.DisplayedOptions;

    // Choose the printer options to be shown.
    // The order in which the options are appended determines
    // the order in which they appear in the UI.
    displayedOptions.Clear();
    displayedOptions.Add(StandardPrintTaskOptions.Copies);
    displayedOptions.Add(StandardPrintTaskOptions.Orientation);
    displayedOptions.Add(StandardPrintTaskOptions.MediaSize);
    displayedOptions.Add(StandardPrintTaskOptions.Collation);
    displayedOptions.Add(StandardPrintTaskOptions.Duplex);

    // Preset the default value of the print media size option.
    printTask.Options.MediaSize = PrintMediaSize.NorthAmericaLegal;
}

Spécifier les options par défaut

Vous pouvez également définir les valeurs par défaut des options dans l’interface utilisateur d’aperçu avant impression. La ligne de code suivante, de la dernière exemple, définit la valeur par défaut de l’option MediaSize .

// Preset the default value of the print media size option.
printTask.Options.MediaSize = PrintMediaSize.NorthAmericaLegal;

Remarque

Lorsque vous définissez les valeurs dans la liste DisplayedOptions, vous utilisez le nom que vous obtenez à partir de StandardPrintTaskOptions (par exemple, StandardPrintTaskOptions.MediaSize).

Lorsque vous définissez la valeur par défaut d’une option, vous utilisez PrintTaskOptions (par exemple, PrintTaskOptions.MediaSize).

Ajouter des options d’impression personnalisées

Ici, nous montrons comment créer une option d’impression personnalisée, définir une liste de valeurs que l’option prend en charge, puis ajouter l’option à l’aperçu avant impression. Dans cet exemple, l’option d’impression personnalisée permet à l’utilisateur de spécifier s’il faut imprimer uniquement le texte de la page, uniquement l’image ou le texte et l’image. Les options sont présentées dans une liste déroulante.

Pour garantir une expérience utilisateur optimale, le système exige que l’application gère l’événement PrintTaskRequested dans le délai spécifié par PrintTaskRequestedEventArgs.Request.Deadline. Par conséquent, nous utilisons le gestionnaire PrintTaskRequested uniquement pour créer la tâche d’impression. La personnalisation des paramètres d’impression peut être effectuée lorsque la source du document d’impression est demandée. Ici, nous utilisons une expression lambda pour définir l’inline PrintTaskSourceRequestedHandler, qui permet d’accéder plus facilement à PrintTask.

Tout d’abord, obtenez un objet PrintTaskOptionDetails et sa liste de DisplayedOptions. Vous utilisez cette option pour ajouter la nouvelle option d’impression à l’interface utilisateur d’aperçu avant impression.

Ensuite, pour présenter les options d’impression personnalisées dans une liste déroulante, appelez PrintTaskOptionDetails.CreateItemListOption pour créer un objet PrintCustomItemListOptionDetails. Créez l’option d’impression et initialisez la liste des valeurs d’option. Enfin, ajoutez la nouvelle option à la liste DisplayedOptions et attribuez un gestionnaire pour l’événement OptionChanged . Étant donné que vous ajoutez simplement une nouvelle option d’impression à la fin de la liste des options par défaut, vous n’avez pas besoin d’effacer la liste DisplayedOptions ; ajoutez simplement la nouvelle option.

private void PrintTask_Requested(PrintManager sender, PrintTaskRequestedEventArgs args)
{
    // Create the PrintTask.
    PrintTask printTask = null;
    printTask = args.Request.CreatePrintTask("WinUI 3 Printing example", sourceRequestedArgs =>
    {
        PrintTaskSourceRequestedDeferral deferral = 
            sourceRequestedArgs.GetDeferral();
        PrintTaskOptionDetails printDetailedOptions = 
            PrintTaskOptionDetails.GetFromPrintTaskOptions(printTask.Options);
        IList<string> displayedOptions = printDetailedOptions.DisplayedOptions;

        // Create a new list option.
        PrintCustomItemListOptionDetails pageFormat =
            printDetailedOptions.CreateItemListOption("PageContent", "Page content");
        pageFormat.AddItem("PicturesText", "Pictures and text");
        pageFormat.AddItem("PicturesOnly", "Pictures only");
        pageFormat.AddItem("TextOnly", "Text only");

        // Add the custom option to the option list
        displayedOptions.Add("PageContent");

        printDetailedOptions.OptionChanged += PrintDetailedOptions_OptionChanged;
        sourceRequestedArgs.SetSource(printDocumentSource);

        deferral.Complete();
    });

    // Handle PrintTask.Completed to catch failed print jobs.
    printTask.Completed += PrintTask_Completed;

    DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Normal, () =>
    {
        InvokePrintingButton.IsEnabled = false;
    });
}

Les options apparaissent dans l’interface utilisateur d’aperçu avant impression dans le même ordre qu’elles sont ajoutées, avec la première option affichée en haut de la fenêtre. Dans cet exemple, l’option personnalisée est ajoutée en dernier afin qu’elle apparaisse en bas de la liste des options. Toutefois, vous pouvez le placer n’importe où dans la liste ; Les options d’impression personnalisées n’ont pas besoin d’être ajoutées en dernier.

Lorsque l’utilisateur modifie l’option sélectionnée dans votre option personnalisée, utilisez l’option sélectionnée pour mettre à jour l’image d’aperçu avant impression. Une fois la disposition d’aperçu avant impression mise à jour, appelez la méthode InvalidatePreview pour redessiner l’image dans l’interface utilisateur d’aperçu avant impression, comme illustré ici.

void PrintDetailedOptions_OptionChanged(PrintTaskOptionDetails sender, 
                                        PrintTaskOptionChangedEventArgs args)
{
    string optionId = args.OptionId as string;
    if (string.IsNullOrEmpty(optionId))
    {
        return;
    }

    if (optionId == "PageContent")
    {
        PrintCustomItemListOptionDetails pageContentOption =
            (PrintCustomItemListOptionDetails)sender.Options["PageContent"];
        string pageContentValue = pageContentOption.Value.ToString();

        if (pageContentValue == "PicturesOnly")
        {
            pageLayoutOption = PageLayoutOption.Images;
        }
        else if (pageContentValue == "TextOnly")
        {
            pageLayoutOption = PageLayoutOption.Text;
        }
        else
        {
            pageLayoutOption = PageLayoutOption.TextAndImages;
        }

        DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Normal, () =>
        {
            printDocument.InvalidatePreview();
        });
    }
}

Pour prendre en charge l’utilisation des options personnalisées dans votre page, ajoutez une énumération pour les options disponibles et une variable de niveau page pour contenir l’option sélectionnée.

internal enum PageLayoutOption : int
{
    Text = 1,
    Images = 2,
    TextAndImages = 3
}

PageLayoutOption pageLayoutOption = PageLayoutOption.TextAndImages;

Ensuite, utilisez l’option sélectionnée dans votre gestionnaire Paginé où vous ajoutez le contenu de l’aperçu avant impression.

private void PrintDocument_Paginate(object sender, PaginateEventArgs e)
{
    // Clear the cache of preview pages.
    printPreviewPages.Clear();

    // Get the PrintTaskOptions.
    PrintTaskOptions printingOptions = ((PrintTaskOptions)e.PrintTaskOptions);
    // Get the page description to determine the size of the print page.
    PrintPageDescription pageDescription = printingOptions.GetPageDescription(0);

    // Create the print layout.
    StackPanel printLayout = new StackPanel();
    printLayout.Width = pageDescription.PageSize.Width;
    printLayout.Height = pageDescription.PageSize.Height;
    printLayout.BorderBrush = new Microsoft.UI.Xaml.Media.SolidColorBrush(Microsoft.UI.Colors.DimGray);
    printLayout.BorderThickness = new Thickness(48);

    // Use the custom print layout options to determine
    // which elements to add to the print page. 
    if (pageLayoutOption == PageLayoutOption.Images ||
        pageLayoutOption == PageLayoutOption.TextAndImages)
    {
        Image printImage = new Image();
        printImage.Source = printContent.Source;

        printImage.Width = pageDescription.PageSize.Width / 2;
        printImage.Height = pageDescription.PageSize.Height / 2;
        printLayout.Children.Add(printImage);
    }

    if (pageLayoutOption == PageLayoutOption.Text ||
        pageLayoutOption == PageLayoutOption.TextAndImages)
    {
        TextBlock imageDescriptionText = new TextBlock();
        imageDescriptionText.Text = imageDescription.Text;
        imageDescriptionText.FontSize = 24;
        imageDescriptionText.HorizontalAlignment = HorizontalAlignment.Center;
        imageDescriptionText.Width = pageDescription.PageSize.Width / 2;
        imageDescriptionText.TextWrapping = TextWrapping.WrapWholeWords;

        printLayout.Children.Add(imageDescriptionText);
    }

    // Add the print layout to the list of preview pages.
    printPreviewPages.Add(printLayout);

    // Report the number of preview pages created.
    PrintDocument printDocument = (PrintDocument)sender;
    printDocument.SetPreviewPageCount(printPreviewPages.Count,
                                          PreviewPageCountType.Intermediate);
}

Voir aussi