앱에서 인쇄하기Print from your app

중요 APIImportant APIs

유니버설 Windows 앱에서 문서를 인쇄 하는 방법을 알아봅니다.Learn how to print documents from a Universal Windows app. 또한이 항목에서는 특정 페이지를 인쇄 하는 방법을 보여 줍니다.This topic also shows how to print specific pages. 인쇄 미리 보기 UI에 대 한 고급 변경 사항은 인쇄 미리 보기 Ui 사용자 지정을 참조 하세요.For more advanced changes to the print preview UI, see Customize the print preview UI.

 이 항목에 포함 된 대부분의 예제는 GitHub의 유니버설 Windows 플랫폼 (uwp) 앱 샘플 리포지토리의 일부인 uwp (유니버설 Windows 플랫폼) 인쇄 샘플을 기반으로 합니다. Most of the examples in this topic are based on the Universal Windows Platform (UWP) print sample, which is part of the Universal Windows Platform (UWP) app samples repo on GitHub.

인쇄 등록Register for printing

앱에 인쇄를 추가 하는 첫 번째 단계는 인쇄 계약에 등록 하는 것입니다.The first step to add printing to your app is to register for the Print contract. 앱은 사용자가 인쇄할 수 있도록 하려는 모든 화면에서이 작업을 수행 해야 합니다.Your app must do this on every screen from which you want your user to be able to print. 사용자에 게 표시 되는 화면만 인쇄를 위해 등록할 수 있습니다.Only the screen that is displayed to the user can be registered for printing. 앱의 한 화면에서 인쇄를 위해 등록 한 경우 인쇄를 종료할 때 등록을 취소 해야 합니다.If one screen of your app has registered for printing, it must unregister for printing when it exits. 다른 화면으로 대체 된 경우 다음 화면에서 새 인쇄 계약이 열리면 등록 해야 합니다.If it is replaced by another screen, the next screen must register for a new Print contract when it opens.

 응용 프로그램에서 둘 이상의 페이지에서 인쇄를 지원 해야 하는 경우에는이 인쇄 코드를 공용 도우미 클래스에 넣고 앱 페이지에서 다시 사용 하도록 할 수 있습니다. If you need to support printing from more than one page in your app, you can put this print code in a common helper class and have your app pages reuse it. 이 작업을 수행 하는 방법에 대 한 예제는 PrintHelper UWP 인쇄 샘플에서 클래스를 참조 하세요.For an example of how to do this, see the PrintHelper class in the UWP print sample.

먼저 PrintmanagerPrintDocument를 선언 합니다.First, declare the PrintManager and PrintDocument. Printmanager 형식은 다른 windows 인쇄 기능을 지원 하기 위해 형식과 함께 windows. Graphics. 인쇄 네임 스페이스에 있습니다.The PrintManager type is in the Windows.Graphics.Printing namespace along with types to support other Windows printing functionality. PrintDocument 형식에는 인쇄용 XAML 콘텐츠 준비를 지 원하는 다른 형식과 함께 PrintDocument 네임 스페이스가 있습니다.The PrintDocument type is in the Windows.UI.Xaml.Printing namespace along with other types that support preparing XAML content for printing. 다음 using 또는 Imports 문을 페이지에 추가 하 여 인쇄 코드를 보다 쉽게 작성할 수 있습니다.You can make it easier to write your printing code by adding the following using or Imports statements to your page.

using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

PrintDocument 클래스는 앱과 printmanager간의 많은 상호 작용을 처리 하는 데 사용 되지만 자체의 여러 콜백을 노출 합니다.The PrintDocument class is used to handle much of the interaction between the app and the PrintManager, but it exposes several callbacks of its own. 등록 하는 동안 PrintmanagerPrintDocument 의 인스턴스를 만들고 해당 인쇄 이벤트에 대 한 처리기를 등록 합니다.During registration, create instances of PrintManager and PrintDocument and register handlers for their printing events.

UWP 인쇄 샘플에서 등록은 메서드를 통해 수행 됩니다 RegisterForPrinting .In the UWP print sample, registration is performed by the RegisterForPrinting method.

