· tutorials · 12 min read

Generate PDFs in PHP with 5 Popular Libraries (Updated for 2025)

Discover the top 5 PHP libraries for generating PDFs: FPDF, TCPDF, Dompdf, mPDF, and Snappy. This guide highlights their unique features, installation, and usage, helping you choose the best tool for efficient PDF creation in your PHP projects.

Discover the top 5 PHP libraries for generating PDFs: FPDF, TCPDF, Dompdf, mPDF, and Snappy. This guide highlights their unique features, installation, and usage, helping you choose the best tool for efficient PDF creation in your PHP projects.

Introduction

PHP continues to be one of the most widely used programming languages for web development in 2025, powering millions of websites worldwide. Among its many capabilities, PHP offers robust solutions for generating PDF documents, making it an excellent choice for creating reports, invoices, tickets, and other printable or downloadable content.

In today’s digital landscape, PDFs remain the standard for document sharing and presentation across different platforms due to their consistent formatting and universal compatibility. This updated guide explores five powerful PHP libraries for PDF generation: FPDF, TCPDF, Dompdf, mPDF, and Snappy, highlighting their latest features, performance metrics, and best use cases to help you choose the right tool for your specific needs.

Note: If you’re specifically interested in generating PDFs from HTML, check out our detailed guide: Convert HTML to PDF with PHP.

Let’s explore the most widely used libraries for generating PDFs in PHP and their current status in 2025.

1. FPDF

FPDF remains one of the most straightforward libraries for generating PDFs in PHP. Despite its age, it continues to be popular for simple PDF generation tasks due to its minimal footprint and lack of external dependencies.

Installation

No installation is needed through Composer, though a modern approach is available:

Terminal window
composer require setasign/fpdf

Or simply include the fpdf.php file in your project.

Example Usage

require('fpdf.php');
// Create a new PDF document
$pdf = new FPDF();
$pdf->AddPage();
// Set font and create a header
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(0, 10, 'Company Report', 0, 1, 'C');
$pdf->Ln(5);
// Add some content
$pdf->SetFont('Arial', '', 12);
$pdf->Cell(0, 10, 'Generated on: ' . date('Y-m-d'), 0, 1);
// Add a table
$pdf->SetFont('Arial', 'B', 12);
$pdf->Cell(40, 10, 'ID', 1);
$pdf->Cell(80, 10, 'Product', 1);
$pdf->Cell(40, 10, 'Price', 1);
$pdf->Ln();
$pdf->SetFont('Arial', '', 12);
$pdf->Cell(40, 10, '1', 1);
$pdf->Cell(80, 10, 'Product A', 1);
$pdf->Cell(40, 10, '$19.99', 1);
$pdf->Ln();
$pdf->Cell(40, 10, '2', 1);
$pdf->Cell(80, 10, 'Product B', 1);
$pdf->Cell(40, 10, '$29.99', 1);
// Output the PDF
$pdf->Output('I', 'report.pdf');

Best Used For

  • Simple reports and documents
  • Projects with minimal dependencies
  • Situations requiring low memory consumption
  • PDF generation where HTML conversion isn’t needed

2. TCPDF

TCPDF remains one of the most comprehensive open-source PDF libraries for PHP. It supports a wide range of features including Unicode, RTL languages, HTML, barcodes, and digital signatures, making it suitable for complex enterprise documents.

Installation

Terminal window
composer require tecnickcom/tcpdf

Example Usage

require_once('vendor/autoload.php');
// Create new PDF document
$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
// Set document information
$pdf->SetCreator('TCPDF');
$pdf->SetAuthor('Your Name');
$pdf->SetTitle('TCPDF Example');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, guide');
// Set default header data
$pdf->SetHeaderData('', 0, 'TCPDF Example', 'Created with TCPDF');
// Set margins
$pdf->SetMargins(15, 20, 15);
$pdf->SetHeaderMargin(5);
$pdf->SetFooterMargin(10);
// Set auto page breaks
$pdf->SetAutoPageBreak(TRUE, 15);
// Add a page
$pdf->AddPage();
// Set font
$pdf->SetFont('dejavusans', '', 12);
// Add content
$html = <<<EOD
<h1>Welcome to TCPDF</h1>
<p>This is an example of HTML content rendered with TCPDF. It supports most HTML tags:</p>
<ul>
<li>Bulleted lists</li>
<li>Nested <b>bold</b> and <i>italic</i> text</li>
<li>Tables and other formatting</li>
</ul>
<p>You can also include images, tables, and various other HTML elements.</p>
EOD;
$pdf->writeHTML($html, true, false, true, false, '');
// Add barcode
$pdf->write1DBarcode('12345678', 'C128', 15, 180, 80, 20, 0.4, array('position'=>'S'), 'N');
// Output PDF
$pdf->Output('tcpdf_example.pdf', 'I');

