45 lines
993 B
TypeScript
45 lines
993 B
TypeScript
import React from 'react';
|
|
import { renderToBuffer } from '@react-pdf/renderer';
|
|
import QRCode from 'qrcode';
|
|
import { TicketPDF } from '../ticket-pdf';
|
|
|
|
interface TicketData {
|
|
userName?: string;
|
|
eventName?: string;
|
|
eventDate?: string;
|
|
eventTime?: string;
|
|
venue?: string;
|
|
ticketType?: string;
|
|
amount?: string;
|
|
ticketNumber?: string;
|
|
purchaseDate?: string;
|
|
orderId?: string;
|
|
seatNumber?: string;
|
|
section?: string;
|
|
}
|
|
|
|
export async function generateTicketPDF(data: TicketData): Promise<Buffer> {
|
|
// Generate QR code as data URL
|
|
const qrCodeData = data.ticketNumber || `TICKET-${Date.now()}`;
|
|
const qrCodeDataUrl = await QRCode.toDataURL(qrCodeData, {
|
|
width: 300,
|
|
margin: 2,
|
|
color: {
|
|
dark: '#000000',
|
|
light: '#FFFFFF',
|
|
},
|
|
});
|
|
|
|
// Create PDF document
|
|
const pdfDoc = React.createElement(TicketPDF, {
|
|
...data,
|
|
qrCodeDataUrl,
|
|
});
|
|
|
|
// Render to buffer
|
|
const pdfBuffer = await renderToBuffer(pdfDoc);
|
|
|
|
return pdfBuffer;
|
|
}
|
|
|