Original Certificate

-----BEGIN CERTIFICATE-----

MIIEtjCCA56gAwIBAgIUb9XgtGqtn/nWXFwwgUPYSPDrp0wwDQYJKoZIhvcNAQEL

BQAwgYsxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTQw

MgYDVQQLEytDbG91ZEZsYXJlIE9yaWdpbiBTU0wgQ2VydGlmaWNhdGUgQXV0aG9y

aXR5MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlh

MB4XDTI1MDQyODEwNTkwMFoXDTQwMDQyNDEwNTkwMFowYjEZMBcGA1UEChMQQ2xv

dWRGbGFyZSwgSW5jLjEdMBsGA1UECxMUQ2xvdWRGbGFyZSBPcmlnaW4gQ0ExJjAk

BgNVBAMTHUNsb3VkRmxhcmUgT3JpZ2luIENlcnRpZmljYXRlMIIBIjANBgkqhkiG

9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqYwkQO4YvVNIyTChVawKQLOogPryWVBdGqI3

vJEFdVw7+QvNKJtB6E8bIHzvxMKncjBlK5NNtHz1kb8f+kcaomcdQFf25HnSo6Fu

6ZIbrkEOiSPRl6//TWXYoi44hzSMPI59faTtddAytunHrKoJ1iw4+UD097obimIt

k+RCfHtVBRUf/y8+XVPFFOe3sY1WlAXKrJPtOIJkppMlOnkmc5qhdTQySxkK8VB8

LX8vgkErfsyJrUc+aDpCysTS5rxlmgER4TOP8VUaatjJWgO6XIHy/EnCZQ1v6WAQ

r1x5VvyGaK4eP7zx5Wct2/Yk2ITsQfKDbrOvo5J8v9dm7YeRTQIDAQABo4IBODCC

ATQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD

ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQFBSYjER1Ih01PptpRj6Sz6QF6ITAf

BgNVHSMEGDAWgBQk6FNXXXw0QIep65TbuuEWePwppDBABggrBgEFBQcBAQQ0MDIw

MAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmNsb3VkZmxhcmUuY29tL29yaWdpbl9j

YTA5BgNVHREEMjAwghcqLmV2ZXJ0dXMtbG9naXN0aWNzLmNvbYIVZXZlcnR1cy1s

b2dpc3RpY3MuY29tMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2xvdWRm

bGFyZS5jb20vb3JpZ2luX2NhLmNybDANBgkqhkiG9w0BAQsFAAOCAQEAmE6jL5hw

+UsEXkYqaNLOQuc9LoRkkCKAOX6QUNVTfGYIg5nLMVfI8TU2QXsc2DQRcirJeprN

6nXzzQkqzBWw6Iaj+7jViGV49c9rk32raD+0R/wNlx1upG0Pu9GV62WiKKjkeLA7

vcmJWKzXMh5vsgysLDJ/Kz16QzVlu+LWZ5wULax8lsRZzzMr40JeNDdoEmgDGT0H

ymVqI4oIRgrf4cPoSYhEnqUu5BlgsCYG+0dYfDg1LCZWcyTcvTZZSIz/LlehnlcA

kY/Mm1yRVYqsU76drQmobDS8CHsJwes5leil/SPcxKT/3HVj5UYl1Cr/RIPGdXsf

G/BQj5unGxg9wA==

-----END CERTIFICATE-----

Key

-----BEGIN CERTIFICATE-----

MIIEtjCCA56gAwIBAgIUb9XgtGqtn/nWXFwwgUPYSPDrp0wwDQYJKoZIhvcNAQEL

BQAwgYsxCzAJBgNVBAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTQw

MgYDVQQLEytDbG91ZEZsYXJlIE9yaWdpbiBTU0wgQ2VydGlmaWNhdGUgQXV0aG9y

aXR5MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlh

MB4XDTI1MDQyODEwNTkwMFoXDTQwMDQyNDEwNTkwMFowYjEZMBcGA1UEChMQQ2xv

dWRGbGFyZSwgSW5jLjEdMBsGA1UECxMUQ2xvdWRGbGFyZSBPcmlnaW4gQ0ExJjAk

