XPS-Dokumente aus WPF-Anwendung heraus erstellen

Um aus einer WPF-Anwendung heraus zu drucken bzw. ein druckbares Dokument zu generieren, bietet sich ein FlowDocument an, das bequem in XAML geschrieben und formatiert werden kann. Über Datenbindung können dann Platzhalter mit konkreten Inhalten belegt werden, indem das Dokument per XamlReader instanziiert wird und, durch Zuweisung an die Eigenschaft DataContext, Daten gebunden werden. Leider scheint das aber nur zu funktionieren, wenn anschließend noch mindestens ein Dispatcher-Aufruf erfolgt. Diese lässt sich aber leicht mit folgender Code-Zeile durchführen:

Dispatcher.CurrentDispatcher.Invoke(
    DispatcherPriority.SystemIdle,
    new DispatcherOperationCallback(arg => null),
    null);

Dieses Dokument kann nun gedruckt oder als XPS gespeichert werden. Letzteres ist zumindest für mich ein akzeptabler Ersatz für PDF und lässt sich mithilfe des XpsSerializationManager leicht bewerkstelligen.
Zu Berücksichtigen ist dabei jedoch, dass hier Zeichenressourcen genutzt werden, die nur in einem STA-Thread laufen dürfen, weswegen die ganze Operation durch einen entsprechenden Aufruf gekapselt werden muss:

Thread thread = new Thread(WriteXpsDocument);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();