Skip to content

Commit 5e2477e

Browse files
committed
.
1 parent 13846fd commit 5e2477e

2 files changed

Lines changed: 75 additions & 31 deletions

File tree

claude.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
44

55
## Project Overview
66

7-
Morph is a .NET library that converts Microsoft Word DOCX documents into PNG images. The public API lives in the `WordRender` namespace. The main entry point is `DocumentConverter`, which exposes `ConvertToImages` (file/stream → PNG files) and `ConvertToImageData` (file/stream → byte arrays).
7+
Morph is a .NET library that converts Microsoft Word DOCX documents or HTML content into PNG images. The DOCX public API lives in the `WordRender` namespace (entry point: `DocumentConverter`). The HTML public API lives in the `HtmlRender` namespace (entry point: `HtmlConverter`). Both expose `ConvertToImages` and `ConvertToImageData`.
88

99
## Build & Test Commands
1010

@@ -26,16 +26,25 @@ dotnet run --project src/Tests -- --filter "Name=Scenario"
2626

2727
## Architecture
2828

29-
The conversion pipeline is **Parse → Render**:
29+
The conversion pipeline is **Parse → Render**, split across multiple assemblies:
3030

31-
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).
31+
**Core model** (`src/Morph/`): `ParsedDocument`, `DocumentElement` types (defined in `DocumentElements.cs`), shared rendering base (`RenderContextBase`, `FontCacheLoader`, `FontHelpers`, `TableLayout`), `ConversionOptions`, `ConversionResult`. No heavy dependencies.
3232

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`
33+
**Parsers:**
34+
- **DOCX** (`src/Morph.OpenXml/`): `DocumentParser` reads OOXML via DocumentFormat.OpenXml and builds a `ParsedDocument`. Sub-parsers handle shapes, ink, themes, and HTML (AltChunk).
35+
- **HTML** (`src/Morph.Html/`): `HtmlParser` converts HTML to `DocumentElement` trees via AngleSharp. `HtmlConverter` abstract base class.
3736

38-
Each backend has its own `PageRenderer`, `TextRenderer`, and `RenderContext`.
37+
**Rendering backends** — each has its own `PageRenderer`, `TextRenderer`, and `RenderContext`:
38+
- **SkiaSharp** (`src/Morph.Skia/`): rendering engine using SkiaSharp + Svg.Skia
39+
- **ImageSharp** (`src/Morph.ImageSharp/`): rendering engine using SixLabors.ImageSharp / ImageSharp.Drawing / Fonts
40+
41+
**Entry points** (thin wrappers combining a parser with a rendering backend):
42+
- `src/Morph.OpenXml.Skia/``WordRender.Skia.DocumentConverter` (DOCX → PNG via SkiaSharp)
43+
- `src/Morph.OpenXml.ImageSharp/``WordRender.ImageSharp.DocumentConverter` (DOCX → PNG via ImageSharp)
44+
- `src/Morph.Html.Skia/``HtmlRender.Skia.HtmlConverter` (HTML → PNG via SkiaSharp)
45+
- `src/Morph.Html.ImageSharp/``HtmlRender.ImageSharp.HtmlConverter` (HTML → PNG via ImageSharp)
46+
47+
The HTML packages have no transitive dependency on `DocumentFormat.OpenXml`.
3948

4049
## Code Style
4150

readme.md

Lines changed: 58 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
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.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/)
4+
[![NuGet Status](https://img.shields.io/nuget/v/Morph.OpenXml.Skia.svg?label=Morph.OpenXml.Skia)](https://www.nuget.org/packages/Morph.OpenXml.Skia/)
5+
[![NuGet Status](https://img.shields.io/nuget/v/Morph.OpenXml.ImageSharp.svg?label=Morph.OpenXml.ImageSharp)](https://www.nuget.org/packages/Morph.OpenXml.ImageSharp/)
6+
[![NuGet Status](https://img.shields.io/nuget/v/Morph.Html.Skia.svg?label=Morph.Html.Skia)](https://www.nuget.org/packages/Morph.Html.Skia/)
7+
[![NuGet Status](https://img.shields.io/nuget/v/Morph.Html.ImageSharp.svg?label=Morph.Html.ImageSharp)](https://www.nuget.org/packages/Morph.Html.ImageSharp/)
68

7-
A .NET library that converts Microsoft Word DOCX documents into PNG images.
9+
A .NET library that converts Microsoft Word DOCX documents or HTML content into PNG images.
810

911

1012
## Requirements
@@ -13,27 +15,23 @@ A .NET library that converts Microsoft Word DOCX documents into PNG images.
1315
- Cross-platform support: Windows, macOS, Linux
1416

1517

16-
## Dependencies
18+
## NuGet packages
1719

18-
**Core:**
19-
- **[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)
20+
### DOCX to PNG
2121

22-
**Morph.Skia backend:**
23-
- **[SkiaSharp](https://www.nuget.org/packages/SkiaSharp)** - Cross-platform graphics rendering
24-
- **[Svg.Skia](https://www.nuget.org/packages/Svg.Skia)** - SVG rendering support
22+
For converting Word documents to images:
2523

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
24+
https://nuget.org/packages/Morph.OpenXml.Skia/
3025

26+
https://nuget.org/packages/Morph.OpenXml.ImageSharp/
3127

32-
## NuGet packages
28+
### HTML to PNG
29+
30+
For converting HTML content to images (no Microsoft Word / OpenXml dependency):
3331

34-
https://nuget.org/packages/Morph.Skia/
32+
https://nuget.org/packages/Morph.Html.Skia/
3533

36-
https://nuget.org/packages/Morph.ImageSharp/
34+
https://nuget.org/packages/Morph.Html.ImageSharp/
3735

3836

3937
## Features
@@ -108,16 +106,17 @@ https://nuget.org/packages/Morph.ImageSharp/
108106

109107
Morph supports two rendering backends:
110108

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`.
109+
| Backend | DOCX Package | HTML Package | Pros |
110+
|---------|-------------|-------------|------|
111+
| **SkiaSharp** | `Morph.OpenXml.Skia` | `Morph.Html.Skia` | Mature, includes SVG support |
112+
| **ImageSharp** | `Morph.OpenXml.ImageSharp` | `Morph.Html.ImageSharp` | Fully managed (no native dependencies) |
117113

