OfficeIMO.Reader.Rtf
3.6.1
Prefix Reserved
dotnet add package OfficeIMO.Reader.Rtf --version 3.6.1
NuGet\Install-Package OfficeIMO.Reader.Rtf -Version 3.6.1
<PackageReference Include="OfficeIMO.Reader.Rtf" Version="3.6.1" />
<PackageVersion Include="OfficeIMO.Reader.Rtf" Version="3.6.1" />
<PackageReference Include="OfficeIMO.Reader.Rtf" />
paket add OfficeIMO.Reader.Rtf --version 3.6.1
#r "nuget: OfficeIMO.Reader.Rtf, 3.6.1"
#:package OfficeIMO.Reader.Rtf@3.6.1
#addin nuget:?package=OfficeIMO.Reader.Rtf&version=3.6.1
#tool nuget:?package=OfficeIMO.Reader.Rtf&version=3.6.1
OfficeIMO.Reader.Rtf - RTF reader adapter
OfficeIMO.Reader.Rtf provides a bounded RTF adapter for OfficeIMO.Reader.Core using the shared OfficeIMO.Rtf semantic model.
Install
dotnet add package OfficeIMO.Reader.Rtf
Configure
using OfficeIMO.Reader;
using OfficeIMO.Reader.Rtf;
using OfficeIMO.Rtf;
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddRtfHandler()
.Build();
IReadOnlyList<ReaderChunk> chunks = reader
.Read("clinical-note.rtf")
.ToList();
Examples
Read block-aware chunks
using OfficeIMO.Reader;
using OfficeIMO.Reader.Rtf;
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddRtfHandler()
.Build();
foreach (var chunk in reader.Enumerate("policy.rtf")) {
Console.WriteLine($"{chunk.Id}: {chunk.Location.SourceBlockKind}");
Console.WriteLine(chunk.Markdown ?? chunk.Text);
}
Read a stream with input limits
using OfficeIMO.Reader;
using OfficeIMO.Reader.Rtf;
var rtfOptions = new ReaderRtfOptions(); // bounded core profile by default
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddRtfHandler(rtfOptions)
.Build();
using var stream = File.OpenRead("large-note.rtf");
RtfConversionResult<IReadOnlyList<ReaderChunk>> result =
RtfReaderAdapter.ReadResult(stream, "large-note.rtf", new ReaderOptions {
MaxChars = 12_000,
MaxInputBytes = 100L * 1024L * 1024L
}, rtfOptions);
IReadOnlyList<ReaderChunk> chunks = result.ThrowIfLoss();
Read the semantic RTF envelope
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddRtfHandler()
.Build();
OfficeDocumentReadResult document = reader.ReadDocument("form.rtf");
foreach (OfficeDocumentFormField field in document.Forms) {
Console.WriteLine($"{field.Name}: {field.Value}");
}
foreach (OfficeDocumentAsset asset in document.Assets) {
Console.WriteLine($"{asset.Kind}: {asset.FileName}");
}
reader.ReadDocument("form.rtf") uses the same native rich mapping as the adapter-specific APIs.
Enable ReaderOptions.Inspection to add bounded loaded-content safety and Unicode
integrity observations. The adapter inspects the already parsed RTF model without
reopening, saving or executing embedded content. The result includes native coverage
and omissions rather than treating a missing finding as a safety guarantee.
Reader Core
defines the operation-wide inspection budgets; exceeded native safety or inspection
ceilings terminate the operation.
Read text and metadata
OfficeDocumentReadResult document = reader.ReadDocument("policy.rtf", new ReaderOptions {
Projection = ReaderProjection.TextAndMetadata
});
This projection retains located text, source metadata, bounded table text and parser diagnostics while omitting secondary Markdown, image/object assets, visual and form projections. It enables native source-backed binary deferral and reports those payloads as not-requested. Native input and parser limits remain in effect; Reader output limits are separate. The capability manifest advertises SupportsTextAndMetadata for this qualified profile.
RTF declaring fromhtml with pict or objdata is refused before semantic binding because its HTML baseline requires eager binary serialization. The adapter does not fall back to Full. The default Full projection retains rich extraction. To inventory original pict/objdata source groups and explicitly read bounded inert bytes, use RtfReadResult.InspectEmbeddedPayloads; source locators are character positions and remain distinct from edited semantic content.
The loaded-result extension shares one native parse between Reader projection and payload inspection:
RtfReadResult native = RtfDocument.LoadResult("policy.rtf", new RtfLoadOptions { DeferBinaryPayloads = true });
OfficeDocumentReadResult projected = native.ReadDocument("policy.rtf", new ReaderOptions {
Projection = ReaderProjection.TextAndMetadata
});
using var payloads = native.InspectEmbeddedPayloads();
The caller retains the native result and its original parser diagnostics. The extension applies Reader projection and output budgets without reopening the source or synthesizing a source-file hash. Input and parser limits apply during the preceding native load; already decoded bytes cannot be deferred retroactively.
Reconstruct explicit page locations
OfficeDocumentReader reader = new OfficeDocumentReaderBuilder()
.AddRtfHandler(new ReaderRtfOptions {
IncludePageLocations = true
})
.Build();
OfficeDocumentReadResult document = reader.ReadDocument("policy.rtf");
OfficeDocumentSearchResult matches = document.Search("retention period");
foreach (OfficeDocumentSearchHit hit in matches.Hits) {
Console.WriteLine(string.Join(", ", hit.Pages.Select(page => page.Display)));
}
RTF is flow content rather than a fixed-page format. This option reconstructs membership from \page,
\softpage, \pagebb, and page-starting section controls. A saved \nofpages value contributes the total
page count when present. Reader emits OfficeDocumentPageProvenance.ExplicitBreak and an informational diagnostic;
it does not estimate page changes caused only by automatic text overflow.
TextAndMetadata reconstructs pages from complete native text blocks, independently of MaxChars and ChunkByBlock. Splitting or combining output chunks does not discard explicit breaks or the text following them. Page text does not request Markdown or binary assets.
What it emits
- RTF input kind and deterministic source/chunk metadata.
- Paragraph, list, table, note, header/footer, object, shape, and image placeholder chunks from the semantic RTF model.
- Markdown-friendly table output plus
ReaderTablepayloads for parsed RTF tables. - Parser and binder diagnostics as reader warnings when requested.
- A shared conversion report for flattened, omitted, and blocked features.
- A versioned Reader rich result containing semantic blocks, tables, hyperlinks, form fields, image visuals and payloads, embedded-object assets, metadata, and structured diagnostics.
- Optional explicit-break page membership compatible with Reader Core location, search, and page-Markdown helpers.
Boundaries
- Reader adapter configuration belongs here.
- RTF parsing, syntax preservation, semantic binding, and writing belong in
OfficeIMO.Rtf. - Shared extraction contracts belong in
OfficeIMO.Reader.Core.
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.Coreand the first-partyOfficeIMO.Rtfengine own parsing, semantic binding, chunks, 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.Reader.Core (>= 3.6.1)
- OfficeIMO.Rtf (>= 3.6.1)
-
.NETStandard 2.0
- OfficeIMO.Reader.Core (>= 3.6.1)
- OfficeIMO.Rtf (>= 3.6.1)
-
net10.0
- OfficeIMO.Reader.Core (>= 3.6.1)
- OfficeIMO.Rtf (>= 3.6.1)
-
net8.0
- OfficeIMO.Reader.Core (>= 3.6.1)
- OfficeIMO.Rtf (>= 3.6.1)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on OfficeIMO.Reader.Rtf:
| Package | Downloads |
|---|---|
|
OfficeIMO.Reader.All
Composition-only preset for registering OfficeIMO.Reader's local format adapters. |
|
|
FileInspectorX.OfficeIMO
Optional bounded OfficeIMO document, image metadata and passive archive adapter for FileInspectorX. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.6.1 | 133 | 11/10/2026 |
| 3.6.0 | 224 | 11/6/2026 |
| 3.5.3 | 177 | 10/31/2026 |
| 3.5.2 | 190 | 10/24/2026 |
| 3.5.1 | 436 | 10/16/2026 |
| 3.4.5 | 631 | 10/10/2026 |
| 3.4.4 | 315 | 9/27/2026 |
| 3.4.3 | 325 | 9/12/2026 |
| 3.4.2 | 227 | 9/9/2026 |
| 3.4.1 | 245 | 9/7/2026 |
| 3.4.0 | 201 | 9/6/2026 |
| 3.3.0 | 177 | 9/2/2026 |
| 3.2.7 | 162 | 8/29/2026 |
| 3.2.6 | 272 | 8/22/2026 |
| 3.2.5 | 274 | 8/21/2026 |
| 3.2.4 | 254 | 8/19/2026 |
| 3.2.3 | 177 | 8/17/2026 |
| 3.2.2 | 388 | 8/13/2026 |
| 3.2.1 | 310 | 8/11/2026 |
| 3.2.0 | 467 | 8/7/2026 |