Schnellstart: Drucken von der App aus
Language: HTML | XAML

Schnellstart: Drucken in der App (XAML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

In dieser Schnellstartanleitung wird gezeigt, wie Sie Ihrer Windows Store-App mit C++, C# oder Visual Basic am einfachsten Druckfunktionen hinzufügen können.

Dieses kurze Video enthält einen Überblick über den Vorgang.

Um in einer Windows Store-App mit C++, C# oder Visual Basic drucken zu können, muss die App folgende allgemeine Voraussetzungen erfüllen:

  • Für den Vertrag für "Drucken" registriert werden, und zwar in jeder Anzeige der App, in der Sie Benutzern das Drucken ermöglichen möchten.

    Durch die Registrierung für den Vertrag für "Drucken" wird ein PrintManager-Objekt abgerufen und ein PrintTask-Objekt erstellt, und die Druckereignisse werden behandelt.

  • Formatierten Inhalt zum Drucken bereitstellen.

    Die in dieser Schnellstartanleitung gezeigte Standarddruckoberfläche für Windows dient zum Drucken des Bildschirminhalts Ihrer App. Weitere Informationen zum Formatieren des Inhalts Ihrer App zum Drucken finden Sie unter Zusammenfassung und nächste Schritte.

Voraussetzungen

  • Sie müssen mit C# oder Visual Basic, XAML, Windows-Ereignissen und der Ereignisbehandlung vertraut sein.
  • Microsoft Visual Studio muss installiert sein.
  • Ein Drucker muss installiert sein.
  • Sie benötigen eine App, der Sie eine Druckfunktion hinzufügen möchten. Falls Sie keine eigene App haben, können Sie die Print Sample-Beispiel-App herunterladen und verwenden.

Anweisungen

1. Öffnen des App-Quellcodes zur Bearbeitung

In diesem Verfahren wird beschrieben, wie Sie die Print Sample-Beispiel-App öffnen. Falls Sie Ihre eigene App verwenden, öffnen Sie sie in Visual Studio, und fahren dann mit dem nächsten Schritt fort.

Wichtig  Die Codebeispiele in dieser Schnellstartanleitung beziehen sich auf die PrintSample-Beispiel-App. Um diese Beispiele in Ihrer eigenen App verwenden zu können, müssen Sie möglicherweise mehr Code aus der Beispiel-App hinzufügen.
 
  1. Öffnen Sie das Druckbeispiel für eine Windows Store-App, und laden Sie das C#-Beispiel auf Ihren Computer 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.

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. Vergewissern Sie sich, dass nach einigen Sekunden die App PrintSample 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.

3. Registrieren für Windows-Druckfunktionen

Sie sollten jetzt eine App haben, die einen Bildschirm mit Inhalt anzeigt.

Um Ihrer App Druckfunktionen hinzuzufügen, müssen Sie sie als Erstes für den Vertrag für "Drucken" registrieren. Die Registrierung ist für jeden Bildschirm erforderlich, auf dem der Benutzer drucken können soll.

Tipp  Falls das Drucken mehrerer Seiten in Ihrer App unterstützt werden soll, können Sie diesen Druckcode in eine allgemeine Basisklasse einfügen und die App-Seiten daraus ableiten. Ein entsprechendes Beispiel finden Sie in der BasePrintPage-Klasse in der Print Sample-Beispiel-App.
 
Hinweis  Es kann jeweils nur der Bildschirm, der gerade angezeigt wird, für das Drucken registriert werden. Wenn ein Bildschirm Ihrer App für das Drucken registriert wurde, muss die Registrierung beim Schließen des Bildschirms aufgehoben werden. Wird an seiner Stelle ein anderer Bildschirm angezeigt, muss dieser nächste Bildschirm beim Öffnen für einen neuen Vertrag für "Drucken" registriert werden.
 

Geben Sie zuerst den PrintManager und das PrintDocument an. Der PrintManager-Typ und Typen zur Unterstützung anderer Windows-Druckfunktionen befinden sich im Windows.Graphics.Printing-Namespace. Der PrintDocument-Typ und andere Typen zur Unterstützung der Vorbereitung von XAML-Inhalten für das Drucken sind im Windows.UI.Xaml.Printing-Namespace enthalten. Sie können das Schreiben eines eigenen Druckcodes vereinfachen, indem Sie der Seite die folgenden using- oder Imports-Anweisungen hinzufügen.


using Windows.Graphics.Printing;
using Windows.UI.Xaml.Printing;


Erstellen Sie die Registrierungsmethode zum Initialisieren der Eigenschaften, die Ihre App zum Drucken benötigt.

In der Print Sample-Beispiel-App ist diese Methode in der Basisklasse enthalten, die von den verschiedenen Anzeigen der App verwendet wird.


protected virtual void RegisterForPrinting()
{
    // Create the PrintDocument.
    printDocument = new PrintDocument();

    // Save the DocumentSource.
    printDocumentSource = printDocument.DocumentSource;

    // Add an event handler which creates preview pages.
    printDocument.Paginate += CreatePrintPreviewPages;

    // Add an event handler which provides a specified preview page.
    printDocument.GetPreviewPage += GetPrintPreviewPage;

    // Add an event handler which provides all final print pages.
    printDocument.AddPages += AddPrintPages;

    // Create a PrintManager and add a handler for printing initialization.
    PrintManager printMan = PrintManager.GetForCurrentView();
    printMan.PrintTaskRequested += PrintTaskRequested;

    // Initialize print content for this scenario
    PreparePrintContent();
}


Wenn der Benutzer die Seite aufruft, registrieren Sie sie zum Drucken, indem Sie Instanzen von PrintManager und PrintDocument erstellen und Handler für ihre Druckereignisse registrieren.


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // Get a pointer to our main page
    rootPage = e.Parameter as MainPage;

    // init printing 
    RegisterForPrinting();
}