public virtual void RegisterForPrinting()
{
   printDocument = new PrintDocument();
   printDocumentSource = printDocument.DocumentSource;
   printDocument.Paginate += CreatePrintPreviewPages;
   printDocument.GetPreviewPage += GetPrintPreviewPage;
   printDocument.AddPages += AddPrintPages;

   PrintManager printMan = PrintManager.GetForCurrentView();
   printMan.PrintTaskRequested += PrintTaskRequested;
}

사용자가 인쇄를 지 원하는 페이지로 이동 하면 메서드 내에서 등록을 시작 합니다 OnNavigatedTo .When the user goes to a page that supports printing, it initiates the registration within the OnNavigatedTo method.

protected override void OnNavigatedTo(NavigationEventArgs e)
{
   // Initialize common helper class and register for printing
   printHelper = new PrintHelper(this);
   printHelper.RegisterForPrinting();

   // Initialize print content for this scenario
   printHelper.PreparePrintContent(new PageToPrint());

   // Tell the user how to print
   MainPage.Current.NotifyUser("Print contract registered with customization, use the Print button to print.", NotifyType.StatusMessage);
}

이 샘플에서는 이벤트 처리기가 메서드에서 등록 취소 됩니다 UnregisterForPrinting .In the sample, the event handlers are unregistered in the UnregisterForPrinting method.

public virtual void UnregisterForPrinting()
{
    if (printDocument == null)
    {
        return;
    }

    printDocument.Paginate -= CreatePrintPreviewPages;
    printDocument.GetPreviewPage -= GetPrintPreviewPage;
    printDocument.AddPages -= AddPrintPages;

    PrintManager printMan = PrintManager.GetForCurrentView();
    printMan.PrintTaskRequested -= PrintTaskRequested;
}

사용자가 인쇄를 지 원하는 페이지를 벗어나면 메서드 내에서 이벤트 처리기의 등록이 취소 됩니다 OnNavigatedFrom .When the user leaves a page that supports printing, the event handlers are unregistered within the OnNavigatedFrom method.

참고

여러 페이지로 된 앱이 있고 인쇄 연결을 끊지 않는 경우 사용자가 페이지를 남기고 나면 예외가 throw 됩니다.If you have a multiple-page app and don't disconnect printing, an exception is thrown when the user leaves the page and then returns to it.

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
   if (printHelper != null)
   {
         printHelper.UnregisterForPrinting();
   }
}

인쇄 단추 만들기Create a print button

표시 하려는 앱 화면에 인쇄 단추를 추가 합니다.Add a print button to your app's screen where you'd like it to appear. 인쇄 하려는 콘텐츠를 방해 하지 않는지 확인 합니다.Make sure that it doesn't interfere with the content that you want to print.

<Button x:Name="InvokePrintingButton" Content="Print" Click="OnPrintButtonClick"/>

다음으로 앱의 코드에 이벤트 처리기를 추가 하 여 click 이벤트를 처리 합니다.Next, add an event handler to your app's code to handle the click event. Showprintuiasync 메서드를 사용 하 여 앱에서 인쇄를 시작 합니다.Use the ShowPrintUIAsync method to start printing from your app. ShowPrintUIAsync는 적절한 인쇄 창을 표시하는 비동기 메서드입니다.ShowPrintUIAsync is an asynchronous method that displays the appropriate printing window. 인쇄를 지 원하는 장치에서 앱이 실행 되 고 있는지 확인 하기 위해 Issupported 메서드를 먼저 호출 하는 것이 좋습니다 (및 해당 하지 않는 경우 처리).We recommend calling the IsSupported method first in order to check that the app is being run on a device that supports printing (and handle the case in which it is not). 다른 이유로 인해 인쇄를 수행할 수 없는 경우 Showprintuiasync 는 예외를 throw 합니다.If printing can't be performed at that time for any other reason, ShowPrintUIAsync will throw an exception. 이러한 예외를 catch 하 고 인쇄를 계속할 수 없는 경우 사용자에 게 알리는 것이 좋습니다.We recommend catching these exceptions and letting the user know when printing can't proceed.