BgNVBAMTHUNsb3VkRmxhcmUgT3JpZ2luIENlcnRpZmljYXRlMIIBIjANBgkqhkiG

9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqYwkQO4YvVNIyTChVawKQLOogPryWVBdGqI3

vJEFdVw7+QvNKJtB6E8bIHzvxMKncjBlK5NNtHz1kb8f+kcaomcdQFf25HnSo6Fu

6ZIbrkEOiSPRl6//TWXYoi44hzSMPI59faTtddAytunHrKoJ1iw4+UD097obimIt

k+RCfHtVBRUf/y8+XVPFFOe3sY1WlAXKrJPtOIJkppMlOnkmc5qhdTQySxkK8VB8

LX8vgkErfsyJrUc+aDpCysTS5rxlmgER4TOP8VUaatjJWgO6XIHy/EnCZQ1v6WAQ

r1x5VvyGaK4eP7zx5Wct2/Yk2ITsQfKDbrOvo5J8v9dm7YeRTQIDAQABo4IBODCC

ATQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD

ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQFBSYjER1Ih01PptpRj6Sz6QF6ITAf

BgNVHSMEGDAWgBQk6FNXXXw0QIep65TbuuEWePwppDBABggrBgEFBQcBAQQ0MDIw

MAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLmNsb3VkZmxhcmUuY29tL29yaWdpbl9j

YTA5BgNVHREEMjAwghcqLmV2ZXJ0dXMtbG9naXN0aWNzLmNvbYIVZXZlcnR1cy1s

b2dpc3RpY3MuY29tMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2xvdWRm

bGFyZS5jb20vb3JpZ2luX2NhLmNybDANBgkqhkiG9w0BAQsFAAOCAQEAmE6jL5hw

+UsEXkYqaNLOQuc9LoRkkCKAOX6QUNVTfGYIg5nLMVfI8TU2QXsc2DQRcirJeprN

6nXzzQkqzBWw6Iaj+7jViGV49c9rk32raD+0R/wNlx1upG0Pu9GV62WiKKjkeLA7

vcmJWKzXMh5vsgysLDJ/Kz16QzVlu+LWZ5wULax8lsRZzzMr40JeNDdoEmgDGT0H

ymVqI4oIRgrf4cPoSYhEnqUu5BlgsCYG+0dYfDg1LCZWcyTcvTZZSIz/LlehnlcA

kY/Mm1yRVYqsU76drQmobDS8CHsJwes5leil/SPcxKT/3HVj5UYl1Cr/RIPGdXsf

G/BQj5unGxg9wA==

-----END CERTIFICATE-----

import { Document, Page, Text, View, StyleSheet, Image } from '@react-pdf/renderer'; const styles = StyleSheet.create({ page: { padding: 30, fontSize: 10, fontFamily: 'Helvetica' }, logo: { width: 120, height: 60, marginBottom: 10 }, section: { marginBottom: 10 }, row: { flexDirection: 'row', justifyContent: 'space-between', marginBottom: 2 }, header: { fontSize: 14, marginBottom: 4, fontWeight: 'bold' }, lineItemHeader: { fontSize: 10, marginTop: 5, borderBottom: 1, paddingBottom: 2 }, lineItemRow: { flexDirection: 'row', justifyContent: 'space-between', marginBottom: 2 }, totalRow: { flexDirection: 'row', justifyContent: 'flex-end', marginTop: 8, fontWeight: 'bold' }, }); export const InvoicePDF = ({ data, logoUrl }) => { const subtotal = data.lineItems.reduce((sum, item) => sum + item.amount, 0); const total = subtotal + data.tax; return ( INVOICE Invoice #: {data.invoiceNumber} Date Issued: {data.issuedDate} Client Info {data.clientName} {data.pocName} / {data.department} {data.email} {data.phone} {data.address} Description Qty Rate Amount {data.lineItems.map((item, idx) => ( {item.description} {item.quantity} × ${item.rate.toFixed(2)} = ${item.amount.toFixed(2)} ))} Subtotal: ${subtotal.toFixed(2)} Tax: ${data.tax.toFixed(2)} Total: ${total.toFixed(2)} Notes {data.notes} Approved By: {data.approvedBy} Signature: {data.signature} ); };