Windows Dev Center

So wird’s gemacht: Drucken spezifischer Seiten (XAML)

Hier erfahren Sie, wie Sie einer Windows Store-App eine Seitenbereichsoption hinzufügen.

Die Seitenbereichsoption hat folgende Einstellungen:

OptionsnameAktion

Print all

Druckt alle Seiten im Dokument.

Print Selection

Druckt nur den vom Benutzer ausgewählten Inhalt.

Print Range

Zeigt ein Bearbeitungssteuerelement an, in das der Benutzer die zu druckenden Seiten eingeben kann.

 

Wissenswertes

Technologien

Voraussetzungen

Wir gehen davon aus, dass:

  • Sie mit C#, C++ oder Visual Basic, XAML, Ereignissen und der Ereignisbehandlung vertraut sind.
  • Eine Instanz von Microsoft Visual Studio installiert ist.
  • Ein Drucker installiert ist.
  • Sie haben eine Windows Store-App mit C++, C# oder Visual Basic, der Sie die Seitenbereichsoption hinzufügen möchten. Falls Sie keine eigene App haben, können Sie die PrintSample-Beispiel-App herunterladen und verwenden.
  • Ihre App die einfache Windows-Druckfunktion unterstützt. Falls Sie keine App mit entsprechenden Funktionen haben, können Sie unter Schnellstart: Drucken von der App aus nachlesen, wie Sie Ihrer App Unterstützung für grundlegende Windows-Druckfunktionen hinzufügen.

Anweisungen

Schritt 1: Öffnen der App in Visual Studio

Das hier beschriebene Verfahren bezieht sich auf die PrintSample-App aus der Print Sample-Beispiel-App. Wenn Sie Ihrer eigenen App eine Druckschaltfläche hinzufügen, öffnen Sie anstelle der PrintSample-Beispiel-App Ihre App in Visual Studio.

  1. Öffnen Sie die Print Sample-Beispiel-App, und laden Sie das C#-Beispiel herunter.
  2. Klicken Sie in Visual Studio auf File > Open Project, und navigieren Sie zu dem Ordner, der die Projektmappendatei der im vorhergehenden Schritt heruntergeladenen Beispiel-App enthält.
  3. Wählen Sie die Projektmappendatei PrintSample aus, und klicken Sie auf Öffnen.

Schritt 2: Erstellen und Testen der App

  1. Klicken Sie auf Erstellen > Projektmappe erstellen, um die App zu erstellen. Stellen Sie sicher, dass unten auf dem Bildschirm keine Fehlermeldungen im Ausgabebereich angezeigt werden.
  2. Klicken Sie auf Debuggen > Starten ohne Debugging.
  3. Überprüfen Sie, dass nach einigen Sekunden auf dem Bildschirm die App Print JS Sample angezeigt wird.
  4. Wenn die App ohne Fehler ausgeführt wird, kehren Sie zu Visual Studio zurück, und klicken Sie auf Debuggen > Debugging beenden.

Schritt 3: Hinzufügen der neuen Option zur Druckvorschau-UI

In diesem Schritt wird eine neue Druckoption erstellt und eine Liste von Werten definiert, die die Option unterstützt. Dann wird die Option der Druckvorschau-UI hinzugefügt.

  1. Ändern Sie den PrintTaskRequested-Ereignishandler, um den Code zum Abrufen eines PrintTaskOptionDetails-Objekts hinzuzufügen.

    
    PrintTaskOptionDetails printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(printTask.Options);
    
    
    
  2. Erstellen Sie die neue Druckoption, und initialisieren Sie die Liste der Optionswerte.

    
    // 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");
    
    
    
  3. Löschen Sie die Liste der Optionen, die in der Druckvorschau-Benutzeroberfläche angezeigt werden, und fügen Sie die Optionen hinzu, die angezeigt werden sollen, wenn der Benutzer in der App druckt.

    Hinweis  Die Optionen werden in der Druckvorschau-Benutzeroberfläche in der Reihenfolge angezeigt, in der sie hinzugefügt werden, wobei die erste Option oben im Fenster erscheint.
    
    // 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(Windows.Graphics.Printing.StandardPrintTaskOptions.Copies);
    displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.Orientation);
    displayedOptions.Add(Windows.Graphics.Printing.StandardPrintTaskOptions.ColorMode);
    
    
    
  4. Fügen Sie Ihre benutzerdefinierte Druckoption hinzu, und weisen Sie den Ereignishandler zu.

    In diesem Beispiel wird die benutzerdefinierte Option als Letztes hinzugefügt, sodass sie am Ende der Optionsliste erscheint. Sie können sie aber überall in der Liste platzieren. Benutzerdefinierte Druckoptionen müssen nicht am Ende hinzugefügt werden.

    Beachten Sie auch den Befehl, über den das Textfeld Bereich erstellt wird. Hier gibt der Benutzer die zu druckenden Seiten ein, wenn die Option Print Range ausgewählt wurde.

    
    // Add the custom option to the option list
    displayedOptions.Add("PageRange");
    
    // Create new edit option
    PrintCustomTextOptionDetails pageRangeEdit = printDetailedOptions.CreateTextOption("PageRangeEdit", "Range");
    
    
    

