A plugin that converts Markdown tables into rich, styled Word tables with full alignment, border, and header support.
๐ฆ Installation
๐ Overview
The @m2d/table plugin for mdast2docx renders Markdown tables into Word-compatible tables with customizable layout, alignment, and cell styling using the docx library.
Automatically handles header rows, borders, shading, cell alignments, and padding โ all configurable.
โจ Features
- Transforms Markdown tables into
docx.Tableelements - Auto-detects column alignment from MDAST (
left,center,right) - Customizable:
- Table width and border styles
- Cell padding and shading
- Header row formatting
- Horizontal and vertical alignment
- Graceful fallback to defaults if MDAST alignment is missing
๐ ๏ธ Usage
import { toDocx } from "@m2d/core"; import { tablePlugin } from "@m2d/table"; const plugins = [tablePlugin()]; const buffer = await toDocx(mdastTree, { plugins, });
โ๏ธ Options
The tablePlugin accepts an optional configuration object:
tablePlugin({ tableProps: { ... }, rowProps: { ... }, cellProps: { ... // CellProps data: { bold: true, color: "#000000" } // Paragraph and Run styling options }, firstRowProps: { ... }, firstRowCellProps: { data: { bold: true, alignment: AlignmentType.CENTER } // Header cell styling }, alignments: { defaultHorizontalAlign: AlignmentType.CENTER, defaultVerticalAlign: VerticalAlign.CENTER, preferMdData: true, }, });
All options override the following sensible defaults:
Default Table Style
| Property | Default Value |
|---|---|
| Table Width | 100% (percentage) |
| Border Style | SINGLE, size 1 |
| Cell Padding | 2โ4mm margins (top/bottom/left/right) |
| Header Row | Bold with shaded background #b79c2f |
| Cell Styling | Full docx.js paragraph & run options |
| Vertical Alignment | CENTER |
| Horizontal Alignment | Based on Markdown or CENTER fallback |
Advanced Cell Styling with data Property
The data property provides comprehensive styling control using docx.js paragraph and text run options:
Text Run Styling (IRunOptions)
bold,italics,underline,strike,doubleStrikecolor,size(font size in half-points)font(font family),highlight,shadingsuperScript,subScript,smallCaps,allCaps
Paragraph Styling (IParagraphOptions)
alignment- text alignment (LEFT, CENTER, RIGHT, JUSTIFIED)spacing- line spacing and paragraph spacingindent- left, right, first line, hanging indentsnumbering,bullet,style
Code Block Support
pre: true- preserves spaces, newline for code blocks
tablePlugin({ cellProps: { data: { font: "Arial", size: 20, // 10pt font color: "#333333", spacing: { after: 120 }, // 6pt spacing after }, }, firstRowCellProps: { data: { bold: true, alignment: AlignmentType.CENTER, color: "#ffffff", size: 24, // 12pt font font: "Calibri", }, }, });
๐งช Example
Markdown Input
| Name | Age | City | | :---: | :-: | --------: | | Alice | 24 | New York | | Bob | 30 | San Diego |
Output DOCX
- The first row is treated as a header, with custom shading.
- Column alignment is preserved: center, center, right.
๐ Internals
- Leverages
docx.Table,docx.TableRow,docx.TableCell, anddocx.Paragraph - Dynamically maps Markdown alignment via
MDAST.align[] - Uses
@m2d/coreโs block plugin API - Prevents re-processing of transformed nodes by setting
node.type = ""
โ ๏ธ Limitations
- Does not support row/column spans
- MDAST source must conform to GFM tables
- Table styling is fixed to plugin options; no per-cell customization via Markdown yet
If you find this useful:
- โญ Star mdast2docx on GitHub
- โค๏ธ Consider sponsoring
๐งพ License
MIT ยฉ Mayank Chaudhari
Made with ๐ by Mayank Kumar Chaudhari