Word processing
The document editor is a word processor in the page, laid out as the pages will print: A4 or Letter with their margins, headers and footers with page numbers, paragraph and character styles, headings, bulleted and numbered lists to any depth, tables with shading and borders, pictures, links, tab stops, page breaks, a table of contents built from the headings, and footnotes that keep to the foot of their page.
It opens and saves Word documents (.docx) and prints or saves a PDF. Reviewers' tracked changes and comments are shown beside the pages to accept, reject and answer, and changes made here are tracked under your name. Find and replace, undo every step, and mail merge: put merge fields in a letter and make a copy for every record, as one Word document or one each.
Try it with your own files in confidence: they are opened by your browser, on your device. Nothing is uploaded, no copy reaches us or anyone else, and nothing is kept once you close this tab.
A proposal under review
A consultancy's proposal, laid out on A4 with a table of contents, a footnote and page numbers - and a reviewer's comment and tracked change waiting beside it. Type anywhere, format with the toolbar, double-click the header to edit it, accept or reject the change, and save it as a Word document or a PDF - or open a .docx of your own.
Get the code
<script src="/assets/bmx-components.min.js"></script> <bmx-document-editor id="wp-prop" label="Proposal for Northwind Rail" file-name="northwind-proposal" locale="en-GB" author="You" show-review style="inline-size: 100%; --bmx-document-editor-height: 46rem"></bmx-document-editor>
One letter, three clients
A renewal letter with merge fields for the first name, the company and the city. The toolbar's merge preview steps through the clients; make all three letters as one Word document, or let a server do the same for every customer overnight.
// Node 18 or later, from the Gold package: every customer's renewal letter as a .docx and a PDF.
import { readDocxFile, writeDocxFile, mergeRecord, documentToPdf } from './dist/node/bmx-document-editor.mjs';
const template = (await readDocxFile(await readFile('renewal.docx'))).doc;
for (const customer of customers) {
const letter = mergeRecord(template, customer);
await writeFile(`out/${customer.id}.docx`, await writeDocxFile(letter));
await writeFile(`out/${customer.id}.pdf`, await documentToPdf(letter));
}