Document Generator
Generate DOCX and XLSX documents with templates and formatting.
Installation
pnpm add @aicr/document-generatorQuick Start
import { generateDOCX, generateXLSX, generateFromTemplate } from '@aicr/document-generator';
// Generate Word document
const doc = await generateDOCX({
title: 'Quarterly Report',
sections: [
{ heading: 'Executive Summary', content: 'Key findings...' },
{ heading: 'Data Analysis', table: { headers: ['Metric', 'Value'], rows: [['Revenue', '$1M']] } }
]
});
// Save or send
fs.writeFileSync('report.docx', doc.buffer);API Reference
generateDOCX(options)
Generate a Word document.
Parameters:
interface DOCXOptions {
title?: string;
author?: string;
description?: string;
sections: DOCXSection[];
// Page settings
pageSize?: 'letter' | 'a4';
orientation?: 'portrait' | 'landscape';
margins?: { top?: number; bottom?: number; left?: number; right?: number };
// Headers/Footers
header?: string;
footer?: string;
}
interface DOCXSection {
heading?: string;
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
content?: string | string[];
bullets?: string[];
numberedList?: string[];
table?: DOCXTable;
pageBreakBefore?: boolean;
}
interface DOCXTable {
headers: string[];
rows: string[][];
columnWidths?: number[];
headerBackground?: string;
alternateRowColors?: boolean;
}Returns: Promise<GeneratorResult>
interface GeneratorResult {
buffer: Buffer;
format: 'docx' | 'xlsx';
mimeType: string;
filename: string;
stats: GeneratorStats;
}generateXLSX(options)
Generate an Excel spreadsheet.
const excel = await generateXLSX({
title: 'Sales Data',
sheets: [
{
name: 'Q4 Results',
headers: ['Product', 'Sales', 'Revenue'],
rows: [
['Widget A', 1500, 75000],
['Widget B', 2300, 115000],
],
columnWidths: [30, 15, 15],
autoFilter: true,
freezeHeader: true,
}
]
});Options:
interface XLSXOptions {
title?: string;
author?: string;
sheets: XLSXSheet[];
}
interface XLSXSheet {
name: string;
headers: string[];
rows: (string | number | boolean | Date)[][];
columnWidths?: number[];
autoFilter?: boolean;
freezeHeader?: boolean;
formatting?: CellFormatting[];
}
interface CellFormatting {
column: number;
format: 'currency' | 'percent' | 'date' | 'number';
options?: { decimals?: number; symbol?: string };
}generateFromTemplate(templateName, data)
Generate from a registered template.
// Built-in templates
const report = await generateFromTemplate('gap-report', {
title: 'Compensation Gap Analysis',
date: new Date(),
findings: [...],
recommendations: [...]
});
const summary = await generateFromTemplate('executive-summary', {
title: 'Q4 Performance',
highlights: [...],
metrics: [...]
});
const export = await generateFromTemplate('data-export', {
title: 'Employee Data',
data: employees,
columns: ['name', 'email', 'department']
});registerTemplate(template)
Register a custom template.
import { registerTemplate } from '@aicr/document-generator';
registerTemplate({
name: 'my-report',
format: 'docx',
sections: [
{ heading: '{{title}}', headingLevel: 1 },
{ heading: 'Overview', content: '{{overview}}' },
{ heading: 'Details', content: '{{details}}' }
]
});
// Use it
const doc = await generateFromTemplate('my-report', {
title: 'My Custom Report',
overview: 'Summary text...',
details: 'Detailed content...'
});Built-in Templates
| Template | Format | Description |
|---|---|---|
gap-report | DOCX | Analysis report with findings and recommendations |
executive-summary | DOCX | One-page executive summary |
data-export | XLSX | Data export with auto-formatting |
Examples
Generate Report with Tables
const report = await generateDOCX({
title: 'Sales Analysis',
header: 'Confidential',
footer: 'Page {{page}}',
sections: [
{
heading: 'Executive Summary',
headingLevel: 1,
content: 'This report analyzes Q4 sales performance.'
},
{
heading: 'Key Metrics',
headingLevel: 2,
table: {
headers: ['Metric', 'Target', 'Actual', 'Variance'],
rows: [
['Revenue', '$1M', '$1.2M', '+20%'],
['Units', '10,000', '12,500', '+25%'],
],
headerBackground: '4472C4',
alternateRowColors: true
}
},
{
heading: 'Recommendations',
bullets: [
'Increase marketing spend in Q1',
'Expand to new regions',
'Launch premium product line'
]
}
]
});Generate Multi-Sheet Excel
const excel = await generateXLSX({
title: 'Financial Report',
sheets: [
{
name: 'Summary',
headers: ['Category', 'Amount'],
rows: [['Revenue', 1200000], ['Expenses', 800000], ['Profit', 400000]],
formatting: [{ column: 1, format: 'currency' }]
},
{
name: 'Details',
headers: ['Date', 'Description', 'Amount'],
rows: transactions,
autoFilter: true,
freezeHeader: true
}
]
});