Attributes
Includes Deno configuration
Repository
Current version released
2 years ago
Dependencies
deno.land/x
std
Versions
- 5.15.3Latest
- 5.15.2
- 5.15.1
- 5.15.0
- 5.14.1
- 5.14.0
- 5.13.3
- 5.13.2
- 5.13.1
- 5.13.0
- 5.12.2
- 5.12.1
- 5.12.0
- 5.11.4
- 5.11.3
- 5.11.2
- 5.11.1
- 5.11.0
- 5.10.1
- 5.10.0
- 5.9.0
- 5.8.1
- 5.8.0
- 5.7.2
- 5.7.1
- 5.7.0
- 5.6.0
- 5.5.6
- 5.5.5
- 5.5.4
- 5.5.3
- 5.5.2
- 5.5.1
- 5.5.0
- 5.4.0
- 5.3.8
- 5.3.7
- 5.3.6
- 5.3.5
- 5.3.4
- 5.3.3
- 5.3.2
- 5.3.1
- 5.3.0
- 5.2.1
- 5.2.0
- 5.1.1
- 5.1.0
- 5.0.2
- 5.0.1
- 5.0.0
- 4.0.8
- 4.0.7
- 4.0.6
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.2.0
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- 2.4.3
- 2.4.2
- 2.4.1
- 2.2.0
- 2.1.0
- 2.0.1
- 2.0.0
- 1.6.0
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.0
- 0.0.4
- 0.0.3
- 0.0.2
- 0.0.1
This is a Deno module for making .docx
files.
It can be used to create a .docx
using components, for example:
/** @jsx Docx.JSX */
import Docx, { Paragraph } from 'https://deno.land/x/docxml/mod.ts';
Docx.fromJsx(<Paragraph>This is the simplest document you could make.</Paragraph>)
.toArchive()
.toFile('example-1.docx');
Or it can be used to convert any XML to DOCX:
/** @jsx Docx.JSX */
import Docx, { Paragraph, Text } from 'https://deno.land/x/docxml/mod.ts';
Docx.fromNothing()
.withXmlRule('self::node()', ({ traverse }) => traverse('./*'))
.withXmlRule('self::text()', ({ node }) => <Text>{node.nodeValue}</Text>)
.withXmlRule('self::p', ({ traverse }) => <Paragraph>{traverse()}</Paragraph>)
.withXmlRule('self::strong', ({ traverse }) => <Text isBold>{traverse()}</Text>)
.fromXml(
`<html>
<body>
<p>This is a very simply <strong>XML transformation</strong>.</p>
</body>
</html>`,
{},
)
.toArchive()
.toFile('example-2.docx');
For the latest and greatest API documentation please go to https://doc.deno.land/https://deno.land/x/docxml/mod.ts
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} />;
- See all the paragraph formatting options.
- Every style property, and every property of every style property, is optional;
Text formatting
// As a prop:
<Text isBold />
- See all the text formatting options
- 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>;
Differences with actual MS Word DOCX
Obviously docxml
is a TypeScript project, which is already very different from how you would normally interact
with a DOCX document. More meaningfully however, docxml
is meant to make writing DOCX easier. For example;
- All sizes are of type
Length
, which means it doesn’t matter wether you input them as points, centimeters, inches, 1/2, 1/8th or 1/20th points, English Metric Units, and so on. - The JSX pragma will try to correct components that would lead to invalid XML structures, by splitting the parents of invalidly placed components recursively until the new position is valid.
- Some of the words have changed, generally speaking
docxml
is more verbose than the DOCX verbiage. - Generally speaking
docxml
prefers formal (JS) references over references-by-identifier. The identifiers are generated for you when the.docx
file is written. - Especially in tables and images, a lot of formatting details are automatically applied. In a lot of cases there is no API yet to change them.
For contributors
# Run all unit tests
deno task test