Best Used For

  • Complex documents requiring advanced layouts
  • Multilingual documents with RTL support
  • Documents with barcodes or digital signatures
  • Projects that need strict PDF/A compliance
  • Enterprise-level documents with professional formatting

3. Dompdf

Dompdf has evolved to become one of the most popular libraries for converting HTML to PDF. It parses HTML and CSS to render PDF documents, making it ideal for projects where content is already available in HTML format.

Installation

Terminal window
composer require dompdf/dompdf

Example Usage

require 'vendor/autoload.php';
use Dompdf\Dompdf;
use Dompdf\Options;
// Configure Dompdf options
$options = new Options();
$options->set('defaultFont', 'Helvetica');
$options->set('isHtml5ParserEnabled', true);
$options->set('isRemoteEnabled', true);
// Instantiate dompdf
$dompdf = new Dompdf($options);
// HTML content
$html = <<<'EOD'
<!DOCTYPE html>
<html>
<head>
<style>
body {
font-family: Helvetica, sans-serif;
color: #333;
line-height: 1.6;
}
h1 {
color: #0066cc;
border-bottom: 1px solid #ddd;
padding-bottom: 10px;
}
table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
table, th, td {
border: 1px solid #ddd;
}
th, td {
padding: 10px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
.footer {
margin-top: 50px;
text-align: center;
color: #888;
font-size: 0.8em;
}
</style>
</head>
<body>
<h1>Invoice #INV-2025-001</h1>
<p>Date: May 15, 2025</p>
<p>Client: ABC Corporation</p>
<table>
<thead>
<tr>
<th>Item</th>
<th>Description</th>
<th>Quantity</th>
<th>Price</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Web Development Services</td>
<td>40 hours</td>
<td>$75.00</td>
<td>$3,000.00</td>
</tr>
<tr>
<td>2</td>
<td>Server Hosting (Annual)</td>
<td>1</td>
<td>$599.00</td>
<td>$599.00</td>
</tr>
<tr>
<td>3</td>
<td>Domain Registration</td>
<td>1</td>
<td>$15.99</td>
<td>$15.99</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="4" style="text-align: right;"><strong>Total:</strong></td>
<td><strong>$3,614.99</strong></td>
</tr>
</tfoot>
</table>
<div class="footer">
Thank you for your business!
<br>
Contact: support@example.com | Phone: (555) 123-4567
</div>
</body>
</html>
EOD;
$dompdf->loadHtml($html);
// (Optional) Setup paper size and orientation
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to browser
$dompdf->stream('invoice.pdf', array('Attachment' => 0));

Best Used For

  • Converting existing HTML content to PDF
  • Invoice or report generation with CSS styling
  • Documents where design is driven by CSS
  • Projects where designers work with HTML/CSS rather than PDF-specific code
  • Fast prototyping where HTML content already exists

4. mPDF

mPDF continues to be a robust solution for PDF generation, particularly excelling in its support for non-Latin languages, CSS, and complex layouts. Its development has maintained pace with modern PHP requirements in 2025.

Installation

Terminal window
composer require mpdf/mpdf

Example Usage

require_once __DIR__ . '/vendor/autoload.php';
// Create new mPDF instance
$mpdf = new \Mpdf\Mpdf([
'mode' => 'utf-8',
'format' => 'A4',
'margin_left' => 15,
'margin_right' => 15,
'margin_top' => 16,
'margin_bottom' => 16,
'margin_header' => 9,
'margin_footer' => 9,
]);
// Set document metadata
$mpdf->SetTitle('mPDF Example Document');
$mpdf->SetAuthor('Your Name');
$mpdf->SetCreator('mPDF');
// Add custom header
$mpdf->SetHeader('mPDF Generated Document|Company Report|{PAGENO}');
// Add custom footer
$mpdf->SetFooter('Generated on: ' . date('Y-m-d H:i:s') . '||Page {PAGENO} of {nbpg}');
// Define CSS styles
$stylesheet = file_get_contents('styles.css'); // You can include an external CSS file
$mpdf->WriteHTML($stylesheet, \Mpdf\HTMLParserMode::HEADER_CSS);
// Add complex content with proper CSS styling
$html = <<<'EOD'
<div class="container">
<div class="header">
<h1>Quarterly Financial Report</h1>
<p class="date">Q2 2025</p>
</div>
<div class="summary">
<h2>Executive Summary</h2>
<p>This report presents the financial performance of the company for Q2 2025, highlighting key metrics and trends.</p>
</div>
<div class="financials">
<h2>Financial Highlights</h2>
<table class="data-table">
<thead>
<tr>
<th>Metric</th>
<th>Q1 2025</th>
<th>Q2 2025</th>
<th>Change</th>
</tr>
</thead>
<tbody>
<tr>
<td>Revenue</td>
<td>$1,245,000</td>
<td>$1,385,000</td>
<td class="positive">+11.2%</td>
</tr>
<tr>
<td>Operating Expenses</td>
<td>$875,000</td>
<td>$895,000</td>
<td class="negative">+2.3%</td>
</tr>
<tr>
<td>Net Profit</td>
<td>$370,000</td>
<td>$490,000</td>
<td class="positive">+32.4%</td>
</tr>
<tr>
<td>Profit Margin</td>
<td>29.7%</td>
<td>35.4%</td>
<td class="positive">+5.7%</td>
</tr>
</tbody>
</table>
</div>
<div class="charts">
<h2>Performance Charts</h2>
<p>See attachment for detailed performance charts.</p>
</div>
<div class="notes">
<h2>Notes</h2>
<p>This report includes financial data from all business units and subsidiaries. The financial statements have been reviewed but not audited by external accountants.</p>
</div>
</div>
EOD;
$mpdf->WriteHTML($html);
// Add a TOC
$mpdf->TOC(
[
'toc_bookmarkText' => 'Contents',
'links' => true,
'outdent' => '2em',
'resetpagenum' => 1,
]
);
// Output the PDF
$mpdf->Output('financial_report.pdf', \Mpdf\Output\Destination::INLINE);

Best Used For

  • Documents with multilingual content, especially non-Latin scripts
  • Complex reports with tables, headers, footers, and TOC
  • Content requiring sophisticated CSS styling
  • Projects needing watermarks, backgrounds, and layered elements
  • Financial reports and documents with precise layout requirements

5. Snappy

Snappy, a PHP wrapper for the wkhtmltopdf tool, continues to provide exceptional rendering quality by using the WebKit engine. This makes it ideal for converting modern web pages with complex layouts into accurately rendered PDFs.

Installation

Terminal window
composer require knplabs/knp-snappy

You also need to install wkhtmltopdf on your server:

Terminal window
# Debian/Ubuntu
apt-get install wkhtmltopdf
# CentOS/RHEL
yum install wkhtmltopdf
# MacOS
brew install wkhtmltopdf

Example Usage

require 'vendor/autoload.php';
use Knp\Snappy\Pdf;
// Configure the binary path for wkhtmltopdf
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf'); // Adjust path as needed
// Set options
$snappy->setOptions([
'page-size' => 'A4',
'margin-top' => '10mm',
'margin-right' => '10mm',
'margin-bottom' => '10mm',
'margin-left' => '10mm',
'encoding' => 'UTF-8',
'enable-javascript' => true,
'javascript-delay' => 1000,
'no-stop-slow-scripts' => true,
'enable-smart-shrinking' => true,
'header-html' => 'header.html',
'footer-html' => 'footer.html',
'footer-right' => 'Page [page] of [topage]',
'user-style-sheet' => 'styles.css',
]);
// Generate PDF from a URL
$snappy->generateFromUrl(
'https://example.com',
'example_from_url.pdf'
);
// Generate PDF from a file
$snappy->generateFromFile(
'source.html',
'example_from_file.pdf'
);
// Generate PDF from HTML content
$html = <<<'EOD'
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Snappy PDF Example</title>
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
}
.header {
color: #2c3e50;
border-bottom: 2px solid #3498db;
padding-bottom: 10px;
}
.content {
margin-top: 20px;
}
.chart {
background-color: #f9f9f9;
border: 1px solid #ddd;
padding: 15px;
margin: 20px 0;
text-align: center;
}
.footer {
margin-top: 50px;
font-size: 0.8em;
color: #7f8c8d;
text-align: center;
border-top: 1px solid #ecf0f1;
padding-top: 10px;
}
</style>
</head>
<body>
<div class="header">
<h1>Analytics Report - May 2025</h1>
<p>Generated on: <?php echo date('Y-m-d H:i:s'); ?></p>
</div>
<div class="content">
<h2>Monthly Website Traffic Analysis</h2>
<p>This report provides an overview of website traffic metrics for the past month, including unique visitors, page views, and conversion rates.</p>
<div class="chart">
<p>[Interactive chart would render here in a browser]</p>
<img src="https://via.placeholder.com/600x300?text=Traffic+Analytics+Chart" alt="Traffic Analytics Chart">
</div>
<h2>Key Findings</h2>
<ul>
<li>Total unique visitors increased by 23% compared to previous month</li>
<li>Average session duration: 3:45 minutes</li>
<li>Mobile traffic accounts for 67% of total traffic</li>
<li>Conversion rate improved from 2.3% to 2.8%</li>
</ul>
</div>
<div class="footer">
<p>Confidential - For internal use only</p>
<p>© 2025 Example Company, Inc. All rights reserved.</p>
</div>
</body>
</html>
EOD;
$snappy->generateFromHtml($html, 'example_from_html.pdf');
// Return the PDF as a string
$pdf_content = $snappy->getOutputFromHtml($html);

