import React from 'react'; import { Page, Text, View, Document, StyleSheet, Image, Font } from '@react-pdf/renderer'; import {localizeTime} from "../lib/localizeTime"; import { IndianRupee } from "lucide-react"; import NotoSans from "../lib/fonts/static/NotoSans_Condensed-Bold.ttf"; Font.register({ family: "NotoSans", src: NotoSans, }); // console.log('Fonts', Font) // Create styles const styles = StyleSheet.create({ page: { display: "flex", flexDirection: 'column', backgroundColor: '#FFFFFF', padding: 40, }, currencyValue: { fontSize: 12, fontWeight: 'bold' }, header: { flexDirection: 'row', justifyContent: 'space-between', marginBottom: 20, borderBottomWidth: 2, borderBottomColor: '#6d9e37', paddingBottom: 10 }, logoContainer: { flexDirection: 'row', alignItems: 'center', gap: 10, marginBottom: 5 }, logoImage: { width: 30, height: 30 }, title: { fontSize: 24, fontWeight: 'bold', color: '#6d9e37' }, section: { marginBottom: 20 }, row: { flexDirection: 'row', justifyContent: 'space-between', marginBottom: 5 }, label: { fontSize: 12, fontWeight: 'bold' }, value: { fontSize: 12 }, divider: { borderBottomWidth: 1, borderBottomColor: '#EEEEEE', marginVertical: 10 }, tableHeader: { flexDirection: 'row', backgroundColor: '#F5F5F5', padding: 5, marginBottom: 5 }, tableRow: { flexDirection: 'row', padding: 5, borderBottomWidth: 1, borderBottomColor: '#EEEEEE' }, col1: { width: '40%' }, col2: { width: '30%', textAlign: 'right' }, col3: { width: '30%', textAlign: 'right' }, total: { flexDirection: 'row', justifyContent: 'flex-end', marginTop: 10 }, totalText: { fontSize: 14, fontWeight: 'bold' }, footer: { position: 'absolute', bottom: 30, left: 40, right: 40, textAlign: 'center', fontSize: 10, color: '#999999' }, status: { padding: 3, borderRadius: 3, fontSize: 10, fontWeight: 'bold' } }); // Base64 encoded SVG logo (replace with your actual logo) const SILICONPIN_LOGO = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABgElEQVR4nO3bsW0UURRA0TfYLThEDreatUSGC7BdBi4D0QAiWiQ3g0OTQgvsONiICv4J7pF+PE//jmaiN/vMDpzHWWyfedhnzqvv4sPqi8j/CoIpCKYgmIJgCoIpCKYgmIJgCoIpCKYgmIJgCoIpCKYgmIJgCoIpCKYgmIJgCoIpCKYgmIJgCoIpCKYgmIJgCoIpCKYgmE1Ylvn0eT7+PMzNyhmOv+bv6cf8vlo5xMxsi59/8WW+zjZPi6f4Ns/LZ+iTpSkIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYbWZ/WD3E3N/dzuFl6cLOvB7/zPfT28zqlZ3Zz8BZvsV1eTH3f6vv4nqULSrDNovvo38IpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmAKgikIpiCYgmDeAd5vHuV+dwDGAAAAAElFTkSuQmCC'; const InvoicePDF = ({ data }) => { const statusColor = data.status === 'completed' ? '#10B981' : '#EF4444'; return ( {/* Header */} INVOICE Invoice #: {data.billing_id} Date: {localizeTime(data.created_at)} SiliconPin 121 Lalbari, GourBongo Road Habra, W.B. 743271, India contact@siliconpin.com {/* Bill To */} BILL TO: {data.name} STATUS: {data.status.toUpperCase()} {/* Items Table */} DESCRIPTION cycle AMOUNT {data.service} {data.cycle} {new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'INR', }).format(parseFloat(data.amount))} {/* Total */} SUBTOTAL: {new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'INR', }).format(parseFloat(data.amount))} TOTAL: {new Intl.NumberFormat('en-IN', { style: 'currency', currency: 'INR', }).format(parseFloat(data.amount))} {/* Footer */} Thank you for your business! Please make payments payable to SiliconPin ); }; export default InvoicePDF;