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(),