HisTech Up

UWP: Imprimer à partir de votre application part 3 – Mettre en forme le contenu

Introduction

user

Christian Hissibini

I am a Tech enthusiast who loves to blend Dev & Design on Web and Mobile Platforms. I am also a Windows Platform Dev MVP


LATEST POSTS

What are the differences between Data Mining, Machine Learning and Deep Learning? 11th February, 2018

What are the challenges of using Artificial Intelligence? 15th January, 2018

Mobile Development

UWP: Imprimer à partir de votre application part 3 – Mettre en forme le contenu

Posted on .

Lors de l’appel de ShowPrintUIAsync, l’événement PrintTaskRequested est déclenché. Le gestionnaire d’événements PrintTaskRequested présenté dans cette étape crée une classe PrintTask en appelant la méthode PrintTaskRequest.CreatePrintTask et transmet le titre de la page d’impression et le nom d’un délégué PrintTaskSourceRequestedHandler. Notez que dans cet exemple, le délégué PrintTaskSourceRequestedHandler est défini inline. Le délégué PrintTaskSourceRequestedHandler, qui fournit le contenu mis en forme pour l’impression, est décrit plus tard.

Dans cet exemple, un gestionnaire d’achèvement est également défini pour déceler les erreurs. La gestion des événements d’achèvement est recommandée ; de cette façon, votre application peut informer l’utilisateur en cas d’erreur et fournir des solutions possibles. De même, votre application peut utiliser l’événement d’achèvement pour indiquer à l’utilisateur les prochaines étapes à suivre une fois le travail d’impression terminé.

C#
protected virtual void PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs e)
{
   PrintTask printTask = null;
   printTask = e.Request.CreatePrintTask("C# Printing SDK Sample", sourceRequested =>
   {
         // Print Task event handler is invoked when the print job is completed.
         printTask.Completed += async (s, args) =>
         {
            // Notify the user when the print operation fails.
            if (args.Completion == PrintTaskCompletion.Failed)
            {
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     MainPage.Current.NotifyUser("Failed to print.", NotifyType.ErrorMessage);
               });
            }
         };

         sourceRequested.SetSource(printDocumentSource);
   });
}

Une fois la tâche d’impression créée, la classe PrintManager demande une collection de pages d’impression à afficher dans l’interface utilisateur d’aperçu avant impression en déclenchant l’événement Paginate. Cela correspond à la méthode Paginate de l’interface IPrintPreviewPageCollection. Le gestionnaire d’événements que vous avez créé lors de l’inscription est appelé à ce moment.

Important Si l’utilisateur modifie les paramètres d’impression, le gestionnaire d’événements de pagination est appelé à nouveau pour vous permettre de redisposer le contenu. Pour une expérience utilisateur optimale, nous vous recommandons de vérifier les paramètres avant de redisposer le contenu et d’éviter de réinitialiser le contenu paginé si ce n’est pas nécessaire.

Dans le gestionnaire d’événements Paginate (la méthode CreatePrintPreviewPages dans l’exemple d’impression UWP), créez les pages à afficher dans l’interface utilisateur d’aperçu avant impression et à envoyer à l’imprimante. Le code dont vous vous servez pour préparer le contenu de votre application à imprimer est propre à votre application et au contenu que vous imprimez. Reportez-vous au code source de l’exemple d’impression UWP pour voir comment il met en forme le contenu à des fins d’impression.

C#
protected virtual void CreatePrintPreviewPages(object sender, PaginateEventArgs e)
{
   // Clear the cache of preview pages
   printPreviewPages.Clear();

   // Clear the print canvas of preview pages
   PrintCanvas.Children.Clear();

   // This variable keeps track of the last RichTextBlockOverflow element that was added to a page which will be printed
   RichTextBlockOverflow lastRTBOOnPage;

   // Get the PrintTaskOptions
   PrintTaskOptions printingOptions = ((PrintTaskOptions)e.PrintTaskOptions);

   // Get the page description to deterimine how big the page is
   PrintPageDescription pageDescription = printingOptions.GetPageDescription(0);

   // We know there is at least one page to be printed. passing null as the first parameter to
   // AddOnePrintPreviewPage tells the function to add the first page.
   lastRTBOOnPage = AddOnePrintPreviewPage(null, pageDescription);

   // We know there are more pages to be added as long as the last RichTextBoxOverflow added to a print preview
   // page has extra content
   while (lastRTBOOnPage.HasOverflowContent && lastRTBOOnPage.Visibility == Windows.UI.Xaml.Visibility.Visible)
   {
         lastRTBOOnPage = AddOnePrintPreviewPage(lastRTBOOnPage, pageDescription);
   }

   if (PreviewPagesCreated != null)
   {
         PreviewPagesCreated.Invoke(printPreviewPages, null);
   }

   PrintDocument printDoc = (PrintDocument)sender;

   // Report the number of preview pages created
   printDoc.SetPreviewPageCount(printPreviewPages.Count, PreviewPageCountType.Intermediate);
}

Quand une page particulière doit être affichée dans la fenêtre d’aperçu avant impression, la classe PrintManager déclenche l’événement GetPreviewPage. Cela correspond à la méthode MakePage de l’interface IPrintPreviewPageCollection. Le gestionnaire d’événements que vous avez créé lors de l’inscription est appelé à ce moment.

Dans le gestionnaire d’événements GetPreviewPage (la méthode GetPrintPreviewPage dans l’exemple d’impression UWP), définissez la page appropriée sur le document à imprimer.

C#
protected virtual void GetPrintPreviewPage(object sender, GetPreviewPageEventArgs e)
{
   PrintDocument printDoc = (PrintDocument)sender;
   printDoc.SetPreviewPage(e.PageNumber, printPreviewPages[e.PageNumber - 1]);
}

Enfin, quand l’utilisateur clique sur le bouton d’impression, la classe PrintManager demande la collection finale de pages à envoyer à l’imprimante en appelant la méthode MakeDocument de l’interface IDocumentPageSource. En XAML, cela déclenche l’événement AddPages. Le gestionnaire d’événements que vous avez créé lors de l’inscription est appelé à ce moment.

Dans le gestionnaire d’événements AddPages (la méthode AddPrintPages dans l’exemple d’impression UWP), ajoutez des pages de la collection de pages à l’objet PrintDocument à envoyer à l’imprimante. Si un utilisateur spécifie des pages ou une plage de pages en particulier à imprimer, vous utilisez ces informations à cet endroit pour ajouter uniquement les pages qui seront effectivement envoyées à l’imprimante.

C#
protected virtual void AddPrintPages(object sender, AddPagesEventArgs e)
{
   // Loop over all of the preview pages and add each one to  add each page to be printied
   for (int i = 0; i < printPreviewPages.Count; i++)
   {
         // We should have all pages ready at this point...
         printDocument.AddPage(printPreviewPages[i]);
   }

   PrintDocument printDoc = (PrintDocument)sender;

   // Indicate that all of the print pages have been provided
   printDoc.AddPagesComplete();
}

Ref
https://docs.microsoft.com/

profile

Christian Hissibini

I am a Tech enthusiast who loves to blend Dev & Design on Web and Mobile Platforms. I am also a Windows Platform Dev MVP

There are no comments.

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (0) ...
Navigation