diff --git a/docs/assets/aspnet/project.zip b/docs/assets/aspnet/project.zip index 2a296c2..58f08a2 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 0a48e59..12935ed 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.5", - "projectZipSha256": "32682ad7a59bdaca0f9c89f40cfdb5295470795d648bb169ed117d0c0cb4c713", + "packageVersion": "0.1.6", + "projectZipSha256": "d1ae5a403f64f1d9c1037d63c90f4b3eac55762af7a7d83ceca529c7e542fa4a", "files": [ { "path": "Assets/fonts/BebasNeue-OFL.txt", @@ -63,7 +63,7 @@ { "path": "FullbleedWeb.csproj", "bytes": 534, - "sha256": "2bc53bcbbc531d70bd1c1807b79cb45802963897f062994b50b401d7ae31e6c7" + "sha256": "e8be83f61609d89459784ccb714a9f69770114da888cac266284d03f193ae23a" }, { "path": "InvoiceRenderer.cs", @@ -83,7 +83,7 @@ { "path": "README.md", "bytes": 2460, - "sha256": "b03e0964a7fe57921a94729b0b7b3b304fa3bbeb623be4956345141c647921a6" + "sha256": "8ba0734422df2353c8d0ed692877bcff9d34a562e3601454d810c988c860a42c" }, { "path": "global.json", @@ -93,7 +93,7 @@ { "path": "packages.lock.json", "bytes": 305, - "sha256": "afc891b007fd4475a4bd71b62f8942e930e9c15d0c54145e249ab6dd0597b35c" + "sha256": "7b946040ffcf764a043bde1bac3b28cf40bb758b4f983ba99a809acaa377868b" } ], "outputs": { diff --git a/docs/assets/aspnet/verification.json b/docs/assets/aspnet/verification.json index 10dad45..4791ff4 100644 --- a/docs/assets/aspnet/verification.json +++ b/docs/assets/aspnet/verification.json @@ -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": [ diff --git a/docs/getting-started/dotnet.md b/docs/getting-started/dotnet.md index 31827f2..daf3f58 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.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. @@ -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: @@ -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 @@ -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 @@ -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) diff --git a/docs/guides/aspnet-pdf.md b/docs/guides/aspnet-pdf.md index 39c7375..061ecd7 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.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 diff --git a/docs/index.md b/docs/index.md index cc1d564..485fefb 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.5 + dotnet add package FullBleed.DotNet --version 0.1.6 ``` 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.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 diff --git a/examples/aspnet/FullbleedWeb.csproj b/examples/aspnet/FullbleedWeb.csproj index b9937c4..c282dbc 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 d46b7c2..4d7f5e2 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.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 diff --git a/examples/aspnet/packages.lock.json b/examples/aspnet/packages.lock.json index 88949e7..31175f2 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.5, )", - "resolved": "0.1.5", - "contentHash": "JQenfVuPx1Tn5O8fZIz28rRFobP/51LPH5N1ROdZfnrVMeBZA47W2moSUwYtn63p1qfrGLElQlxckXKQw7CKRg==" + "requested": "[0.1.6, )", + "resolved": "0.1.6", + "contentHash": "aw/XplkgXTk62YDDg6yVK5XxS42Y490NszRch9DGCnjC5i/+tQV2QEMAFXyCACcBmQhqN7y/0c3cM7s0aWH2Xg==" } } } diff --git a/examples/dotnet/NorthstarInvoice.csproj b/examples/dotnet/NorthstarInvoice.csproj index 68740d3..1204779 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 e9edbd3..24b9938 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.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"]}, diff --git a/tools/verify_aspnet_starter.py b/tools/verify_aspnet_starter.py index b7239ed..4fb96e9 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.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(),