118114

119115
## Usage
120116

117+
118+
### DOCX to PNG
119+
121120
The examples below use the SkiaSharp backend. To use ImageSharp instead, replace `WordRender.Skia.DocumentConverter` with `WordRender.ImageSharp.DocumentConverter`.
122121

123122

@@ -201,6 +200,42 @@ var result = converter.ConvertToImages(
201200
<!-- endSnippet -->
202201

203202

203+
### HTML to PNG
204+
205+
To use ImageSharp instead, replace `HtmlRender.Skia.HtmlConverter` with `HtmlRender.ImageSharp.HtmlConverter`.
206+
207+
208+
#### Basic Usage - Save to Files
209+
210+
```cs
211+
var converter = new HtmlRender.Skia.HtmlConverter();
212+
213+
var result = converter.ConvertToImages(
214+
"<h1>Hello</h1><p>World</p>",
215+
"output-folder");
216+
217+
Console.WriteLine($"Generated {result.PageCount} pages");
218+
foreach (var path in result.ImagePaths)
219+
{
220+
Console.WriteLine($"Created: {path}");
221+
}
222+
```
223+
224+
225+
#### In-Memory Conversion
226+
227+
```cs
228+
var converter = new HtmlRender.Skia.HtmlConverter();
229+
230+
var imageData = converter.ConvertToImageData("<h1>Hello</h1><p>World</p>");
231+
232+
foreach (var pngBytes in imageData)
233+
{
234+
// Use the PNG byte array as needed
235+
}
236+
```
237+
238+
204239
## Configuration Options
205240

206241
| Option | Type | Default | Description |

0 commit comments

Comments
 (0)