update
This commit is contained in:
215
examples/pdf-handling.ts
Normal file
215
examples/pdf-handling.ts
Normal file
@ -0,0 +1,215 @@
|
||||
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();
|
Reference in New Issue
Block a user