OfficeIMO.Drawing
1.0.18
Prefix Reserved
See the version list below for details.
dotnet add package OfficeIMO.Drawing --version 1.0.18
NuGet\Install-Package OfficeIMO.Drawing -Version 1.0.18
<PackageReference Include="OfficeIMO.Drawing" Version="1.0.18" />
<PackageVersion Include="OfficeIMO.Drawing" Version="1.0.18" />
<PackageReference Include="OfficeIMO.Drawing" />
paket add OfficeIMO.Drawing --version 1.0.18
#r "nuget: OfficeIMO.Drawing, 1.0.18"
#:package OfficeIMO.Drawing@1.0.18
#addin nuget:?package=OfficeIMO.Drawing&version=1.0.18
#tool nuget:?package=OfficeIMO.Drawing&version=1.0.18
OfficeIMO.Drawing - shared drawing primitives
OfficeIMO.Drawing is the shared first-party drawing layer for OfficeIMO packages. It provides color, image metadata, font, text measurement, vector shape, chart snapshot, and drawing-quality primitives without taking a dependency on a raster imaging library.
Install
dotnet add package OfficeIMO.Drawing
Quick start
Colors and vector intent
using OfficeIMO.Drawing;
OfficeColor accent = OfficeColor.Parse("#336699");
OfficeImageFit fit = OfficeImageFit.Contain;
var badge = OfficeShape.RoundedRectangle(120, 32, 8);
badge.FillColor = OfficeColor.WhiteSmoke;
badge.StrokeColor = accent;
badge.Shadow = new OfficeShadow(OfficeColor.Black, 0.18, 3, 4);
Image metadata without decoding pixels
using OfficeIMO.Drawing;
OfficeImageInfo info = OfficeImageReader.Identify("logo.png");
Console.WriteLine($"{info.Width}x{info.Height} {info.MimeType}");
OfficeImageFit fit = OfficeImageFit.Contain;
Deterministic text measurement
using OfficeIMO.Drawing;
var measurer = OfficeTextMeasurer.Create();
var style = measurer.CreateStyle(new OfficeFontInfo("Aptos", 11, OfficeFontStyle.Regular));
OfficeTextMetrics metrics = measurer.Measure("Quarterly report", style);
if (metrics.WidthPixels > 240) {
Console.WriteLine("The label needs wrapping or a smaller font.");
}
Examples
Build a reusable vector scene
using OfficeIMO.Drawing;
var drawing = new OfficeDrawing(width: 420, height: 180)
.AddShape(new OfficeShape {
Kind = OfficeShapeKind.Rectangle,
Width = 420,
Height = 180,
FillGradient = OfficeLinearGradient.Horizontal(
OfficeColor.Parse("#F8FBFF"),
OfficeColor.Parse("#EAF4FF")),
StrokeColor = OfficeColor.Parse("#B7D7F5"),
StrokeWidth = 1
}, x: 0, y: 0)
.AddText("OfficeIMO.Drawing", 20, 18, 380, 32,
new OfficeFontInfo("Aptos", 18, OfficeFontStyle.Bold),
OfficeColor.Parse("#1F2937"),
OfficeTextAlignment.Left)
.AddShape(OfficeShape.RoundedRectangle(140, 44, 10), 20, 86)
.AddText("Shared vector intent", 34, 98, 240, 24);
OfficeDrawingQualityReport report = OfficeDrawingQualityAnalyzer.Analyze(drawing);
if (report.HasIssues) {
foreach (var issue in report.Issues) {
Console.WriteLine($"{issue.Kind}: {issue.Message}");
}
}
Render a chart snapshot to drawing primitives
using OfficeIMO.Drawing;
var snapshot = new OfficeChartSnapshot(
name: "RevenueChart",
title: "Revenue by quarter",
chartKind: OfficeChartKind.ColumnClustered,
data: new OfficeChartData(
new[] { "Q1", "Q2", "Q3", "Q4" },
new[] {
new OfficeChartSeries("Revenue", new[] { 10d, 18d, 24d, 30d }),
new OfficeChartSeries("Forecast", new[] { 12d, 19d, 25d, 33d })
}),
widthPoints: 420,
heightPoints: 260);
OfficeChartRenderingResult rendered = OfficeChartDrawingRenderer.RenderWithQuality(snapshot);
OfficeDrawing chartDrawing = rendered.Drawing;
foreach (var issue in rendered.QualityReport.Issues) {
Console.WriteLine(issue.Message);
}
Read TrueType outlines for renderers
using OfficeIMO.Drawing;
OfficeTrueTypeFont? font = OfficeTrueTypeFont.TryLoadDefault(out string? path);
if (font != null) {
Console.WriteLine($"Loaded {path}");
}
What it provides
OfficeColorimmutable RGBA values with named colors and hex parsing.OfficeImageReaderandOfficeImageInfofor metadata-only image inspection.OfficeImageFitfor shared stretch, contain, and cover intent.OfficeFontInfo,OfficeFontStyle,OfficeTextMeasurer, andOfficeTextMetricsfor deterministic layout estimates.OfficeTrueTypeFontfor dependency-free font-outline reading when renderers need glyph contours.OfficeShape,OfficeDrawing, gradients, shadows, transforms, clipping, and vector descriptors that format-specific packages can map into their own coordinate systems.OfficeChartSnapshotand chart rendering primitives shared by PDF and Office exporters.- Drawing quality diagnostics for canvas bounds and text overlap checks.
Boundaries
- This package describes reusable drawing intent.
- Word, Excel, PowerPoint, Visio, and PDF packages map that intent into their own file formats.
- Pixel decoding, resizing, transcoding, and full image validation are not part of this runtime package.
Targets and license
- Targets:
netstandard2.0,net8.0,net10.0. - License: MIT.
- Repository: EvotecIT/OfficeIMO
| 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
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages (8)
Showing the top 5 NuGet packages that depend on OfficeIMO.Drawing:
| Package | Downloads |
|---|---|
|
OfficeIMO.Word
An Open Source cross-platform .NET library providing an easy way to create Microsoft Word (DocX) documents. |
|
|
OfficeIMO.Excel
An Open Source cross-platform .NET library providing an easy way to create Excel documents. |
|
|
OfficeIMO.Word.Markdown
Markdown converter for OfficeIMO.Word - Convert Word documents to/from Markdown using OfficeIMO.Markdown |
|
|
OfficeIMO.Word.Html
HTML converter for OfficeIMO.Word - Convert Word documents to/from HTML using AngleSharp |
|
|
OfficeIMO.Pdf
Dependency-free PDF builder and reader for .NET with fluent document composition, standard PDF fonts, basic layout primitives, and no runtime package dependencies. |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on OfficeIMO.Drawing:
| Repository | Stars |
|---|---|
|
EvotecIT/PSWriteOffice
PowerShell Module to create and edit Microsoft Word, Microsoft Excel, and Microsoft PowerPoint documents without having Microsoft Office installed.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.20 | 21 | 6/16/2026 |
| 1.0.19 | 142 | 6/16/2026 |
| 1.0.18 | 396 | 6/15/2026 |
| 1.0.17 | 684 | 6/13/2026 |
| 1.0.16 | 572 | 6/12/2026 |
| 1.0.15 | 925 | 6/9/2026 |
| 1.0.14 | 1,114 | 6/5/2026 |
| 1.0.13 | 2,818 | 5/27/2026 |
| 1.0.12 | 639 | 5/26/2026 |
| 1.0.11 | 564 | 5/26/2026 |
| 1.0.10 | 1,019 | 5/23/2026 |
| 1.0.9 | 582 | 5/22/2026 |
| 1.0.8 | 556 | 5/21/2026 |
| 1.0.7 | 550 | 5/21/2026 |
| 1.0.6 | 672 | 5/20/2026 |
| 1.0.5 | 590 | 5/19/2026 |
| 1.0.4 | 658 | 5/18/2026 |
| 1.0.3 | 867 | 5/16/2026 |
| 1.0.2 | 560 | 5/14/2026 |
| 1.0.1 | 802 | 5/14/2026 |