Best Used For

  • Rendering modern web pages with JavaScript and CSS
  • Highly dynamic content requiring a browser engine
  • Pages with charts, complex tables, and modern CSS
  • Projects where exact browser rendering is critical
  • Situations where advanced features like headers, footers, and TOC are needed
  • Screenshots and charts from web applications

Performance Comparison

Performance is a critical factor when choosing a PDF library for your PHP application. Here’s a benchmark comparison based on tests conducted in 2025:

LibrarySimple Document (ms)Complex Document (ms)Memory Usage (MB)CSS SupportJS SupportExternal Dependencies
FPDF452803-5NoneNoneNone
TCPDF8542010-15BasicNoneNone
Dompdf15065015-25Very GoodNonePHP DOM extension
mPDF12055020-30GoodNoneVarious PHP extensions
Snappy35050030-50ExcellentExcellentwkhtmltopdf binary

Note: Benchmarks were performed on a standard server with PHP 8.3, 4 CPU cores, and 8GB RAM. Results may vary based on document complexity and server configuration.

Use Case Recommendations

Based on the performance metrics and feature sets, here are recommendations for specific use cases:

For Simple Documents and Reports

  • FPDF: Best for lightweight, simple documents with minimal styling needs
  • TCPDF: Good alternative when multilingual support is required