Schritt 4: Erstellen eines Change-Ereignishandlers für Optionsänderungen

Der Change-Ereignishandler ist im Wesentlichen für zwei Dinge zuständig: Erstens blendet er das Texteingabefeld für den Seitenbereich je nach der vom Benutzer ausgewählten Seitenbereichsoption ein und aus. Zweitens testet er den Text, den der Benutzer in das Seitenbereich-Textfeld eingibt, um sicherzustellen, dass es sich um einen gültigen Seitenbereich für das Dokument handelt.

  1. Erstellen Sie die Funktion, die Optionsänderungsereignisse behandelt. Dieses Beispiel stammt aus der Datei scenario5 der Print Sample-Beispiel-App.
    
    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 Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
                                              () =>
                                              {
                                                  ShowContent(null);
                                              });
                    break;
                case "PrintSelection":
                    {
                        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
                                          () =>
                                          {
                                              ScenarioOutput5 outputContent = (ScenarioOutput5)rootPage.OutputFrame.Content;
                                              ShowContent(outputContent.SelectedText);
                                          });
                        RemovePageRangeEdit(sender);
                    }
                    break;
                default:
                    await 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;
                }
            }
        }
    }
    
    
    
    .
  2. Die Zuweisung des Change-Ereignishandlers erfolgt im PrintTaskRequestedEreignishandler
    
    // Register the handler for the option change event
    printDetailedOptions.OptionChanged += printDetailedOptions_OptionChanged;
    
    
    
    .
  3. Weitere Informationen zum Analysieren des vom Benutzer in das Textfeld für den Bereich eingegebenen Seitenbereichs finden Sie in der Print Sample-Beispiel-App unter GetPagesInRange.

Schritt 5: Drucken der Seiten

Die Formatierung des Inhalts Ihrer App zum Drucken hängt von der Art der App und deren Inhalt ab. In der Print Sample-Beispiel-App wird die BasePrintPage-Klasse zum Formatieren des Inhalts zum Drucken verwendet.

Wenn nur ein Teil der Seiten gedruckt wird, gibt es mehrere Möglichkeiten, den Inhalt in der Druckvorschau anzuzeigen. Unabhängig davon, welche Methode Sie zum Anzeigen des Seitenbereichs in der Druckvorschau ausgewählt haben, darf der Ausdruck nur die ausgewählten Seiten enthalten.

  1. Alle Seiten in der Druckvorschau anzeigen, unabhängig davon, ob ein Seitenbereich festgelegt wurde. Der Benutzer muss selbst wissen, welche Seiten ausgedruckt werden.
  2. Nur den vom Benutzer ausgewählten Seitenbereich in der Druckvorschau anzeigen und die Anzeige aktualisieren, wenn der Benutzer den Seitenbereich ändert.
  3. Alle Seiten in der Druckvorschau anzeigen, dabei aber alle Seiten ausgrauen, die nicht in dem vom Benutzer ausgewählten Seitenbereich liegen.

In der ScenarioInput5_pagesCreated-Methode in der Print Sample-Beispiel-App wird Option 2 verwendet.

 

 

Anzeigen:
© 2015 Microsoft