Pysar.Wpf
0.1.63
dotnet add package Pysar.Wpf --version 0.1.63
NuGet\Install-Package Pysar.Wpf -Version 0.1.63
<PackageReference Include="Pysar.Wpf" Version="0.1.63" />
<PackageVersion Include="Pysar.Wpf" Version="0.1.63" />
<PackageReference Include="Pysar.Wpf" />
paket add Pysar.Wpf --version 0.1.63
#r "nuget: Pysar.Wpf, 0.1.63"
#:package Pysar.Wpf@0.1.63
#addin nuget:?package=Pysar.Wpf&version=0.1.63
#tool nuget:?package=Pysar.Wpf&version=0.1.63
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.63)
- 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.
## Avalonia fonts
**Report fonts can come from Avalonia `FontManager`.**
`UsePysar` installs a typeface fallback before your configuration. The family string in the report must be the Avalonia `FontFamily` string — `fonts:Inter#Inter` after `WithInterFont`, or `avares://MyApp/Fonts#Ubuntu` for a resource folder — not a file path. A bare name is a system-font lookup; if `TryGetGlyphTypeface` substitutes Helvetica, Pysar treats that as a miss.
`AddFont` still wins. A library `ReportAsset` still needs one `AddFont`: the file is not copied into the head, and `FontManager` does not see it. A XAML `FontFamily` resource is not a registration. Styles stay `Normal`, `Bold`, `Italic` and `BoldItalic`. This bridge is Avalonia only. Console, the design-time preview, MAUI, WPF and Uno keep `AddFont`.
## PDF export
**PDF/A-2b is an option of PDF, not another format.**
Pass `new PdfExportOptions { PdfA = true }` to `SavePdfAsync`, `RenderToPdfAsync`, `RenderToPdfBytesAsync`, or `IReportExportService.ExportAsync`. Skia writes the archival document setup: XMP `pdfaid` identification, a document UUID, and an sRGB output intent. It does not validate the file. A font Skia cannot embed still fails a checker, and the UUID makes those bytes non-reproducible. Existing overloads are unchanged.
## Images
**SVG is drawn from the bytes, not only from a `.svg` path.**
A stream or embedded source whose bytes start with `<svg` (optional XML declaration) is rendered as SVG. A decode or parse failure is recorded on the image cache, so the same bad bytes are not decoded again. Fixes #23.
## Rendering
**A built report may be rendered more than once, only sequentially.**
PDF and then page bitmaps, or a retry of the same export, is supported. Do not render one instance concurrently. `PageNumber` and `PageCount` are scratch written during the pass, and `OnPageChanged` runs again on every render.
## Uno
**Android report pages no longer depend on OpenGL ES.**
`UsePysar` sets `UseOpenGLOnSkiaAndroid` to false before the window is created. OpenGL ES draws image textures as opaque black, which hid every report page.
## Internal
- Host startup (Avalonia, MAUI, WPF, Uno) shares one installation sequence, `PysarInstallation`.
- `InternalsVisibleTo` for `Pysar.Avalonia` and `Pysar.Avalonia.Tests`.
**Full changelog:** v0.1.56...HEAD