Pysar.Wpf
0.1.53
See the version list below for details.
dotnet add package Pysar.Wpf --version 0.1.53
NuGet\Install-Package Pysar.Wpf -Version 0.1.53
<PackageReference Include="Pysar.Wpf" Version="0.1.53" />
<PackageVersion Include="Pysar.Wpf" Version="0.1.53" />
<PackageReference Include="Pysar.Wpf" />
paket add Pysar.Wpf --version 0.1.53
#r "nuget: Pysar.Wpf, 0.1.53"
#:package Pysar.Wpf@0.1.53
#addin nuget:?package=Pysar.Wpf&version=0.1.53
#tool nuget:?package=Pysar.Wpf&version=0.1.53
Pysar.Wpf
WPF integration for Pysar, a cross-platform report engine for
.NET: pack URI and assembly manifest asset access, font registration, a scrollable, zoomable
ReportView, and printing. It installs a DefaultReportPlatformHandler over WpfAssetFileSystem for file and font access.
Windows only. On macOS and Linux the package is not produced; the real WPF sources compile only
under net10.0-windows.
Setup
Call UsePysar from Application.OnStartup:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
this.UsePysar(pysar => pysar
.AddFont("Fonts/Ubuntu-Regular.ttf", "Ubuntu")
.AddFont("Fonts/Ubuntu-Bold.ttf", "Ubuntu", FontStyle.Bold));
}
Showing a report
<pysar:ReportView Report="{Binding Report}"
ZoomMode="FitWidth"
Zoom="{Binding Zoom}"
EffectiveZoom="{Binding EffectiveZoom, Mode=OneWayToSource}"
CurrentPage="{Binding CurrentPage}"
PageSpacing="24" />
Ctrl + wheel zooms around the pointer; a plain wheel scrolls; double-click toggles fit width and
close-up. PageBorderColor and PageBorderThickness frame each page; PageSpacing is the gap
between pages and does not scale with the zoom. Bind EffectiveZoom to show the zoom percentage —
Zoom holds what was asked for, not what the view settled on.
Printing
Printing uses the same vector PDF pipeline as export:
var printer = new WpfReportPrinter(ReportViewRenderer.Instance);
await printer.PrintAsync(builtReport);
The report must already have Build() called.
Documentation
License
MIT — see LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0-windows7.0 is compatible. |
-
net10.0-windows7.0
- HarfBuzzSharp (>= 14.2.1.1)
- HarfBuzzSharp.NativeAssets.Linux (>= 14.2.1.1)
- HarfBuzzSharp.NativeAssets.macOS (>= 14.2.1.1)
- HarfBuzzSharp.NativeAssets.Win32 (>= 14.2.1.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.11)
- Pysar.Viewer (>= 0.1.53)
- SkiaSharp (>= 4.151.2)
- SkiaSharp.NativeAssets.Linux (>= 4.151.2)
- SkiaSharp.NativeAssets.macOS (>= 4.151.2)
- SkiaSharp.NativeAssets.Win32 (>= 4.151.2)
- Svg.Skia (>= 5.2.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
## Highlights
### `ReportAsset` — a single way to ship report assets
Fonts, images and other report resources can now be declared once as a
`ReportAsset` MSBuild item. The build translates it into each host framework's
own item type (`MauiAsset`, `AvaloniaResource`, `EmbeddedResource`, …), and a new
`EmbeddedAssetFileSystem` reads assets straight from the manifest resources of
assemblies marked with `[PysarAssetSource]`. This means a shared report library
can carry its own fonts and images, and every host can see them.
A new `FallbackFileSystem` chains the platform's own asset source ahead of the
embedded one. All five UI platforms (MAUI, WPF, Avalonia, Uno, Blazor) and both
disk-backed `DefaultReportPlatformHandler` constructors install this chain, so
console apps, workers, server-side rendering and the design-time preview resolve
embedded assets too.
> An `IFileSystem` you pass explicitly is **not** widened — it stays the caller's
> whole answer.
### Trimming support
`Pysar.dll` now embeds an `ILLink.Descriptors.xml`, and `Pysar.Xaml` ships a
`build/Pysar.Xaml.targets` that auto-generates an embedded trimmer descriptor for
any project containing `.rxaml` reports (opt out with `PysarDisableTrimmerRoots`).
See `docs/trimming.md` for WebAssembly trimming behaviour.
### Avalonia: shared renderer and export
New `PysarAvalonia` entry point with a shared renderer/export service and proper
reset logic behind `AppBuilderExtensions`, plus headless Avalonia tests.
### Platform layer refactor
Platform-specific handlers are replaced by `DefaultReportPlatformHandler` backed
by per-platform `IFileSystem` implementations. Desktop/macOS printing and the
macOS pinch monitor moved into `Pysar.Viewer.Platform`, and desktop print logic is
centralised in `DesktopPdfPrint`. Obsolete platform shims were removed.
## Performance
- **`ImageRenderCache`** — a session-scoped cache for image bytes, bitmaps and
SVGs, wired into both the prefetch and draw paths, with failure tracking and
deterministic disposal.
- **Faster layout** — `GridLayoutMeasurer`, `StackLayoutMeasurer`, `TextMeasurer`
and `LayoutEngine` were reworked; `BindingEngine` and `PropertyPathResolver`
were optimised.
- Removed the `#if DEBUG` `[Pysar.Perf]` zoom instrumentation that logged to the
console in every consumer's Debug build.
## Fixes
- **Stale pinch-zoom tiles** — rapid pinch commits could leave superseded zoom
generations in the tile cache, keeping cells from older scales on screen. Only
the active generation and one bridge generation are kept now.
- **Touch axis lock** — `ReportView` locks a swipe to its dominant axis, so
scrolling no longer drifts sideways.
- **WPF printing** — the printer now imports the viewer platform namespace it
needs for the print flow.
## Authoring and tooling
- XAML source generation: richer binding validation with namespace/name
collection and real diagnostics.
- New API surface: `StyleExtensions.WithStyle`, `AddElements` overloads on
`ReportContainer`, `PysarBuilder.AddFonts`, and a default `Band` height.
- Quick start and the MAUI/Uno/Avalonia READMEs now document `ReportAsset`
instead of hand-declared asset items.
## Breaking changes
- **`MeasureAsync` / `ProbeAsync` are now synchronous `Measure` / `Probe`**
throughout the layout and rendering pipeline. Custom element measurers and any
code calling the measure API must drop `await` and the `Task` return type.
- **Platform handler types removed** — `MauiReportPlatformHandler`,
`WpfReportPlatformHandler` and `AvaloniaReportPlatformHandler` are gone; use
`DefaultReportPlatformHandler` (installed for you by `UsePysar` /
`AddPysar` / `UsePysar()` on the app builder).
- `IImageCache` / `LocalImageCache` lost members superseded by `ImageRenderCache`.
- `PysarWpf` and `Pysar.Avalonia.ReportView` helper shims were removed.
## Tests
~2,000 lines of new test coverage: embedded-asset and fallback file systems,
per-platform asset chains, pinch-commit placement, image-render caching, PDF
print on desktop, trimmer roots and package layout, and binding validation.