Pysar.Viewer 0.1.53

There is a newer version of this package available.
See the version list below for details.
dotnet add package Pysar.Viewer --version 0.1.53
                    
NuGet\Install-Package Pysar.Viewer -Version 0.1.53
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Pysar.Viewer" Version="0.1.53" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Pysar.Viewer" Version="0.1.53" />
                    
Directory.Packages.props
<PackageReference Include="Pysar.Viewer" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Pysar.Viewer --version 0.1.53
                    
#r "nuget: Pysar.Viewer, 0.1.53"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Pysar.Viewer@0.1.53
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Pysar.Viewer&version=0.1.53
                    
Install as a Cake Addin
#tool nuget:?package=Pysar.Viewer&version=0.1.53
                    
Install as a Cake Tool

Pysar.Viewer

Framework-neutral viewer logic for Pysar, a cross-platform report engine for .NET: page geometry, zoom, tile planning and the tile cache. It depends on the core Pysar package and is the shared core behind every platform-specific ReportView control.

A built report renders as scrollable, zoomable pages, rasterised one visible tile at a time. Only the visible region is rasterised, so memory follows the size of the viewport rather than the zoom level.

This package is not referenced directly — it arrives transitively with a platform package, which supplies the actual UI control:

Platform package Control
Pysar.Maui .NET MAUI ReportView
Pysar.Avalonia Avalonia ReportView
Pysar.Wpf WPF ReportView (Windows only)
Pysar.Blazor Blazor <ReportView> component

The properties are the same on every platform. PageBorderColor and PageBorderThickness frame each page, which is what tells a page from the surface behind it when both are light; the line is drawn outside the paper, so the report itself is never covered by it. PageSpacing is the gap between two pages, in device independent units — it does not scale with the zoom, so the gap looks the same however far in the reader is.

A fit mode resolves to a factor only the control knows, so bind EffectiveZoom to show the percentage: Zoom holds what was asked for, not what the view settled on.

Documentation

License

MIT — see LICENSE.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (5)

Showing the top 5 NuGet packages that depend on Pysar.Viewer:

Package Downloads
Pysar.Blazor

A Blazor WebAssembly report viewer for Pysar.

Pysar.Wpf

WPF integration for Pysar: application asset access, font registration, scrollable zoomable report view, and printing.

Pysar.Maui

.NET MAUI integration for Pysar: application-package asset access, font registration, PDF export and sharing.

Pysar.Avalonia

Avalonia integration for Pysar: application asset access, font registration and a scrollable, zoomable report view.

Pysar.Uno

Uno Platform integration for Pysar: application asset access, font registration, a scrollable, zoomable report view, PDF printing and sharing.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.63 75 10/1/2026
0.1.56 130 9/20/2026
0.1.53 116 9/20/2026
0.1.46 128 9/18/2026
0.1.44 124 9/16/2026
0.1.41 125 9/15/2026
0.1.38 129 9/14/2026
0.1.34 117 9/13/2026
0.1.31 124 9/11/2026
0.1.24 129 9/6/2026
0.1.10 127 8/30/2026
0.1.0 125 8/30/2026

## 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.