이 예제에서는 단추 클릭에 대한 이벤트 처리기에 인쇄 창이 표시됩니다.In this example, a print window is displayed in the event handler for a button click. 해당 시점에 인쇄를 수행할 수 없으므로 메서드가 예외를 throw 하는 경우 Contentdialog 컨트롤은 사용자에 게 상황을 알려 줍니다.If the method throws an exception (because printing can't be performed at that time), a ContentDialog control informs the user of the situation.

async private void OnPrintButtonClick(object sender, RoutedEventArgs e)
{
    if (Windows.Graphics.Printing.PrintManager.IsSupported())
    {
        try
        {
            // Show print UI
            await Windows.Graphics.Printing.PrintManager.ShowPrintUIAsync();

        }
        catch
        {
            // Printing cannot proceed at this time
            ContentDialog noPrintingDialog = new ContentDialog()
            {
                Title = "Printing error",
                Content = "\nSorry, printing can' t proceed at this time.", PrimaryButtonText = "OK"
            };
            await noPrintingDialog.ShowAsync();
        }
    }
    else
    {
        // Printing is not supported on this device
        ContentDialog noPrintingDialog = new ContentDialog()
        {
            Title = "Printing not supported",
            Content = "\nSorry, printing is not supported on this device.",PrimaryButtonText = "OK"
        };
        await noPrintingDialog.ShowAsync();
    }
}

앱 콘텐츠 서식 지정Format your app's content

Showprintuiasync 가 호출 되 면 PrintTaskRequested 이벤트가 발생 합니다.When ShowPrintUIAsync is called, the PrintTaskRequested event is raised. 이 단계에 표시 된 PrintTaskRequested 이벤트 처리기는 PrintTaskRequest 메서드를 호출 하 여 printtask 를 만들고 인쇄 페이지의 제목과 PrintTaskSourceRequestedHandler 대리자의 이름을 전달 합니다.The PrintTaskRequested event handler shown in this step creates a PrintTask by calling the PrintTaskRequest.CreatePrintTask method and passes the title for the print page and the name of a PrintTaskSourceRequestedHandler delegate. 이 예제에서 PrintTaskSourceRequestedHandler 는 인라인으로 정의 됩니다.Notice that in this example, the PrintTaskSourceRequestedHandler is defined inline. PrintTaskSourceRequestedHandler 은 인쇄를 위해 형식이 지정 된 콘텐츠를 제공 하 고 나중에 설명 합니다.The PrintTaskSourceRequestedHandler provides the formatted content for printing and is described later.

이 예제에서는 오류를 catch 하기 위해 완료 처리기도 정의 됩니다.In this example, a completion handler is also defined to catch errors. 응용 프로그램에서 오류가 발생 한 경우 사용자에 게 알릴 수 있으며 가능한 해결 방법을 제공 하기 때문에 완료 이벤트를 처리 하는 것이 좋습니다.It's a good idea to handle completion events because then your app can let the user know if an error occurred and provide possible solutions. 마찬가지로, 앱은 완료 이벤트를 사용 하 여 인쇄 작업이 성공한 후 사용자가 수행할 후속 단계를 나타낼 수 있습니다.Likewise, your app could use the completion event to indicate subsequent steps for the user to take after the print job is successful.

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);
   });
}

인쇄 작업이 만들어진 후 Printmanager 는 페이지 매김 이벤트를 발생 시켜 인쇄 미리 보기 UI에 표시할 인쇄 페이지 컬렉션을 요청 합니다.After the print task is created, the PrintManager requests a collection of print pages to show in the print preview UI by raising the Paginate event. 이는 IPrintPreviewPageCollection 인터페이스의 IPrintPreviewPageCollection 메서드에 해당 합니다.This corresponds with the Paginate method of the IPrintPreviewPageCollection interface. 등록할 때 만든 이벤트 처리기가 현재 호출 됩니다.The event handler you created during registration will be called at this time.

