Soenneker.Pdfs.Processor
11.0.82
Prefix Reserved
dotnet add package Soenneker.Pdfs.Processor --version 11.0.82
NuGet\Install-Package Soenneker.Pdfs.Processor -Version 11.0.82
<PackageReference Include="Soenneker.Pdfs.Processor" Version="11.0.82" />
<PackageVersion Include="Soenneker.Pdfs.Processor" Version="11.0.82" />
<PackageReference Include="Soenneker.Pdfs.Processor" />
paket add Soenneker.Pdfs.Processor --version 11.0.82
#r "nuget: Soenneker.Pdfs.Processor, 11.0.82"
#:package Soenneker.Pdfs.Processor@11.0.82
#addin nuget:?package=Soenneker.Pdfs.Processor&version=11.0.82
#tool nuget:?package=Soenneker.Pdfs.Processor&version=11.0.82
Soenneker.Pdfs.Processor
A fast .NET utility for replacing text, merging, cleaning, and optimizing PDF documents.
Installation
dotnet add package Soenneker.Pdfs.Processor
Registration
services.AddPdfProcessorAsSingleton();
Replace text without changing its font operators
PdfProcessResult result = await processor.ReplaceTextFile(
"template.pdf",
"completed.pdf",
[
new PdfTextReplacement
{
Search = "{{CustomerName}}",
Replacement = "Jane Smith"
}
],
new PdfReplaceOptions
{
RequireAll = true,
Output = new PdfOutputOptions
{
Compression = PdfCompressionProfile.Maximum
}
});
Replacement modifies supported PDF text-showing operands directly. The surrounding font, size, color, spacing, transform operators, and TJ positioning values are retained. Matches can span multiple string fragments within one text-showing operation, which handles the kerning-based fragmentation commonly produced by PDF writers. They can also span consecutive Tj/TJ operations when no positioning or graphics-state operator intervenes. Set MatchAcrossTextFragments or MatchAcrossTextOperators to false for stricter matching.
Custom/subset font encodings may not contain every replacement glyph, and matches never cross an intervening operator because it can represent a visual space, line break, font change, or transform. Inspect PdfProcessResult.Replacements, including CrossFragmentReplacementCount, to confirm each requested change.
Merge pages structurally
await processor.Merge(
[
new PdfMergeSource { Stream = cover },
new PdfMergeSource { Stream = body, StartPage = 2, EndPage = 8 }
], destination);
Pages and their PDF resources are imported without rasterization.
Clean and optimize
await processor.OptimizeFile(
"input.pdf",
"clean.pdf",
new PdfOutputOptions
{
Compression = PdfCompressionProfile.Maximum,
RemoveMetadata = true,
RemoveEmbeddedFiles = true,
RemoveJavaScriptAndActions = true
});
Compression profiles are lossless. Cleanup can independently remove metadata, annotations, embedded files, JavaScript, and automatic actions.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net11.0 is compatible. |
-
net11.0
- Soenneker.Utils.File (>= 11.0.2341)
- Soenneker.Utils.Path (>= 11.0.1274)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 11.0.82 | 48 | 11/11/2026 |
| 11.0.81 | 52 | 11/11/2026 |
| 11.0.79 | 51 | 11/11/2026 |
| 11.0.78 | 58 | 11/11/2026 |
| 11.0.77 | 67 | 11/11/2026 |
| 11.0.76 | 73 | 11/11/2026 |
| 11.0.74 | 92 | 11/3/2026 |
| 11.0.73 | 86 | 11/3/2026 |
| 11.0.72 | 93 | 11/3/2026 |
| 11.0.71 | 97 | 11/3/2026 |
| 11.0.70 | 92 | 11/3/2026 |
| 11.0.69 | 103 | 10/29/2026 |
| 11.0.68 | 93 | 10/27/2026 |
| 11.0.67 | 108 | 10/27/2026 |
| 11.0.66 | 91 | 10/26/2026 |
| 11.0.64 | 89 | 10/26/2026 |
| 11.0.63 | 98 | 10/26/2026 |
| 4.0.62 | 104 | 10/15/2026 |
| 4.0.61 | 101 | 10/15/2026 |
| 4.0.60 | 99 | 10/14/2026 |
Updated Multiple NuGet packages