Wenn der Benutzer die Seite verlässt, trennen Sie die Verbindung mit den Druckereignishandlern. Falls Sie bei einer App mit mehreren Seiten die Verbindung nicht trennen, wird eine Ausnahme ausgelöst, wenn der Benutzer die Seite verlässt und sie dann erneut aufruft.


protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    UnregisterForPrinting();
}


4. Formatieren der App-Inhalte für das Drucken

Die Windows-Druckfunktion löst Ereignisse aus, wenn der Benutzer drucken möchte und die App den formatierten Inhalt für den Druck bereitstellen soll.

Wenn ein Benutzer auf dem Charm "Geräte" einen Drucker auswählt, wird das PrintTaskRequested-Ereignis ausgelöst. Der in diesem Schritt gezeigte PrintTaskRequested-Ereignishandler erstellt eine PrintTask, indem er die PrintTaskRequest.CreatePrintTask-Methode aufruft und den Titel für die zu druckende Seite sowie den Namen eines PrintTaskSourceRequestedHandler-Delegaten übergibt. Beachten Sie, dass der PrintTaskSourceRequestedHandler in diesem Beispiel inline definiert wird. Der PrintTaskSourceRequestedHandler stellt den formatierten Inhalt für das Drucken bereit und wird an späterer Stelle beschrieben.

In diesem Beispiel wurde außerdem ein Abschlusshandler definiert, um Fehler aufzufangen. Es empfiehlt sich, Abschlussereignisse zu behandeln, da die App den Benutzer dann über aufgetretene Fehler und mögliche Lösungen informieren kann. Die App kann das Abschlussereignis auch verwenden, um nachfolgende Schritte anzugeben, die der Benutzer nach einem erfolgreichen Druckauftrag ausführen kann.


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 Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        rootPage.NotifyUser("Failed to print.", NotifyType.ErrorMessage);
                    });
                }
            };

            sourceRequested.SetSource(printDocumentSource);
        });
} 


Nachdem die Druckaufgabe erstellt wurde, löst der PrintManager das Paginate-Ereignis aus, um eine Auflistung zu druckender Seiten anzufordern, die in der Druckvorschau-Benutzeroberfläche angezeigt werden. Im Paginate-Ereignishandler erstellen Sie die Seiten, die in der Druckvorschau-Benutzeroberfläche angezeigt und an den Drucker gesendet werden. Der Code zum Vorbereiten der App-Inhalte für den Druck muss speziell an Ihre App und die gedruckten Inhalte angepasst werden.

Dieses Beispiel eines Paginate-Ereignishandlers stammt aus der Print Sample-Beispiel-App. Im Quellcode der Beispiel-App können Sie sehen, wie der Inhalt für das Drucken formatiert wird.


protected virtual void CreatePrintPreviewPages(object sender, PaginateEventArgs e)
{
    // Clear the cache of preview pages 
    printPreviewPages.Clear();
    
    // Clear the printing root of preview pages
    PrintingRoot.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 (pagesCreated != null)
    {
        pagesCreated.Invoke(printPreviewPages, null);
    }

    PrintDocument printDoc = (PrintDocument)sender;

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


In vorherigen Beispiel wird ein sehr einfaches Druckszenario dargestellt. Es wird nur eine Seite erstellt. Der Inhalt wird skaliert, um den gesamten verfügbaren Bereich auszufüllen. Andere Themen in diesem Abschnitt enthalten Beispiele mit umfangreicheren Druckszenarien.

Im AddPages-Ereignishandler fügen Sie dem PrintDocument-Objekt, das an den Drucker gesendet werden soll, Seiten aus der Seitenauflistung hinzu. Wenn ein Benutzer bestimmte Seiten oder einen Seitenbereich zum Drucken angibt, verwenden Sie diese Informationen, um nur die Seiten hinzuzufügen, die tatsächlich an den Drucker gesendet werden.

Dieses Beispiel eines AddPages-Ereignishandlers stammt aus der Print Sample-Beispiel-App.


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


Zusammenfassung und nächste Schritte

In dieser Schnellstartanleitung haben Sie Ihrer App eine Windows-Druckfunktion hinzugefügt, ohne die Art und Weise zu ändern, wie Benutzer mit der App interagieren.

Im nächsten Lernprogramm, So wird's gemacht: Drucken mithilfe einer App-internen Druckschaltfläche, rufen Sie Druckfunktionen mit einer Druckschaltfläche in der Windows Store-App mit C++, C# oder Visual Basic auf. Dort können Sie sich mit einigen erweiterten Druckfunktionen befassen.

Sie können in Ihrer App noch weitere Druckoptionen für Benutzer bereitstellen. Informationen dazu finden Sie unter So wird's gemacht: Ändern von Standardoptionen auf der Druckvorschau-UI und So wird's gemacht: Hinzufügen von benutzerdefinierten Optionen zur Druckvorschau-UI.

Weitere Druckszenarien für Windows Store-Apps finden Sie im Druckbeispiel für eine Windows Store-App.

Verwandte Themen

Roadmap für Windows-Runtime-Apps mit C# oder Visual Basic

 

 

Anzeigen:
© 2017 Microsoft