중요

 사용자가 인쇄 설정을 변경 하는 경우에는 콘텐츠를 다시 흐르게 할 수 있도록 [인쇄] 이벤트 처리기가 다시 호출 됩니다. If the user changes print settings, the paginate event handler will be called again to allow you to reflow the content. 최상의 사용자 환경을 위해 콘텐츠를 다시 설정 하기 전에 설정을 확인 하 고 필요 하지 않은 경우 페이지가 매겨진 콘텐츠를 다시 초기화 하지 않는 것이 좋습니다.For the best user experience, we recommend checking the settings before you reflow the content and avoid reinitializing the paginated content when it's not necessary.

페이지 매김 이벤트 처리기 ( CreatePrintPreviewPages UWP 인쇄 샘플의 메서드)에서 인쇄 미리 보기 UI에 표시 하 고 프린터로 보낼 페이지를 만듭니다.In the Paginate event handler (the CreatePrintPreviewPages method in the UWP print sample), create the pages to show in the print preview UI and to send to the printer. 앱의 인쇄용 콘텐츠를 준비 하는 데 사용 하는 코드는 사용자의 앱 및 인쇄 콘텐츠에 따라 다릅니다.The code you use to prepare your app's content for printing is specific to your app and the content you print. 인쇄용으로 콘텐츠의 서식을 지정 하는 방법은 UWP 인쇄 샘플 소스 코드를 참조 하세요.Refer to the UWP print sample source code to see how it formats its content for printing.

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);
}

인쇄 미리 보기 창에 특정 페이지를 표시 하는 경우 PrintmanagerGetPreviewPage 이벤트를 발생 시킵니다.When a particular page is to be shown in the print preview window, the PrintManager raises the GetPreviewPage event. 이는 IPrintPreviewPageCollection 인터페이스의 makepage 메서드에 해당 합니다.This corresponds with the MakePage method of the IPrintPreviewPageCollection interface. 등록할 때 만든 이벤트 처리기가 현재 호출 됩니다.The event handler you created during registration will be called at this time.

GetPreviewPage 이벤트 처리기 ( GetPrintPreviewPage UWP 인쇄 샘플의 메서드)에서 인쇄 문서에 해당 하는 페이지를 설정 합니다.In the GetPreviewPage event handler (the GetPrintPreviewPage method in the UWP print sample), set the appropriate page on the print document.

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

마지막으로, 사용자가 인쇄 단추를 클릭 하면 PrintmanagerIdocumentpagesource 인터페이스의 makedocument 메서드를 호출 하 여 프린터로 보낼 최종 페이지 컬렉션을 요청 합니다.Finally, once the user clicks the print button, the PrintManager requests the final collection of pages to send to the printer by calling the MakeDocument method of the IDocumentPageSource interface. XAML에서는 Addpages 이벤트를 발생 시킵니다.In XAML, this raises the AddPages event. 등록할 때 만든 이벤트 처리기가 현재 호출 됩니다.The event handler you created during registration will be called at this time.

AddPages 이벤트 처리기(UWP 인쇄 샘플AddPrintPages 메서드)에서 페이지 모음의 페이지를 프린터로 보낼 PrintDocument 개체에 추가합니다.In the AddPages event handler (the AddPrintPages method in the UWP print sample), add pages from the page collection to the PrintDocument object to be sent to the printer. 사용자가 특정 페이지 또는 인쇄할 페이지 범위를 지정 하는 경우 여기에서 해당 정보를 사용 하 여 실제로 프린터로 전송 될 페이지만 추가 합니다.If a user specifies particular pages or a range of pages to print, you use that information here to add only the pages that will actually be sent to the printer.

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();
}

인쇄 옵션 준비Prepare print options

다음 인쇄 옵션을 준비 합니다.Next prepare print options. 예를 들어이 섹션에서는 특정 페이지 인쇄를 허용 하도록 페이지 범위 옵션을 설정 하는 방법을 설명 합니다.As an example, this section will describe how to set the page range option to allow printing of specific pages. 고급 옵션 은 인쇄 미리 보기 UI 사용자 지정을 참조 하세요.For more advanced options, see Customize the print preview UI.

이 단계에서는 새 인쇄 옵션을 만들고,이 옵션으로 지원 되는 값 목록을 정의한 후 인쇄 미리 보기 UI에 옵션을 추가 합니다.This step creates a new print option, defines a list of values that the option supports, and then adds the option to the print preview UI. 페이지 범위 옵션에는 다음과 같은 설정이 있습니다.The page range option has these settings:

