PdfNetStack 1.1.0
dotnet add package PdfNetStack --version 1.1.0
NuGet\Install-Package PdfNetStack -Version 1.1.0
<PackageReference Include="PdfNetStack" Version="1.1.0" />
<PackageVersion Include="PdfNetStack" Version="1.1.0" />
<PackageReference Include="PdfNetStack" />
paket add PdfNetStack --version 1.1.0
#r "nuget: PdfNetStack, 1.1.0"
#:package PdfNetStack@1.1.0
#addin nuget:?package=PdfNetStack&version=1.1.0
#tool nuget:?package=PdfNetStack&version=1.1.0
PdfNetStack
Create, edit, compress and sign 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 and resource removal, compact content streams, Flate recompression at level 9, PNG prediction for raw images, duplicate font, image and resource merging, merging of separately embedded subsets of one font. Optional linearized output for fast web view.
- 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. - Optional lossy image options:
MaxImageDpidownsamples oversampled images,ConvertImagesToJpegturns photographs into JPEG, andMinImageSsimkeeps any image a change would visibly hurt.CompressionEffort.Exhaustivesqueezes Flate streams further for archives. - 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. Large files open on demand from a stream and save as incremental updates.
- Encryption: open RC4, AES-128 and AES-256 protected PDFs; write AES-256 or AES-128 with user and owner passwords and permissions.
- Creating documents: a drawing canvas on new and existing pages; standard 14, TrueType, OpenType, WOFF and WOFF2 fonts embedded as subsets, variable font instances; text layout with justification, right to left and complex scripts; JPEG, PNG, GIF, BMP, TIFF, WebP and SVG images; pages of other PDFs as watermarks and letterheads.
- Text and images out: page text in reading order, letters and words with bounds and fonts; images per page decoded to pixels, including JPEG 2000, JBIG2 and CCITT scans.
- Forms and annotations: create, read and fill AcroForm fields with generated appearances; links, notes, markup, stamps, ink and shapes; flattening.
- Signatures and archiving: PAdES B-B, B-T, B-LT and B-LTA signing and verification with chain, revocation and policy checks; PDF/A-1b to PDF/A-4 output; Factur-X and ZUGFeRD invoices.
- 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 (3)
Showing the top 3 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. |
|
|
PdfNetStack.Html
Convert HTML and CSS to PDF in .NET without a browser: an HTML5 parser, CSS cascade, block, inline, table and flex layout, paged media with headers, footers and page numbers, web fonts, right to left and Arabic text. Pure C#, MIT licensed, built on PdfNetStack. By Jamal Abdelkhalek, JADEV. |
|
|
PdfNetStack.Ocr
OCR for PdfNetStack: finds the scan on each page, recognizes Latin and Arabic text with PP-OCRv5 models on ONNX Runtime, and adds an invisible text layer so the PDF can be searched and copied. Managed pre and post processing; PDF bytes never reach native code. The models ship separately in PdfNetStack.Ocr.Models. MIT licensed. By Jamal Abdelkhalek, JADEV. |
GitHub repositories
This package is not used by any popular GitHub repositories.