Skip to content

Commit dcd84dd

Browse files
committed
.
1 parent 1a48aeb commit dcd84dd

2 files changed

Lines changed: 36 additions & 6 deletions

File tree

claude.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ The conversion pipeline is **Parse → Render**:
3030

3131
1. **Parsing** (`src/Morph/Parsing/`): `DocumentParser` reads OOXML via DocumentFormat.OpenXml and builds a `ParsedDocument` containing a tree of `DocumentElement` types (defined in `DocumentElements.cs`). Sub-parsers handle shapes, ink, themes, and HTML (AltChunk).
3232

33-
2. **Rendering** (`src/Morph/Rendering/`): `PageRenderer` lays out elements into pages and draws them using SkiaSharp. `TextRenderer` handles typography. `RenderContext` holds rendering state (DPI, page settings, compatibility mode).
33+
2. **Rendering** — two interchangeable backends behind an abstract `DocumentConverter` base class:
34+
- **SkiaSharp** (`src/Morph.Skia/`): `WordRender.Skia.DocumentConverter` — uses SkiaSharp + Svg.Skia
35+
- **ImageSharp** (`src/Morph.ImageSharp/`): `WordRender.ImageSharp.DocumentConverter` — uses SixLabors.ImageSharp / ImageSharp.Drawing / Fonts
36+
- **Shared rendering logic** (`src/Morph/Rendering/`): `RenderContextBase`, `FontCacheLoader`, `FontHelpers`, `TableLayout`
37+
38+
Each backend has its own `PageRenderer`, `TextRenderer`, and `RenderContext`.
3439

3540
## Code Style
3641

@@ -46,7 +51,7 @@ The conversion pipeline is **Parse → Render**:
4651
## Testing
4752

4853
- **Framework:** TUnit (not xUnit/NUnit) with `[Test]` and `[MethodDataSource]` attributes
49-
- **Scenario tests** (`ScenarioTests.cs`, DEBUG-only): parameterized over 2000+ directories in `src/Tests/Inputs/`, each containing `input.docx` and `expected_*.png` reference images. Uses Verify + ImageMagick for pixel-level comparison
54+
- **Scenario tests** (`SkiaScenarioTests.cs` / `ImageSharpScenarioTests.cs`, DEBUG-only): parameterized over 2000+ directories in `src/Tests/Inputs/`, each containing `input.docx` and `expected_*.png` reference images. Uses Verify + ImageMagick for pixel-level comparison. Both backends are tested independently
5055
- **Spec tests** (`src/Tests/SpecTests/`): unit tests for specific OOXML specification features
5156
- **RenderHelper** (`src/RenderHelper/`): .NET Framework 4.8.1 project that generates reference images using Microsoft Word via COM interop (Windows-only, not part of normal test runs)
5257

readme.md

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# <img src='/src/icon.png' height='30px'> Morph
22

33
[![Build status](https://img.shields.io/appveyor/build/SimonCropp/morph)](https://ci.appveyor.com/project/SimonCropp/morph)
4-
[![NuGet Status](https://img.shields.io/nuget/v/Morph.svg?label=PackageShader)](https://www.nuget.org/packages/Morph/)
4+
[![NuGet Status](https://img.shields.io/nuget/v/Morph.Skia.svg?label=Morph.Skia)](https://www.nuget.org/packages/Morph.Skia/)
5+
[![NuGet Status](https://img.shields.io/nuget/v/Morph.ImageSharp.svg?label=Morph.ImageSharp)](https://www.nuget.org/packages/Morph.ImageSharp/)
56

67
A .NET library that converts Microsoft Word DOCX documents into PNG images.
78

@@ -14,15 +15,25 @@ A .NET library that converts Microsoft Word DOCX documents into PNG images.
1415

1516
## Dependencies
1617

18+
**Core:**
1719
- **[DocumentFormat.OpenXml](https://www.nuget.org/packages/DocumentFormat.OpenXml)** - DOCX file parsing
20+
- **[AngleSharp](https://www.nuget.org/packages/AngleSharp)** - HTML content parsing (for AltChunk support)
21+
22+
**Morph.Skia backend:**
1823
- **[SkiaSharp](https://www.nuget.org/packages/SkiaSharp)** - Cross-platform graphics rendering
1924
- **[Svg.Skia](https://www.nuget.org/packages/Svg.Skia)** - SVG rendering support
20-
- **[AngleSharp](https://www.nuget.org/packages/AngleSharp)** - HTML content parsing (for AltChunk support)
2125

26+
**Morph.ImageSharp backend:**
27+
- **[SixLabors.ImageSharp](https://www.nuget.org/packages/SixLabors.ImageSharp)** - Cross-platform graphics rendering
28+
- **[SixLabors.ImageSharp.Drawing](https://www.nuget.org/packages/SixLabors.ImageSharp.Drawing)** - Drawing primitives
29+
- **[SixLabors.Fonts](https://www.nuget.org/packages/SixLabors.Fonts)** - Font handling
2230

23-
## NuGet package
2431

25-
https://nuget.org/packages/Morph/
32+
## NuGet packages
33+
34+
https://nuget.org/packages/Morph.Skia/
35+
36+
https://nuget.org/packages/Morph.ImageSharp/
2637

2738

2839
## Features
@@ -93,8 +104,22 @@ https://nuget.org/packages/Morph/
93104
- HTML content via AltChunk
94105

95106

107+
## Rendering Backends
108+
109+
Morph supports two rendering backends. Choose the one that best fits your needs:
110+
111+
| Backend | Package | Pros |
112+
|---------|---------|------|
113+
| **SkiaSharp** | `Morph.Skia` | Mature, includes SVG support |
114+
| **ImageSharp** | `Morph.ImageSharp` | Fully managed (no native dependencies) |
115+
116+
Both backends expose the same API via `WordRender.Skia.DocumentConverter` and `WordRender.ImageSharp.DocumentConverter`.
117+
118+
96119
## Usage
97120

121+
The examples below use the SkiaSharp backend. To use ImageSharp instead, replace `WordRender.Skia.DocumentConverter` with `WordRender.ImageSharp.DocumentConverter`.
122+
98123

99124
### Basic Usage - Save to Files
100125

0 commit comments

Comments
 (0)