옵션 이름Option name 작업Action
모두 인쇄Print all 문서의 모든 페이지를 인쇄 합니다.Print all pages in the document.
선택 영역 인쇄Print Selection 사용자가 선택한 콘텐츠만 인쇄 합니다.Print only the content the user selected.
인쇄 범위Print Range 사용자가 인쇄할 페이지를 입력할 수 있는 편집 컨트롤을 표시 합니다.Display an edit control into which the user can enter the pages to print.

먼저 PrintTaskRequested 이벤트 처리기를 수정 하 여 PrintTaskOptionDetails 개체를 가져오는 코드를 추가 합니다.First, modify the PrintTaskRequested event handler to add the code to get a PrintTaskOptionDetails object.

PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(printTask.Options);

인쇄 미리 보기 UI에 표시 되는 옵션 목록을 지우고 사용자가 앱에서 인쇄 하려는 경우 표시 하려는 옵션을 추가 합니다.Clear the list of options that are shown in the print preview UI and add the options that you want to display when the user wants to print from the app.

참고

 옵션은 추가 된 순서 대로 인쇄 미리 보기 UI에 표시 되며, 첫 번째 옵션은 창 위쪽에 표시 됩니다. The options appear in the print preview UI in the same order they are appended, with the first option shown at the top of the window.

IList<string> displayedOptions = printDetailedOptions.DisplayedOptions;

displayedOptions.Clear();
displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Copies);
displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Orientation);
displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.ColorMode);

새 인쇄 옵션을 만들고 옵션 값 목록을 초기화 합니다.Create the new print option and initialize the list of option values.

// Create a new list option
PrintCustomItemListOptionDetails pageFormat = printDetailedOptions.CreateItemListOption("PageRange", "Page Range");
pageFormat.AddItem("PrintAll", "Print all");
pageFormat.AddItem("PrintSelection", "Print Selection");
pageFormat.AddItem("PrintRange", "Print Range");

사용자 지정 인쇄 옵션을 추가하고 이벤트 처리기를 할당합니다.Add your custom print option and assign the event handler. 옵션 목록의 맨 아래에 표시 되도록 사용자 지정 옵션이 마지막에 추가 됩니다.The custom option is appended last so that it appears at the bottom of the list of options. 하지만 사용자 지정 인쇄 옵션은 마지막에 추가 하지 않아도 됩니다.But you can put it anywhere in the list, custom print options don't need to be added last.

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

// Create new edit option
PrintCustomTextOptionDetails pageRangeEdit = printDetailedOptions.CreateTextOption("PageRangeEdit", "Range");

// Register the handler for the option change event
printDetailedOptions.OptionChanged += printDetailedOptions_OptionChanged;

CreateTextOption 메서드는 범위 텍스트 상자를 만듭니다.The CreateTextOption method creates the Range text box. 사용자가 인쇄 범위 옵션을 선택할 때 인쇄 하려는 특정 페이지를 입력 하는 위치입니다.This is where the user enters the specific pages they want to print when they select the Print Range option.

인쇄 옵션 변경 내용 처리Handle print option changes

기능 변경 이벤트 처리기는 두 가지 작업을 수행 합니다.The OptionChanged event handler does two things. 먼저 사용자가 선택한 페이지 범위 옵션에 따라 페이지 범위에 대 한 텍스트 편집 필드를 표시 하 고 숨깁니다.First, it shows and hides the text edit field for the page range depending on the page range option that the user selected. 둘째, 페이지 범위 텍스트 상자에 입력 된 텍스트를 테스트 하 여 문서에 대해 유효한 페이지 범위를 나타내는지 확인 합니다.Second, it tests the text entered into the page range text box to make sure that it represents a valid page range for the document.

이 예제에서는 UWP 인쇄 샘플에서 인쇄 옵션 변경 이벤트를 처리 하는 방법을 보여 줍니다.This example shows how print option change events are handled in the UWP print sample.

