OfficeIMO.Reader.Pdf
3.0.3
Prefix Reserved
dotnet add package OfficeIMO.Reader.Pdf --version 3.0.3
NuGet\Install-Package OfficeIMO.Reader.Pdf -Version 3.0.3
<PackageReference Include="OfficeIMO.Reader.Pdf" Version="3.0.3" />
<PackageVersion Include="OfficeIMO.Reader.Pdf" Version="3.0.3" />
<PackageReference Include="OfficeIMO.Reader.Pdf" />
paket add OfficeIMO.Reader.Pdf --version 3.0.3
#r "nuget: OfficeIMO.Reader.Pdf, 3.0.3"
#:package OfficeIMO.Reader.Pdf@3.0.3
#addin nuget:?package=OfficeIMO.Reader.Pdf&version=3.0.3
#tool nuget:?package=OfficeIMO.Reader.Pdf&version=3.0.3
OfficeIMO.Reader.Pdf - PDF reader and normalized PDF projection
OfficeIMO.Reader.Pdf is the selective PDF bridge over OfficeIMO.Reader.Core and OfficeIMO.Pdf. It reads PDF artifacts into the normalized Reader model and can project any normalized OfficeDocumentReadResult back into a searchable PDF through explicit loss policies. It does not pull Word, Excel, PowerPoint, Email, or the all-adapters composition package.
Install
dotnet add package OfficeIMO.Reader.Pdf
Register
using OfficeIMO.Reader;
using OfficeIMO.Reader.Pdf;
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddPdfHandler()
.Build();
IReadOnlyList<ReaderChunk> chunks = reader
.Read("invoice.pdf")
.ToList();
Examples
Read page-aware Markdown chunks
using OfficeIMO.Reader;
using OfficeIMO.Reader.Pdf;
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddPdfHandler()
.Build();
foreach (var chunk in reader.Read("manual.pdf")) {
Console.WriteLine($"Page {chunk.Location.Page}: {chunk.Id}");
Console.WriteLine(chunk.Markdown ?? chunk.Text);
}
OfficeDocumentReadResult document = reader.ReadDocument("manual.pdf");
OfficeDocumentSearchResult matches = document.Search("installation");
Console.WriteLine(string.Join(", ", matches.Hits
.SelectMany(hit => hit.Pages)
.Select(page => page.Display)));
Read a stream with input limits
using OfficeIMO.Reader;
using OfficeIMO.Reader.Pdf;
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddPdfHandler()
.Build();
using var stream = File.OpenRead("large-report.pdf");
var chunks = reader.Read(stream, "large-report.pdf", new ReaderOptions {
MaxChars = 12_000,
MaxInputBytes = 100L * 1024L * 1024L
}).ToList();
foreach (var chunk in chunks.Where(chunk => chunk.Diagnostics != null)) {
Console.WriteLine($"{chunk.Id}: {chunk.Diagnostics!.TableCount} table(s)");
}
Project a normalized document into PDF
using OfficeIMO.Drawing;
using OfficeIMO.Pdf;
using OfficeIMO.Reader;
OfficeDocumentReadResult normalized = reader.ReadDocument("manual.pdf");
PdfDocumentConversionResult conversion = normalized.ToPdfDocumentResult(
new ReaderPdfProjectionOptions {
PagePolicy = ReaderPdfPagePolicy.PreserveSourcePages,
AssetPolicy = ReaderPdfAssetPolicy.EmbedSupportedImages,
RasterDecodeOptions = new OfficeRasterDecodeOptions {
AnimationPolicy = OfficeRasterAnimationPolicy.RejectAnimated
},
LinkPolicy = ReaderPdfLinkPolicy.PreserveUriLinks,
FormPolicy = ReaderPdfFormPolicy.RenderCurrentValues
});
PdfSaveResult save = conversion.Save("normalized-manual.pdf");
foreach (PdfConversionWarning warning in save.Warnings) {
Console.WriteLine($"{warning.Code}: {warning.Message}");
}
The same projection accepts normalized results produced by Email, EPUB, Visio, Office, and other Reader adapters without taking dependencies on those packages. Source diagnostics are merged with PDF generation diagnostics. Email attachment, EPUB resource/pagination, and Visio preview/semantic fallback decisions are recorded explicitly. Page-scoped and document-scoped normalized collections are reconciled by the shared Reader identities, so aggregate resources are retained without repeating page content. The Drawing raster policy is used for selected GIF frames and animation rejection; selecting a frame emits loss evidence rather than silently flattening animation. This does not advertise a direct format converter until that route has its own artifact and degradation gates.
Register alongside other ingestion adapters
using OfficeIMO.Reader;
using OfficeIMO.Reader.Html;
using OfficeIMO.Reader.Pdf;
using OfficeIMO.Reader.Zip;
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddHtmlHandler()
.AddPdfHandler()
.AddZipHandler()
.Build();
var chunks = reader.ReadFolder("KnowledgeBase", new ReaderFolderOptions {
Recurse = true,
DeterministicOrder = true,
MaxFiles = 500
}).ToList();
What it emits
- Page-aware chunks with
ReaderLocation.Page. - Native fixed-page membership and geometry compatible with Reader Core location, search, and page-Markdown helpers.
- Markdown text, logical tables, column profiles, table diagnostics, and confidence signals.
- Source/security/form/catalog-metadata/open-action/active-content counters in
ReaderChunk.Diagnostics. - Document metadata for XMP, output intents, tagged structure, optional content/layers, attachments, security/signatures, navigation, links, forms, annotations, and passive actions.
- Passive action summaries without executable payloads.
- Image placeholders and visual geometry when available.
- Link annotations and typed form fields when available.
- A source-neutral normalized-document-to-PDF projection with page, asset, link, and form policies plus merged conversion evidence.
Boundaries
- Reader adapter configuration belongs here.
- PDF parsing, logical readback, generation, and safety behavior belongs in
OfficeIMO.Pdf. - Shared extraction contracts belong in
OfficeIMO.Reader.Core. - This package maps between those two owners; source-format packages continue to own their normalization rules and do not gain a second PDF engine here.
Targets and license
- Targets:
netstandard2.0,net8.0,net10.0. - License: MIT.
Dependency footprint
- External: None beyond the dependencies of its OfficeIMO format packages.
- OfficeIMO:
OfficeIMO.Reader.Core,OfficeIMO.Drawing, and the first-partyOfficeIMO.Pdfengine own normalized content, raster compatibility, PDF parsing/generation, assets, and diagnostics.
See the complete OfficeIMO package map for related formats and conversion paths.
| 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 is compatible. 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. |
-
.NETFramework 4.7.2
- OfficeIMO.Drawing (>= 3.0.3)
- OfficeIMO.Pdf (>= 3.0.3)
- OfficeIMO.Reader.Core (>= 3.0.3)
-
.NETStandard 2.0
- OfficeIMO.Drawing (>= 3.0.3)
- OfficeIMO.Pdf (>= 3.0.3)
- OfficeIMO.Reader.Core (>= 3.0.3)
-
net10.0
- OfficeIMO.Drawing (>= 3.0.3)
- OfficeIMO.Pdf (>= 3.0.3)
- OfficeIMO.Reader.Core (>= 3.0.3)
-
net8.0
- OfficeIMO.Drawing (>= 3.0.3)
- OfficeIMO.Pdf (>= 3.0.3)
- OfficeIMO.Reader.Core (>= 3.0.3)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on OfficeIMO.Reader.Pdf:
| Package | Downloads |
|---|---|
|
OfficeIMO.Reader.All
Composition-only preset for registering OfficeIMO.Reader's local format adapters. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.0.3 | 127 | 7/27/2026 |
| 3.0.2 | 133 | 7/26/2026 |
| 3.0.1 | 281 | 7/26/2026 |
| 3.0.0 | 442 | 7/20/2026 |
| 2.0.1 | 252 | 7/14/2026 |
| 2.0.0 | 87 | 7/14/2026 |
| 0.0.14 | 1,447 | 7/9/2026 |
| 0.0.13 | 271 | 7/8/2026 |
| 0.0.12 | 429 | 7/5/2026 |
| 0.0.11 | 194 | 7/4/2026 |
| 0.0.10 | 210 | 6/27/2026 |
| 0.0.9 | 114 | 6/27/2026 |
| 0.0.8 | 374 | 6/24/2026 |
| 0.0.7 | 165 | 6/23/2026 |
| 0.0.6 | 281 | 6/21/2026 |
| 0.0.5 | 118 | 6/16/2026 |
| 0.0.4 | 298 | 6/16/2026 |
| 0.0.3 | 155 | 6/15/2026 |
| 0.0.2 | 186 | 6/13/2026 |
| 0.0.1 | 221 | 6/12/2026 |