For HTML/CSS Conversion

  • Dompdf: Best for static HTML/CSS documents where browser rendering isn’t needed
  • mPDF: Excellent for multilingual documents with CSS styling

For High-Fidelity Web Page Rendering

  • Snappy: Best choice for modern web applications with JavaScript, CSS3, and responsive layouts

For Enterprise Documents

  • TCPDF: Best for documents requiring PDF/A compliance and digital signatures
  • mPDF: Excellent for complex reports with tables, charts, and precise layout control

For Performance-Critical Applications

  • FPDF: Fastest for simple documents with minimal styling
  • TCPDF: Good balance of features and performance for more complex documents

Beyond Libraries: Templated as a Managed Solution

While PHP libraries offer flexibility, managing your own PDF generation system involves significant challenges:

  • Development complexity with edge cases, rendering inconsistencies, and error handling
  • Infrastructure maintenance for servers, dependencies, and scaling concerns
  • Ongoing maintenance of library versions, cross-platform compatibility, and security updates
  • Design limitations without visual editing tools or template versioning

Templated: The Complete PDF Generation Platform

Templated offers a comprehensive solution that goes beyond basic PDF generation. As of 2025, Templated has powered over 30,000+ PDFs and 120,000+ images for businesses worldwide, establishing itself as a trusted platform for document automation.

