UNPKG

@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
#!/usr/bin/env node 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();