A TypeScript library that converts RTF (Rich Text Format) strings into HTML, preserving text formatting, styles, and hyperlinks.
- Bold, italic, underline, and strikethrough text
- Headings (
h1,h2) and paragraphs - Font families, font sizes, and text colors
- Text alignment and indentation
- Hyperlinks
- Superscript and subscript
- Inline CSS styles on all output elements
- Promise-based async API
npm install @magzgtz/rtf-to-htmlimport { rtfToHtml } from "@magzgtz/rtf-to-html";
const rtf = String.raw`{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard This is {\b bold} and {\i italic} text.\par}`;
const html = await rtfToHtml(rtf);
console.log(html);<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<style>
.body { margin-left: 0pt; ... }
</style>
</head>
<body>
<p>
<span>This is </span><span><strong>bold</strong></span
><span> and </span><span><em>italic</em></span
><span> text.</span>
</p>
</body>
</html>Converts an RTF string to an HTML document string.
| Parameter | Type | Description |
|---|---|---|
rtf |
string |
A valid RTF string |
Returns: Promise<string> — a full HTML document as a string.
Throws: Rejects with an error if the RTF input is malformed or cannot be parsed.
| RTF Control | HTML Output |
|---|---|
\b |
<strong> |
\i |
<em> |
\ul |
<u> |
\strike |
<s> |
\super |
<sup> |
\sub |
<sub> |
\par |
<p> |
| Heading 1 style | <h1> |
| Heading 2 style | <h2> |
\field (HYPERLINK) |
<a href="..."> |
| Font, size, color | inline style="" |
- Node.js 18+
- npm
git clone https://github.com/magalyg/rtfToHtml.git
cd rtfToHtml
npm installnpm startYou will be prompted to paste an RTF string. The converted HTML is printed to stdout.
npm run buildCompiled output lands in dist/.
ISC