PdfNetStack 1.0.0

dotnet add package PdfNetStack --version 1.0.0
                    
NuGet\Install-Package PdfNetStack -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PdfNetStack" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PdfNetStack" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="PdfNetStack" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PdfNetStack --version 1.0.0
                    
#r "nuget: PdfNetStack, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PdfNetStack@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PdfNetStack&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=PdfNetStack&version=1.0.0
                    
Install as a Cake Tool

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: JpegQuality requantizes 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.FindDifference to 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.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

  • 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