diff --git a/docs/assets/aspnet/invoice.pdf b/docs/assets/aspnet/invoice.pdf
index a6b406a..5d0ebed 100644
Binary files a/docs/assets/aspnet/invoice.pdf and b/docs/assets/aspnet/invoice.pdf differ
diff --git a/docs/assets/aspnet/invoice.png b/docs/assets/aspnet/invoice.png
index 82d648f..5918b8c 100644
Binary files a/docs/assets/aspnet/invoice.png and b/docs/assets/aspnet/invoice.png differ
diff --git a/docs/assets/aspnet/project.zip b/docs/assets/aspnet/project.zip
index f4ba320..2a296c2 100644
Binary files a/docs/assets/aspnet/project.zip and b/docs/assets/aspnet/project.zip differ
diff --git a/docs/assets/aspnet/source.json b/docs/assets/aspnet/source.json
index f345bd6..0a48e59 100644
--- a/docs/assets/aspnet/source.json
+++ b/docs/assets/aspnet/source.json
@@ -2,8 +2,8 @@
"source": "https://github.com/fullbleed-engine/docs/tree/main/examples/aspnet",
"framework": "net10.0",
"package": "FullBleed.DotNet",
- "packageVersion": "0.1.4",
- "projectZipSha256": "7a9d054b017c095c14d0505f9baa2aae43d32988df0005be9703e3ace59d1eea",
+ "packageVersion": "0.1.5",
+ "projectZipSha256": "32682ad7a59bdaca0f9c89f40cfdb5295470795d648bb169ed117d0c0cb4c713",
"files": [
{
"path": "Assets/fonts/BebasNeue-OFL.txt",
@@ -57,13 +57,13 @@
},
{
"path": "Assets/invoice.png",
- "bytes": 107399,
- "sha256": "b76f6db748fb47b928c93c12fe788de94a0f5d8da4bb350f644a58705c163cf7"
+ "bytes": 107272,
+ "sha256": "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7"
},
{
"path": "FullbleedWeb.csproj",
"bytes": 534,
- "sha256": "493b38713bc78bc357a5e32bd58ea1874400e2f56896b007678e0cbe62fb5cde"
+ "sha256": "2bc53bcbbc531d70bd1c1807b79cb45802963897f062994b50b401d7ae31e6c7"
},
{
"path": "InvoiceRenderer.cs",
@@ -82,8 +82,8 @@
},
{
"path": "README.md",
- "bytes": 2459,
- "sha256": "4c1d6e152dc8933c68bdad18dadb94f603257c8a34c7676d79a6cdb2706244f3"
+ "bytes": 2460,
+ "sha256": "b03e0964a7fe57921a94729b0b7b3b304fa3bbeb623be4956345141c647921a6"
},
{
"path": "global.json",
@@ -93,11 +93,11 @@
{
"path": "packages.lock.json",
"bytes": 305,
- "sha256": "5d2cb65ec0a0e20e0d778031a972b2c0721af071ac203dc094deb4115513f873"
+ "sha256": "afc891b007fd4475a4bd71b62f8942e930e9c15d0c54145e249ab6dd0597b35c"
}
],
"outputs": {
- "invoice.pdf": "14231c2df650d409828765b93dc528ea0f5dcf76cce99b0ec2d88437fa101ab8",
- "invoice.png": "b76f6db748fb47b928c93c12fe788de94a0f5d8da4bb350f644a58705c163cf7"
+ "invoice.pdf": "6f898f935a5491572e5b6222428cc861c8d131694a73c441036e8545f477367f",
+ "invoice.png": "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7"
}
}
diff --git a/docs/assets/aspnet/verification.json b/docs/assets/aspnet/verification.json
index e4c7c91..10dad45 100644
--- a/docs/assets/aspnet/verification.json
+++ b/docs/assets/aspnet/verification.json
@@ -1,18 +1,18 @@
{
"ok": true,
- "checkedAt": "2026-10-05T23:51:58.635000+00:00",
+ "checkedAt": "2026-10-06T18:50:48.109029+00:00",
"platform": "Windows",
"architecture": "AMD64",
"runtime": "10.0.12",
"framework": "net10.0",
"package": "FullBleed.DotNet",
- "packageVersion": "0.1.4",
- "engineVersion": "2.5.8",
- "packageSha256": "543a709296e18f4ced53cfe154f2b526a8f4416c7cad266dc58b6572f56d5df6",
+ "packageVersion": "0.1.5",
+ "engineVersion": "2.5.10",
+ "packageSha256": "9ef3696b303c82679e4cb0ad4f0ab2da9d0c10f7f73283fd443f49dd8d459eef",
"freshNuGetCache": true,
- "projectZipSha256": "7a9d054b017c095c14d0505f9baa2aae43d32988df0005be9703e3ace59d1eea",
- "pdfSha256": "14231c2df650d409828765b93dc528ea0f5dcf76cce99b0ec2d88437fa101ab8",
- "previewSha256": "b76f6db748fb47b928c93c12fe788de94a0f5d8da4bb350f644a58705c163cf7",
+ "projectZipSha256": "32682ad7a59bdaca0f9c89f40cfdb5295470795d648bb169ed117d0c0cb4c713",
+ "pdfSha256": "6f898f935a5491572e5b6222428cc861c8d131694a73c441036e8545f477367f",
+ "previewSha256": "72420749ccc3deaa8025daf7baffcdf79be716b6e8e93ed605effebed01e86c7",
"commands": [
"restore",
"publish",
diff --git a/docs/assets/showcase/invoice-dotnet.pdf b/docs/assets/showcase/invoice-dotnet.pdf
index a6b406a..5d0ebed 100644
Binary files a/docs/assets/showcase/invoice-dotnet.pdf and b/docs/assets/showcase/invoice-dotnet.pdf differ
diff --git a/docs/assets/showcase/invoice-dotnet.png b/docs/assets/showcase/invoice-dotnet.png
index bc13958..096288e 100644
Binary files a/docs/assets/showcase/invoice-dotnet.png and b/docs/assets/showcase/invoice-dotnet.png differ
diff --git a/docs/getting-started/dotnet.md b/docs/getting-started/dotnet.md
index 093078f..31827f2 100644
--- a/docs/getting-started/dotnet.md
+++ b/docs/getting-started/dotnet.md
@@ -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.4)
+[`FullBleed.DotNet`](https://www.nuget.org/packages/FullBleed.DotNet/0.1.5)
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.
@@ -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.4
+dotnet add package FullBleed.DotNet --version 0.1.5
```
Replace `Program.cs` with:
@@ -40,12 +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 and character coverage.
+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 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.8.
+Linux x64, Intel macOS, and Apple Silicon macOS. It pins Fullbleed 2.5.10.
The managed assembly has no third-party NuGet runtime dependencies.
Use .NET 10 LTS for a new application. Microsoft lists November 10, 2026 as
@@ -66,11 +68,13 @@ are fictional.
[Open the PDF generated from C#](../assets/showcase/invoice-dotnet.pdf).
-Version 0.1.4 fixes regular font selection when an italic face is registered first.
-In the release comparison, the invoice uses its intended regular brand face and is **40,449 bytes**,
-compared with 34,542 bytes for the earlier, incorrectly italic result. Text is unchanged;
-the corrected PDF and pixels match an explicit regular-face control.
-[Inspect the release evidence](https://github.com/fullbleed-engine/fullbleed-dotnet/releases/tag/v0.1.4).
+Version 0.1.5 fixes wrapping after styled inline text and the widths of tracked
+labels in flex and inline-block layouts. The release checks 54 layout cases
+through ordinary and compiled rendering, including a comparison that rejects
+44 defective cases in the previous package. The invoice retains its intended
+regular brand face; its corrected spacing is checked against a reviewed PDF
+and preview baseline. Review saved outputs when upgrading affected templates.
+[Inspect the release evidence](https://github.com/fullbleed-engine/fullbleed-dotnet/releases/tag/v0.1.5).
The earlier [0.1.3 comparison](https://github.com/fullbleed-engine/fullbleed-dotnet/releases/tag/v0.1.3)
measured font compaction from 81,227 to 34,542 bytes for that older output. Those
@@ -143,8 +147,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.4/docs/api.md)
-· [LINQ and variable-data example](https://github.com/fullbleed-engine/fullbleed-dotnet/tree/v0.1.4/samples/FullBleed.DotNet.LinqVdp)
+[.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)
· [CSS coverage](../css-coverage.md)
· [More document designs](../examples.md)
· [Report a .NET issue](https://github.com/fullbleed-engine/fullbleed-dotnet/issues)
diff --git a/docs/guides/aspnet-pdf.md b/docs/guides/aspnet-pdf.md
index 2b19023..39c7375 100644
--- a/docs/guides/aspnet-pdf.md
+++ b/docs/guides/aspnet-pdf.md
@@ -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.4** package, which contains
-engine **2.5.8**. For a console app or the broader native API, use the
+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
[C# and .NET quickstart](../getting-started/dotnet.md).
## Return PDF bytes as an attachment
diff --git a/docs/index.md b/docs/index.md
index be2e77b..cc1d564 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -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.4
+ dotnet add package FullBleed.DotNet --version 0.1.5
```
Replace `Program.cs` with:
@@ -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.4/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.5/samples/FullBleed.DotNet.LinqVdp)
## Pick a document to build
diff --git a/examples/aspnet/Assets/invoice.png b/examples/aspnet/Assets/invoice.png
index 82d648f..5918b8c 100644
Binary files a/examples/aspnet/Assets/invoice.png and b/examples/aspnet/Assets/invoice.png differ
diff --git a/examples/aspnet/FullbleedWeb.csproj b/examples/aspnet/FullbleedWeb.csproj
index d828582..b9937c4 100644
--- a/examples/aspnet/FullbleedWeb.csproj
+++ b/examples/aspnet/FullbleedWeb.csproj
@@ -7,7 +7,7 @@
true
-
+
diff --git a/examples/aspnet/README.md b/examples/aspnet/README.md
index a8ef601..d46b7c2 100644
--- a/examples/aspnet/README.md
+++ b/examples/aspnet/README.md
@@ -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.4 NuGet package (engine 2.5.8).
+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).
```sh
dotnet restore --locked-mode
diff --git a/examples/aspnet/packages.lock.json b/examples/aspnet/packages.lock.json
index 89fdccf..88949e7 100644
--- a/examples/aspnet/packages.lock.json
+++ b/examples/aspnet/packages.lock.json
@@ -4,9 +4,9 @@
"net10.0": {
"FullBleed.DotNet": {
"type": "Direct",
- "requested": "[0.1.4, )",
- "resolved": "0.1.4",
- "contentHash": "J0oyvPddrDRBk3sYW7UC4w+pcc1bfUQs3smaXlfPwn8xAVDjEg7mLskTf2yYHTwVskgigLCPLhneX8+vo2gKsw=="
+ "requested": "[0.1.5, )",
+ "resolved": "0.1.5",
+ "contentHash": "JQenfVuPx1Tn5O8fZIz28rRFobP/51LPH5N1ROdZfnrVMeBZA47W2moSUwYtn63p1qfrGLElQlxckXKQw7CKRg=="
}
}
}
diff --git a/examples/dotnet/NorthstarInvoice.csproj b/examples/dotnet/NorthstarInvoice.csproj
index 02a240c..68740d3 100644
--- a/examples/dotnet/NorthstarInvoice.csproj
+++ b/examples/dotnet/NorthstarInvoice.csproj
@@ -7,7 +7,7 @@
enable
-
+
diff --git a/tools/build_aspnet_starter.py b/tools/build_aspnet_starter.py
index 5d3e46b..e9edbd3 100644
--- a/tools/build_aspnet_starter.py
+++ b/tools/build_aspnet_starter.py
@@ -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.4",
+ "framework": "net10.0", "package": "FullBleed.DotNet", "packageVersion": "0.1.5",
"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"]},
diff --git a/tools/verify_aspnet_starter.py b/tools/verify_aspnet_starter.py
index 2f57249..b7239ed 100644
--- a/tools/verify_aspnet_starter.py
+++ b/tools/verify_aspnet_starter.py
@@ -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.4" and engine["version"] == "2.5.8"
+assert version == "0.1.5" and engine["version"] == "2.5.10"
report = {
"ok": True, "checkedAt": datetime.now(timezone.utc).isoformat(),
"platform": platform.system(), "architecture": platform.machine(),