Printing PDF in UWP PDF Viewer (SfPdfViewer)

18 Aug 20218 minutes to read

Printing can be done using the Print method or by using the Print command.

The following code shows how to perform the print operation using Print method. Here ‘buffer’ is the byte array read from the PDF file either using FileOpenPicker or from Assets folder, as illustrated in the Viewing PDF section.

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    PdfLoadedDocument loadedDocument = new PdfLoadedDocument(buffer);
    pdfViewer.LoadDocument(loadedDocument);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    //Prints the document loaded in the PDF viewer
    pdfViewer.Print();
}
Private Sub Page_Loaded(sender As Object, e As RoutedEventArgs)
    Dim loadedDocument As New PdfLoadedDocument(buffer)
    pdfViewer.LoadDocument(loadedDocument)
End Sub

Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    'Prints the document loaded in the PDF viewer
    pdfViewer.Print()
End Sub

The following code shows how to bind the PrintCommand to a Button

<Grid>
        <syncfusion:SfPdfViewerControl Name="pdfViewer"/> 
        <Button Command="{Binding PrintCommand}" />
</Grid>

Printing PDF Asynchronously

The PDF Viewer allows you to print the PDF document asynchronously using the PrintAsync method. You can also cancel the asynchronous printing when it is in progress.

//Asynchronously  prints the document loaded in the PDF viewer 
pdfViewer.PrintAsync(cancellationTokenSource);

In the above code sample, the cancellationTokenSource enables you to cancel the asynchronous printing when it is in progress

Cancel the asynchronous PDF printing

You can raise the cancel request when printing is in progress

private void cancelButton_Clicked(object sender, EventArgs e)
 { 
   cancellationTokenSource.Cancel();
 }

In the above code sample, the cancellationTokenSource instance is the same as the one given as the argument when printing the PDF document asynchronously.

NOTE

Calling the above method will not have any effect once the printing is complete. It will stop the printing process only when it is in progress.

Handling exceptions while performing the asynchronous print

When the PrintAsync is called, the PDF Viewer will show the print previewer. Exceptions will be thrown if the print cannot be performed. The exceptions will be propagated back to the caller of this method. We recommend catching these exceptions as follows.

private void printButton_Clicked(object sender, EventArgs e)
        {
            try
            {
                //Asynchronously  prints the document loaded in the PDF viewer 
                await pdfViewerControl.PrintAsync(cancellationToken);
            }
            catch (Exception e)
            {
                ContentDialog printErrorDialog = new ContentDialog()
                {
                    Title = "Printing error",
                    Content = "Printing cannot proceed at this time.",
                    PrimaryButtonText = "OK"
                };
                await printErrorDialog.ShowAsync();
            }
        }

NOTE

The SfPdfViewer control for UWP does not support silent printing and so this method can be used only when the PDF document is displayed in the PDF viewer.

Customizing the print previewer

You can customize the print options displayed in the print previewer while performing a print operation in the PDF Viewer control. The event PrintTaskRequested will be raised when you call the Print method to print a PDF document.

//Wire up the PrintTaskRequested event with the PdfViewer_PrintTaskRequested
pdfViewer.PrintTaskRequested += PdfViewer_PrintTaskRequested;

In the PrintTaskRequested event handler, you can include the required print options such as the number of copies, collation, duplex, and more by creating a PrintTask using the properties Request and PrintDocumentSource. Refer to the following code example.

private void PdfViewer_PrintTaskRequested(object sender, SfPdfViewerPrintTaskRequestedEventArgs e)
        {
            PrintTask printTask = null;
            
           //Create a print task to customize the print options
            printTask = e.Request.CreatePrintTask("Printing", sourceRequested =>
            {

                PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(printTask.Options);
                IList<string> displayedOptions = printDetailedOptions.DisplayedOptions;

                //Allows to add the required print options
                displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.CustomPageRanges);
                printTask.Options.PageRangeOptions.AllowCurrentPage = true;
                printTask.Options.PageRangeOptions.AllowAllPages = true;
                printTask.Options.PageRangeOptions.AllowCustomSetOfPages = true;

                // Set the pdfViewerControl�s print document source
                sourceRequested.SetSource(e.PrintDocumentSource);
                e.PrintTask = printTask;

            });

        }

Refer to the following code example to disable the print preview,

pdfViewerControl.PrintTaskRequested+= PrintTaskRequested;
        private void PrintTaskRequested(object sender, SfPdfViewerPrintTaskRequestedEventArgs e)
        {
            PrintTask printTask = null;
            printTask = e.Request.CreatePrintTask("Printing", sourceRequested =>
            {

                // Set the SfPdfViewerControl�s print document source
                sourceRequestedArgs.SetSource(e.PrintDocumentSource);

            });
            printTask.IsPreviewEnabled = false;
            e.PrintTask = printTask;
        }

NOTE

Though if you specify any print options to be displayed, only those that are supported by the selected printer are shown in the print preview UI. The print UI won’t show options that the selected printer doesn’t support. The print options will appear in the order in which they are added.