Generating Invoice PDFs with React-PDF
React.jsTypeScriptJavaScript
Published at: 5/12/2025
Generating Invoice PDFs with React-PDF
React-PDF is a powerful library for generating and displaying PDF documents within React applications. This article demonstrates how to implement an invoice PDF generator using React-PDF.
Features of React-PDF
- Define PDFs as React components
- Customizable styling
- Responsive layouts
Implementation Example
Here's an example of a component that generates an invoice PDF:
import { PDFViewer, Document, Page, StyleSheet, Text, View, Font } from "@react-pdf/renderer";
// Register Japanese fonts
Font.register({
family: "NotoSansJP",
fonts: [
{
src: "../fonts/NotoSansJP-Regular.ttf",
},
{
src: "../fonts/NotoSansJP-Bold.ttf",
fontWeight: "bold",
},
],
});
// Define styles
const styles = StyleSheet.create({
page: {
padding: 30,
fontSize: 11,
fontFamily: "NotoSansJP",
},
header: {
fontSize: 24,
fontWeight: "bold",
textAlign: "center",
},
// ... other styles
});
// PDF Component
const InvoicePDF = ({ invoiceData }) => {
return (
<PDFViewer width="100%" height="100%">
<Document>
<Page style={styles.page} size="A4">
<View>
<Text style={styles.header}>Invoice</Text>
{/* Invoice content */}
</View>
</Page>
</Document>
</PDFViewer>
);
};Key Components
- PDFViewer: Component for displaying PDFs
- Document: Root component for PDF documents
- Page: Defines individual pages
- View: Container for layout
- Text: Displays text content
Styling
React-PDF uses StyleSheet for defining styles. It supports a subset of CSS and includes Flexbox layout capabilities.
const styles = StyleSheet.create({
container: {
flexDirection: 'row',
justifyContent: 'space-between',
},
text: {
fontSize: 12,
color: '#000',
},
});Complete Implementation Example
Here's a more detailed example of an invoice PDF generator:
const InvoicePDF = ({ invoiceData }) => {
return (
<PDFViewer width="100%" height="100%">
<Document>
<Page style={styles.page} size="A4">
<View style={styles.headerContainer}>
<Text style={styles.header}>Invoice</Text>
</View>
<View style={styles.details}>
<View style={styles.detailItem}>
<Text>{invoiceData.clientInfo.name}</Text>
<Text>Invoice Date: {formatDate(invoiceData.billingDate)}</Text>
</View>
</View>
{/* Invoice items table */}
<View style={styles.itemsTable}>
{/* Table implementation */}
</View>
{/* Tax calculations */}
<View style={styles.totalContainer}>
{/* Total amount calculations */}
</View>
</Page>
</Document>
</PDFViewer>
);
};Best Practices
- Font Management: Register fonts at the application level
- Performance: Optimize PDF generation for large documents
- Error Handling: Implement proper error boundaries
- Testing: Test PDF generation with various data sets
Conclusion
React-PDF provides a flexible solution for generating and displaying PDFs within React applications. It's particularly well-suited for business documents like invoices and reports.