import { PDFEmbedder, PDFExtractor, TInvoice, FacturXEncoder } from '../ts/index.js'; import * as fs from 'fs/promises'; /** * Example demonstrating how to use the PDF handling classes */ async function pdfHandlingExample() { try { // Create a sample invoice const invoice: TInvoice = createSampleInvoice(); // Create a Factur-X encoder const encoder = new FacturXEncoder(); // Generate XML const xmlContent = await encoder.encode(invoice); console.log('Generated XML:'); console.log(xmlContent.substring(0, 500) + '...'); // Load a sample PDF const pdfBuffer = await fs.readFile('examples/sample.pdf'); console.log(`Loaded PDF (${pdfBuffer.length} bytes)`); // Create a PDF embedder const embedder = new PDFEmbedder(); // Embed XML into PDF const modifiedPdfBuffer = await embedder.embedXml( pdfBuffer, xmlContent, 'factur-x.xml', 'Factur-X XML Invoice' ); console.log(`Created modified PDF (${modifiedPdfBuffer.length} bytes)`); // Save the modified PDF await fs.writeFile('examples/output.pdf', modifiedPdfBuffer); console.log('Saved modified PDF to examples/output.pdf'); // Create a PDF extractor const extractor = new PDFExtractor(); // Extract XML from the modified PDF const extractedXml = await extractor.extractXml(modifiedPdfBuffer); console.log('Extracted XML:'); console.log(extractedXml ? extractedXml.substring(0, 500) + '...' : 'No XML found'); // Save the extracted XML if (extractedXml) { await fs.writeFile('examples/extracted.xml', extractedXml); console.log('Saved extracted XML to examples/extracted.xml'); } console.log('PDF handling example completed successfully'); } catch (error) { console.error('Error in PDF handling example:', error); } } /** * Creates a sample invoice for testing * @returns Sample invoice */ function createSampleInvoice(): TInvoice { return { type: 'invoice', id: 'INV-2023-001', invoiceType: 'debitnote', date: Date.now(), status: 'invoice', versionInfo: { type: 'final', version: '1.0.0' }, language: 'en', incidenceId: 'INV-2023-001', from: { type: 'company', name: 'Supplier Company', description: 'Supplier', address: { streetName: 'Supplier Street', houseNumber: '123', postalCode: '12345', city: 'Supplier City', country: 'DE', countryCode: 'DE' }, status: 'active', foundedDate: { year: 2000, month: 1, day: 1 }, registrationDetails: { vatId: 'DE123456789', registrationId: 'HRB12345', registrationName: 'Supplier Company GmbH' } }, to: { type: 'company', name: 'Customer Company', description: 'Customer', address: { streetName: 'Customer Street', houseNumber: '456', postalCode: '54321', city: 'Customer City', country: 'DE', countryCode: 'DE' }, status: 'active', foundedDate: { year: 2005, month: 6, day: 15 }, registrationDetails: { vatId: 'DE987654321', registrationId: 'HRB54321', registrationName: 'Customer Company GmbH' } }, subject: 'Invoice INV-2023-001', content: { invoiceData: { id: 'INV-2023-001', status: null, type: 'debitnote', billedBy: { type: 'company', name: 'Supplier Company', description: 'Supplier', address: { streetName: 'Supplier Street', houseNumber: '123', postalCode: '12345', city: 'Supplier City', country: 'DE', countryCode: 'DE' }, status: 'active', foundedDate: { year: 2000, month: 1, day: 1 }, registrationDetails: { vatId: 'DE123456789', registrationId: 'HRB12345', registrationName: 'Supplier Company GmbH' } }, billedTo: { type: 'company', name: 'Customer Company', description: 'Customer', address: { streetName: 'Customer Street', houseNumber: '456', postalCode: '54321', city: 'Customer City', country: 'DE', countryCode: 'DE' }, status: 'active', foundedDate: { year: 2005, month: 6, day: 15 }, registrationDetails: { vatId: 'DE987654321', registrationId: 'HRB54321', registrationName: 'Customer Company GmbH' } }, deliveryDate: Date.now(), dueInDays: 30, periodOfPerformance: null, printResult: null, currency: 'EUR', notes: ['Thank you for your business'], items: [ { position: 1, name: 'Product A', articleNumber: 'PROD-A', unitType: 'EA', unitQuantity: 2, unitNetPrice: 100, vatPercentage: 19 }, { position: 2, name: 'Service B', articleNumber: 'SERV-B', unitType: 'HUR', unitQuantity: 5, unitNetPrice: 80, vatPercentage: 19 } ], reverseCharge: false }, textData: null, timesheetData: null, contractData: null } } as TInvoice; } // Run the example pdfHandlingExample();