async void printDetailedOptions_OptionChanged(PrintTaskOptionDetails sender, PrintTaskOptionChangedEventArgs args)
{
   if (args.OptionId == null)
   {
         return;
   }

   string optionId = args.OptionId.ToString();

   // Handle change in Page Range Option
   if (optionId == "PageRange")
   {
         IPrintOptionDetails pageRange = sender.Options[optionId];
         string pageRangeValue = pageRange.Value.ToString();

         selectionMode = false;

         switch (pageRangeValue)
         {
            case "PrintRange":
               // Add PageRangeEdit custom option to the option list
               sender.DisplayedOptions.Add("PageRangeEdit");
               pageRangeEditVisible = true;
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     ShowContent(null);
               });
               break;
            case "PrintSelection":
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     Scenario4PageRange page = (Scenario4PageRange)scenarioPage;
                     PageToPrint pageContent = (PageToPrint)page.PrintFrame.Content;
                     ShowContent(pageContent.TextContentBlock.SelectedText);
               });
               RemovePageRangeEdit(sender);
               break;
            default:
               await scenarioPage.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
               {
                     ShowContent(null);
               });
               RemovePageRangeEdit(sender);
               break;
         }

         Refresh();
   }
   else if (optionId == "PageRangeEdit")
   {
         IPrintOptionDetails pageRange = sender.Options[optionId];
         // Expected range format (p1,p2...)*, (p3-p9)* ...
         if (!Regex.IsMatch(pageRange.Value.ToString(), @"^\s*\d+\s*(\-\s*\d+\s*)?(\,\s*\d+\s*(\-\s*\d+\s*)?)*$"))
         {
            pageRange.ErrorText = "Invalid Page Range (eg: 1-3, 5)";
         }
         else
         {
            pageRange.ErrorText = string.Empty;
            try
            {
               GetPagesInRange(pageRange.Value.ToString());
               Refresh();
            }
            catch (InvalidPageException ipex)
            {
               pageRange.ErrorText = ipex.Message;
            }
         }
   }
}

 GetPagesInRange사용자가 범위 텍스트 상자에 입력 한 페이지 범위를 구문 분석 하는 방법에 대 한 자세한 내용은 UWP 인쇄 샘플 에서 메서드를 참조 하세요. See the GetPagesInRange method in the UWP print sample for details on how to parse the page range the user enters in the Range text box.

선택한 페이지 미리 보기Preview selected pages

앱 콘텐츠를 인쇄 하도록 서식 지정 하는 방법은 앱과 해당 콘텐츠의 특성에 따라 다릅니다.How you format your app's content for printing depends on the nature of your app and its content. UWP 인쇄 샘플 에서 인쇄를 위해 콘텐츠의 서식을 지정 하는 데 사용 되는 인쇄 도우미 클래스입니다.A print helper class in used in the UWP print sample to format the content for printing.

페이지의 하위 집합을 인쇄할 때 인쇄 미리 보기에서 콘텐츠를 표시 하는 방법에는 여러 가지가 있습니다.When printing a subset of pages, there are several ways to show the content in the print preview. 인쇄 미리 보기에서 페이지 범위를 표시 하도록 선택한 방법에 관계 없이 인쇄 된 출력에는 선택한 페이지만 포함 되어야 합니다.Regardless of the method you chose to show the page range in the print preview, the printed output must contain only the selected pages.

  • 인쇄 미리 보기에서 페이지 범위를 지정 했는지 여부에 관계 없이 모든 페이지를 표시 합니다. 사용자는 실제로 인쇄할 페이지를 알 수 있습니다.Show all the pages in the print preview whether a page range is specified or not, leaving the user to know which pages will actually be printed.
  • 인쇄 미리 보기에서 사용자의 페이지 범위에서 선택한 페이지만 표시 하 고 사용자가 페이지 범위를 변경할 때마다 화면 표시를 업데이트 합니다.Show only the pages selected by the user's page range in the print preview, updating the display whenever the user changes the page range.
  • 인쇄 미리 보기의 모든 페이지를 표시 하지만 사용자가 선택한 페이지 범위에 속하지 않는 페이지는 회색으로 표시 됩니다.Show all the pages in print preview, but grey out the pages that are not in page range selected by the user.