Skip to content

wvbe/docxml

Repository files navigation

This is a Deno module for making .docx files.

It can be used to create a .docx using components, for example:

/** @jsx JSX */
import { Docx, JSX, Paragraph } from 'https://deno.land/x/docxml@1.0.0/mod.ts';

Docx.fromJsx(<Paragraph>This is the simplest document you could make.</Paragraph>)
	.toArchive()
	.toFile('test.docx');

Or it can be used to convert any XML to DOCX:

// TODO example code

Formatting options

Paragraph formatting

Paragraph styles may be applied via different ways;

// As a prop:
<Paragraph alignment="center" />
// As a style:
const style = api.styles.add({
	type: 'paragraph',
	paragraphProperties: {
		alignment: 'center',
	},
});
<Paragraph style={style} />;

Every style property, and every property of every style property, is optional;

{
	alignment?: 'left' | 'right' | 'center' | 'both';
	style?: string;
	spacing?: {
		before?: TwentiethPoint;
		after?: TwentiethPoint;
		line?: TwentiethPoint;
		lineRule?: 'atLeast' | 'exactly' | 'auto';
		afterAutoSpacing?: boolean;
		beforeAutoSpacing?: boolean;
	};
	indentation?: {
		left?: TwentiethPoint;
		leftChars?: number;
		right?: TwentiethPoint;
		rightChars?: number;
		hanging?: TwentiethPoint;
		hangingChars?: number;
		firstLine?: TwentiethPoint;
		firstLineChars?: number;
	};
}

Text formatting

// As a prop:
<Text isBold />

Every style property is optional again:

{
	verticalAlign?: 'baseline' | 'subscript' | 'superscript';
	isBold?: boolean;
	isItalic?: boolean;
	isSmallCaps?: boolean;
	language?: string;
	fontSize?: HalfPoint;
}

Paragraph formatting options may be merged with text formatting options. When used directly on a component (ie. not via a style) the formatting only applies to the paragraph pilcrow ("¶") sign. In MS Word, the text styling options merged into a paragraph style definition do apply to the paragraph text -- but may still be overriden with dedicated text formatting options.

<Paragraph isBold>Text not shown as bold, but the paragraph's pilcrow is.</Paragraph>
// As a style:
const style = api.styles.add({
	type: 'paragraph',
	textProperties: {
		isItalic: true,
	},
	paragraphProperties: {
		isBold: true,
	},
});
<Paragraph style={style}>Text is shown as bold and italic</Paragraph>;

About

TypeScript (component) library for building and parsing a DOCX file

Topics

Resources

Stars

Watchers

Forks

Languages