This is the standard setup for a desktop Avalonia app that wants automatic adapter selection and reusable preview UI.
dotnet add package PrintingTools
dotnet add package PrintingTools.UI
using Avalonia;
using PrintingTools;
using PrintingTools.Core;
AppBuilder.Configure<App>()
.UsePlatformDetect()
.UsePrintingTools(options =>
{
options.EnablePreview = true;
options.DiagnosticSink = evt =>
Console.WriteLine($"[{evt.Category}] {evt.Message}");
})
.StartWithClassicDesktopLifetime(args);
UsePrintingTools(...) configures PrintServiceRegistry and resolves the right adapter for the active OS.
using PrintingTools.Core;
var manager = PrintServiceRegistry.EnsureManager();
var document = PrintDocument.FromVisual(myPrintableControl);
var request = new PrintRequest(document)
{
Description = "Quarterly summary",
Ticket = PrintTicketModel.CreateDefault(),
Options = new PrintOptions
{
ShowPrintDialog = true,
UseVectorRenderer = true
}
};
var session = await manager.RequestSessionAsync(request);
var preview = await manager.CreatePreviewAsync(session);
using PrintingTools.UI.Controls;
using PrintingTools.UI.ViewModels;
var viewModel = new PrintPreviewViewModel(preview.Pages, preview.VectorDocument);
viewModel.LoadPrinters(await manager.GetPrintersAsync(), session.Printer?.Id, session.Printer?.Name);
var window = new PrintPreviewWindow
{
DataContext = viewModel
};
await window.ShowDialog(owner);
await manager.PrintAsync(session);
PageSetupDialog to let users adjust margins, orientation, and layout modes before printing.PrintingToolsOptions.DiagnosticSink or PrintDiagnostics.RegisterSink.