Services SDK
Document Generator

Document Generator

Generate DOCX and XLSX documents with templates and formatting.

Installation

pnpm add @aicr/document-generator

Quick 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

TemplateFormatDescription
gap-reportDOCXAnalysis report with findings and recommendations
executive-summaryDOCXOne-page executive summary
data-exportXLSXData 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
    }
  ]
});