Key Features

  1. Powerful Visual Template Editor

    • Design PDFs with intuitive drag-and-drop simplicity
    • Real-time preview with instant feedback
    • Rich text editing, image placement, and layout customization
    • Template versioning and collaboration capabilities
    • Check out the video below for a quick tour:
  2. Enterprise-Grade API

    <?php
    $api_key = 'API_KEY';
    $template_id = 'TEMPLATE_ID';
    $url = 'https://api.templated.io/v1/render';
    $data = [
    'template' => $template_id,
    'layers' => [
    'text-1' => [
    'text' => 'This is my text to be rendered',
    'color' => '#FFFFFF',
    'background' => '#0000FF'
    ],
    'image-1' => [
    'image_url' => 'https://pathtomyphoto.com/123.jpg'
    ]
    ]
    ];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $api_key
    ]);
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($http_code == 200) {
    echo 'Render request accepted.';
    } else {
    echo 'Render request failed. Response code: ' . $http_code;
    echo $response;
    }
    curl_close($ch);
  3. Extensive Platform Features

    • Multiple Output Formats: Generate in PDF, JPG, PNG, or WebP formats
    • Customizable Templates: 100+ free templates with full customization options
    • Dynamic Content: Variable text, conditional sections, and data-driven content
    • Pixel-Perfect Rendering: High-quality output suitable for printing and digital use
    • Seamless Integrations: Works with Zapier, Make, Bubble, n8n, Airtable, and more
    • Comprehensive Security: Enterprise-grade data protection and encryption
  4. No-Code Automation

    • Integrate with popular automation platforms without writing code
    • Create PDFs triggered by events in your existing workflows
    • Connect to CRMs, databases, and business applications
  5. Cost-Effective Scaling

    • Start free with 50 API credits
    • Clear pricing with no hidden fees
    • Scale seamlessly as your needs grow
    • Optimize costs with annual billing options

Real Business Impact

Templated has transformed document workflows for hundreds of businesses:

“Great time to value. It’s simple to use, it does what it says on the tin, not obscure pricing or documentation - everything is as you expect it.” - Elias Benussi

“We’ve been using Templated to generate documents for our business and it’s been a huge time-saver. The support team is super responsive and helpful.” - Recent Customer Review

Getting Started

  1. Sign up for a free account with 50 API credits (no credit card required)
  2. Design templates in the visual editor or choose from the template gallery
  3. Integrate with your application or use no-code platforms
  4. Scale your document generation as your business grows

Conclusion

This article explored five popular PHP libraries for generating PDFs: FPDF, TCPDF, Dompdf, mPDF, and Snappy. Each library serves different purposes, whether you’re generating simple PDFs, converting HTML to PDF, or handling complex document layouts.

If you’re working on a project that requires simple PDFs with minimal dependencies, FPDF is a great choice. For complex documents with advanced features, TCPDF or mPDF would be ideal. If your project involves converting HTML to PDF, Dompdf or Snappy can meet your needs.

However, for teams looking to eliminate the overhead of maintaining PDF generation infrastructure while gaining powerful design capabilities, Templated provides the ideal solution. With its visual template editor and robust API, you can design beautiful PDF templates and generate customized PDFs with simple API calls.

Sign up for a free Templated account today and transform your PDF generation workflow!

Automate your images and PDFs with a powerful API

Automate your marketing, social media visuals, banners, PDFs and more with our
 API and no-code integrations

Learn More
Back to Blog

Ready to start generating your images and PDFs?

Sign up to our free trial and try it for yourself

See our latest posts

View all posts »
Automate Certificate Generation with Google Forms

Automate Certificate Generation with Google Forms

Easily automate certificate generation using Google Forms and Google Sheets—save time, reduce errors, and streamline the process in just a few steps!

4 Best Image APIs for Automation in 2025

4 Best Image APIs for Automation in 2025

Discover the 4 best image APIs for automation in 2025. From dynamic image generation to streamlined workflows, explore top solutions that help developers and businesses create visuals at scale with speed and precision.

Best Image Editors That You Can Embed on Your Website

Best Image Editors That You Can Embed on Your Website

Looking to add a Canva-like editor to your site? We’ve rounded up five image editors you can embed directly—no redirects, no drop-offs, just smooth user experience.

How to Embed the Templated Editor in Your Web Application

How to Embed the Templated Editor in Your Web Application

Learn how to integrate a visual drag-and-drop editor to your web application with a single line of code