PdfNetStack 1.0.0
dotnet add package PdfNetStack --version 1.0.0
NuGet\Install-Package PdfNetStack -Version 1.0.0
<PackageReference Include="PdfNetStack" Version="1.0.0" />
<PackageVersion Include="PdfNetStack" Version="1.0.0" />
<PackageReference Include="PdfNetStack" />
paket add PdfNetStack --version 1.0.0
#r "nuget: PdfNetStack, 1.0.0"
#:package PdfNetStack@1.0.0
#addin nuget:?package=PdfNetStack&version=1.0.0
#tool nuget:?package=PdfNetStack&version=1.0.0
PdfNetStack
Compress, optimize and edit PDF files in .NET. Pure C#, MIT licensed, no native binaries, no Ghostscript. Created and maintained by Jamal Abdelkhalek at JADEV.
PdfNetStack makes PDFs smaller without changing a single rendered pixel, then proves it: the output is re-read and compared to the source object by object before it is returned. If anything differs, you get your original bytes back.
using PdfNetStack;
var result = await PdfOptimizer.OptimizeFileAsync("manual.pdf", "manual.optimized.pdf");
Console.WriteLine($"{result.Disposition}: saved {result.SavingPercent:F1}%");
Features
- Lossless PDF compression: object streams, compressed cross-reference streams, unused object removal, Flate recompression at level 9, PNG prediction for raw images, duplicate font, image and resource merging.
- Lossless JPEG optimization: Huffman tables rebuilt per image, progressive JPEGs rewritten as baseline, metadata segments dropped. DCT coefficients stay identical.
- Optional lossy JPEG compression:
JpegQualityrequantizes JPEG images at a libjpeg quality, never finer than the original. - Built-in equivalence proof on every rewrite, also available on its own as
PdfEquivalence.FindDifferenceto check the output of any PDF tool. - Editing: open, create, merge, split, reorder, rotate, remove and import pages; document info; bookmarks.
- Encryption: open RC4, AES-128 and AES-256 protected PDFs; write AES-256 or AES-128 with user and owner passwords and permissions.
- Safe on untrusted files: bounded parsing and decoding, decompression bomb limits, fuzz tested. Signed and encrypted files are never rewritten by the optimizer.
Editing
PdfDocument doc = PdfDocument.Open("contract.pdf");
doc.Pages.RemoveAt(0);
doc.Pages[0].Rotate(90);
doc.Pages.Import(PdfDocument.Open("annex.pdf").Pages);
doc.Info.Title = "Signed contract";
doc.Security.Encrypt(userPassword: "read", ownerPassword: "admin");
doc.Save("contract-final.pdf"); // optimized and verified by default
Compatibility
| Target | Runs on | Dependencies |
|---|---|---|
net8.0, net10.0 |
.NET 8, 9, 10 and later. Trim and Native AOT compatible | None |
netstandard2.0 |
.NET Framework 4.6.2+, Mono, Unity, .NET Core 2.0+ | System.Memory (Microsoft, MIT) |
Tested on Windows, Linux and macOS, on .NET Framework 4.8, .NET 8 and .NET 10.
Results
On a real-world corpus of 1,296 PDFs (569 MiB), every optimized file was rendered with PDFium and compared with its original: zero differing pixels, zero verification failures.
Links
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- System.Memory (>= 4.6.3)
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on PdfNetStack:
| Package | Downloads |
|---|---|
|
PdfNetStack.Azure
Azure Blob Storage pipeline for PdfNetStack: reads a source blob, writes the optimized PDF to a separate container under a content-addressed name, with a provenance sidecar. Managed identity only, no account keys. By Jamal Abdelkhalek, JADEV. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 134 | 10/28/2026 |