@casoon/invoice-generator
Version:
Generate PDF invoices, XRechnung XML, and ZUGFeRD PDF/A-3 from JSON data with TypeScript support
82 lines (66 loc) • 2.42 kB
JavaScript
const { generateFromJSON } = require('../dist/index');
const fs = require('fs');
const path = require('path');
// Parse command line arguments
const args = process.argv.slice(2);
const inputFile = args.find(arg => arg.startsWith('--input='))?.split('=')[1];
const outputFile = args.find(arg => arg.startsWith('--output='))?.split('=')[1];
const xmlOutput = args.find(arg => arg.startsWith('--xml='))?.split('=')[1];
const help = args.includes('--help') || args.includes('-h');
if (help) {
console.log(`
@casoon/invoice-generator CLI
Usage:
invoice-generator --input=<json-file> --output=<pdf-file> [options]
Options:
--input=<file> Input JSON file with invoice data
--output=<file> Output PDF file path
--xml=<file> Optional: Generate XRechnung XML file
--help, -h Show this help message
Examples:
invoice-generator --input=data/test-invoice.json --output=invoice.pdf
invoice-generator --input=data/test-invoice.json --output=invoice.pdf --xml=xrechnung.xml
`);
process.exit(0);
}
if (!inputFile || !outputFile) {
console.error('❌ Error: --input and --output are required');
console.error('Use --help for usage information');
process.exit(1);
}
// Check if input file exists
if (!fs.existsSync(inputFile)) {
console.error(`❌ Error: Input file not found: ${inputFile}`);
process.exit(1);
}
// Create output directory if it doesn't exist
const outputDir = path.dirname(outputFile);
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
async function main() {
try {
console.log('🚀 Generating invoice...');
console.log(`📄 Input: ${inputFile}`);
console.log(`📄 Output: ${outputFile}`);
if (xmlOutput) {
console.log(`📄 XML: ${xmlOutput}`);
}
await generateFromJSON(inputFile, outputFile, xmlOutput);
console.log('✅ Invoice generated successfully!');
// Check if files were created
if (fs.existsSync(outputFile)) {
const stats = fs.statSync(outputFile);
console.log(`📊 PDF size: ${(stats.size / 1024).toFixed(2)} KB`);
}
if (xmlOutput && fs.existsSync(xmlOutput)) {
const stats = fs.statSync(xmlOutput);
console.log(`📊 XML size: ${(stats.size / 1024).toFixed(2)} KB`);
}
} catch (error) {
console.error('❌ Error generating invoice:', error.message);
process.exit(1);
}
}
main();