Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified docs/assets/aspnet/project.zip
Binary file not shown.
10 changes: 5 additions & 5 deletions docs/assets/aspnet/source.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"source": "https://github.com/fullbleed-engine/docs/tree/main/examples/aspnet",
"framework": "net10.0",
"package": "FullBleed.DotNet",
"packageVersion": "0.1.5",
"projectZipSha256": "32682ad7a59bdaca0f9c89f40cfdb5295470795d648bb169ed117d0c0cb4c713",
"packageVersion": "0.1.6",
"projectZipSha256": "d1ae5a403f64f1d9c1037d63c90f4b3eac55762af7a7d83ceca529c7e542fa4a",
"files": [
{
"path": "Assets/fonts/BebasNeue-OFL.txt",
Expand Down Expand Up @@ -63,7 +63,7 @@
{
"path": "FullbleedWeb.csproj",
"bytes": 534,
"sha256": "2bc53bcbbc531d70bd1c1807b79cb45802963897f062994b50b401d7ae31e6c7"
"sha256": "e8be83f61609d89459784ccb714a9f69770114da888cac266284d03f193ae23a"
},
{
"path": "InvoiceRenderer.cs",
Expand All @@ -83,7 +83,7 @@
{
"path": "README.md",
"bytes": 2460,
"sha256": "b03e0964a7fe57921a94729b0b7b3b304fa3bbeb623be4956345141c647921a6"
"sha256": "8ba0734422df2353c8d0ed692877bcff9d34a562e3601454d810c988c860a42c"
},
{
"path": "global.json",
Expand All @@ -93,7 +93,7 @@
{
"path": "packages.lock.json",
"bytes": 305,
"sha256": "afc891b007fd4475a4bd71b62f8942e930e9c15d0c54145e249ab6dd0597b35c"
"sha256": "7b946040ffcf764a043bde1bac3b28cf40bb758b4f983ba99a809acaa377868b"
}
],
"outputs": {
Expand Down
10 changes: 5 additions & 5 deletions docs/assets/aspnet/verification.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
{
"ok": true,
"checkedAt": "2026-10-06T18:50:48.109029+00:00",
"checkedAt": "2026-10-07T03:17:42.756735+00:00",
"platform": "Windows",
"architecture": "AMD64",
"runtime": "10.0.12",
"framework": "net10.0",
"package": "FullBleed.DotNet",
"packageVersion": "0.1.5",
"engineVersion": "2.5.10",
"packageSha256": "9ef3696b303c82679e4cb0ad4f0ab2da9d0c10f7f73283fd443f49dd8d459eef",
"packageVersion": "0.1.6",
"engineVersion": "2.5.11",
"packageSha256": "eff0aec8678dc2b974c8bd9f1a98cba5e4583f0d67e84ab1f9ae70b4b40c848d",
"freshNuGetCache": true,
"projectZipSha256": "32682ad7a59bdaca0f9c89f40cfdb5295470795d648bb169ed117d0c0cb4c713",
"projectZipSha256": "d1ae5a403f64f1d9c1037d63c90f4b3eac55762af7a7d83ceca529c7e542fa4a",
"pdfSha256": "6f898f935a5491572e5b6222428cc861c8d131694a73c441036e8545f477367f",
"previewSha256": "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7",
"commands": [
Expand Down
26 changes: 17 additions & 9 deletions docs/getting-started/dotnet.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: Install FullBleed.DotNet from NuGet, render a PDF from C#, and run
---
# Generate PDFs from C# and .NET

[`FullBleed.DotNet`](https://www.nuget.org/packages/FullBleed.DotNet/0.1.5)
[`FullBleed.DotNet`](https://www.nuget.org/packages/FullBleed.DotNet/0.1.6)
brings Fullbleed's Rust rendering engine into a .NET process. Use static HTML
and CSS to create invoices, reports, and variable-data documents. Native
rendering needs neither Python nor a browser.
Expand All @@ -16,7 +16,7 @@ With the .NET 10 SDK installed:
```bash
dotnet new console -n InvoiceDemo --framework net10.0
cd InvoiceDemo
dotnet add package FullBleed.DotNet --version 0.1.5
dotnet add package FullBleed.DotNet --version 0.1.6
```

Replace `Program.cs` with:
Expand All @@ -40,14 +40,14 @@ Console.WriteLine($"Created invoice.pdf: {inspection.PageCount} page(s).");

Run `dotnet run` and open `invoice.pdf` in the project directory. You can also
return the bytes from an HTTP handler or write them to your own storage.
The first example uses standard PDF fonts. Register explicit font files for
your document's typography, character coverage, and portable PNG previews.
Native previews of unembedded standard fonts use host-font fallbacks and can
vary between machines; the designed example below embeds its fonts.
The first example uses standard PDF fonts. Their PNG previews now use bundled
outline substitutes, so they work without system fonts. Register explicit font
files for your chosen type design and character coverage; the designed example
below embeds its fonts.

The package's managed library targets `net8.0`; your application can target
`net8.0`, `net9.0`, or `net10.0`. It contains native libraries for Windows x64,
Linux x64, Intel macOS, and Apple Silicon macOS. It pins Fullbleed 2.5.10.
Linux x64, Intel macOS, and Apple Silicon macOS. It pins Fullbleed 2.5.11.
The managed assembly has no third-party NuGet runtime dependencies.

Use .NET 10 LTS for a new application. Microsoft lists November 10, 2026 as
Expand All @@ -58,6 +58,14 @@ The [package verification workflow](https://github.com/fullbleed-engine/fullblee
checks the actual runtime and compares fixture PDFs and previews across all
three .NET versions and the four native platforms.

Version 0.1.6 also checks 52 font fixtures across those twelve consumers:
Helvetica, Times and Courier in their regular/bold/italic variants, plus an
embedded-font control, through ordinary and compiled rendering. A separate
Linux check hides system fonts and rejects the blank previews from public
0.1.5. The corrected previews retain the same PDF bytes and embedded-font
controls. These checks cover the retained fixtures, not every font or document.
[Inspect the 0.1.6 evidence](https://github.com/fullbleed-engine/fullbleed-dotnet/releases/tag/v0.1.6).

## Run a designed invoice

The Northstar sample combines explicit fonts, CSS grid, tables, print
Expand Down Expand Up @@ -147,8 +155,8 @@ For a web application, download the [ASP.NET Core PDF starter](../guides/aspnet-
It includes a download page, styled invoice, private responses, and checks against
the published application artifact.

[.NET API reference](https://github.com/fullbleed-engine/fullbleed-dotnet/blob/v0.1.5/docs/api.md)
· [LINQ and variable-data example](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.5/samples/FullBleed.DotNet.LinqVdp)
[.NET API reference](https://github.com/fullbleed-engine/fullbleed-dotnet/blob/v0.1.6/docs/api.md)
· [LINQ and variable-data example](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.6/samples/FullBleed.DotNet.LinqVdp)
· [CSS coverage](../css-coverage.md)
· [More document designs](../examples.md)
· [Report a .NET issue](https://github.com/fullbleed-engine/fullbleed-dotnet/issues)
4 changes: 2 additions & 2 deletions docs/guides/aspnet-pdf.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ dotnet run -c Release --no-restore -- --urls http://127.0.0.1:5080
Open `http://127.0.0.1:5080` and choose **Download sample PDF**. The browser
downloads `invoice-NS-1042.pdf` from `/invoices/NS-1042/pdf` and stays on the page.

The lockfile pins the public `FullBleed.DotNet` **0.1.5** package, which contains
engine **2.5.10**. For a console app or the broader native API, use the
The lockfile pins the public `FullBleed.DotNet` **0.1.6** package, which contains
engine **2.5.11**. For a console app or the broader native API, use the
[C# and .NET quickstart](../getting-started/dotnet.md).

## Return PDF bytes as an attachment
Expand Down
4 changes: 2 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ Pick your application stack. Generate a PDF locally or download one from the bro
```bash
dotnet new console -n InvoiceDemo --framework net10.0
cd InvoiceDemo
dotnet add package FullBleed.DotNet --version 0.1.5
dotnet add package FullBleed.DotNet --version 0.1.6
```

Replace `Program.cs` with:
Expand Down Expand Up @@ -218,7 +218,7 @@ Pick your application stack. Generate a PDF locally or download one from the bro

Open `invoice.pdf`. This first example uses standard PDF fonts. Existing .NET 8 and 9 applications can use the same package; see the guide for platform support and explicit fonts.

[C# and .NET quickstart →](getting-started/dotnet.md) · [LINQ and variable data](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.5/samples/FullBleed.DotNet.LinqVdp)
[C# and .NET quickstart →](getting-started/dotnet.md) · [LINQ and variable data](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.6/samples/FullBleed.DotNet.LinqVdp)

## Pick a document to build

Expand Down
2 changes: 1 addition & 1 deletion examples/aspnet/FullbleedWeb.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FullBleed.DotNet" Version="0.1.5" />
<PackageReference Include="FullBleed.DotNet" Version="0.1.6" />
<Content Include="Assets/**/*" CopyToOutputDirectory="PreserveNewest" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion examples/aspnet/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Fullbleed PDF downloads in ASP.NET Core

A .NET 10 Minimal API that generates a fictional Northstar invoice from bundled HTML, CSS, and fonts. Uses the public `FullBleed.DotNet` 0.1.5 NuGet package (engine 2.5.10).
A .NET 10 Minimal API that generates a fictional Northstar invoice from bundled HTML, CSS, and fonts. Uses the public `FullBleed.DotNet` 0.1.6 NuGet package (engine 2.5.11).

```sh
dotnet restore --locked-mode
Expand Down
6 changes: 3 additions & 3 deletions examples/aspnet/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
"net10.0": {
"FullBleed.DotNet": {
"type": "Direct",
"requested": "[0.1.5, )",
"resolved": "0.1.5",
"contentHash": "JQenfVuPx1Tn5O8fZIz28rRFobP/51LPH5N1ROdZfnrVMeBZA47W2moSUwYtn63p1qfrGLElQlxckXKQw7CKRg=="
"requested": "[0.1.6, )",
"resolved": "0.1.6",
"contentHash": "aw/XplkgXTk62YDDg6yVK5XxS42Y490NszRch9DGCnjC5i/+tQV2QEMAFXyCACcBmQhqN7y/0c3cM7s0aWH2Xg=="
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion examples/dotnet/NorthstarInvoice.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FullBleed.DotNet" Version="0.1.5" />
<PackageReference Include="FullBleed.DotNet" Version="0.1.6" />
<None Include="../../docs/assets/showcase/invoice.html" Link="Assets/invoice.html" CopyToOutputDirectory="PreserveNewest" />
<None Include="../../docs/assets/showcase/invoice.css" Link="Assets/invoice.css" CopyToOutputDirectory="PreserveNewest" />
<None Include="../../docs/assets/playground/fonts/*" Link="Assets/fonts/%(Filename)%(Extension)" CopyToOutputDirectory="PreserveNewest" />
Expand Down
2 changes: 1 addition & 1 deletion tools/build_aspnet_starter.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def build():
(ASSETS / "project.zip").write_bytes(archive)
manifest = {
"source": "https://github.com/fullbleed-engine/docs/tree/main/examples/aspnet",
"framework": "net10.0", "package": "FullBleed.DotNet", "packageVersion": "0.1.5",
"framework": "net10.0", "package": "FullBleed.DotNet", "packageVersion": "0.1.6",
"projectZipSha256": digest(archive),
"files": [{"path": name, "bytes": len(data), "sha256": digest(data)} for name, data in files.items()],
"outputs": {name: digest((ASSETS / name).read_bytes()) for name in ["invoice.pdf", "invoice.png"]},
Expand Down
2 changes: 1 addition & 1 deletion tools/verify_aspnet_starter.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ def concurrent_request(_):
package = installed / f"fullbleed.dotnet.{version}.nupkg"
provenance = json.loads((installed / "native-provenance.json").read_text(encoding="utf-8"))
engine = next(item for item in provenance["dependencies"] if item["name"] == "fullbleed")
assert version == "0.1.5" and engine["version"] == "2.5.10"
assert version == "0.1.6" and engine["version"] == "2.5.11"
report = {
"ok": True, "checkedAt": datetime.now(timezone.utc).isoformat(),
"platform": platform.system(), "architecture": platform.machine(),
Expand Down
Loading