daif/chrome-pdf-bundle
最新稳定版本:v0.9.0-alpha
Composer 安装命令:
composer require daif/chrome-pdf-bundle
包简介
A Symfony bundle for generating PDFs and screenshots using a local Chrome/Chromium binary via Chrome DevTools Protocol, with a clean, builder-based API.
README 文档
README
WYSIWYPDF -- What You See Is What You PDF
The dockerless PDF generator for Symfony. Just Chrome. No containers, no wrapping, no kidding.
composer require daif/chrome-pdf-bundle
Why this bundle?
I wanted to use sensiolabs/gotenberg-bundle -- it's a great and complete Symfony bundle for PDF generation. But it relies on Gotenberg, which requires a running Docker container.
In my case, working in on-premise environments (banking, insurance, regulated industries), Docker is simply not available on production servers. Security policies and infrastructure constraints prevent running containers.
Yet these same machines almost always have a browser installed, or can easily add one. Google Chrome and Chromium are well-maintained, widely trusted, and available on virtually every Linux distribution through standard package managers.
So I built ChromePdfBundle: the same clean builder-based API, but driving Chrome/Chromium directly via the Chrome DevTools Protocol -- no Docker, no external service, no extra infrastructure.
| Docker-based solutions | ChromePdfBundle |
|---|---|
| Require Docker + a running container | Requires only a Chrome/Chromium binary |
| HTTP calls to an external service | Direct communication via CDP |
| Extra infrastructure to maintain | Uses a browser already on the system |
| Not usable in Docker-free environments | Works everywhere Chrome runs |
How to install
Requirements
- PHP 8.1+
- Symfony 6.4 / 7.x / 8.x
- Google Chrome or Chromium installed on the system (see Chrome installation guide)
composer require daif/chrome-pdf-bundle
This installs the bundle along with chrome-php/chrome, the PHP library used to communicate with Chrome via the DevTools Protocol.
Enable the bundle
If not using Symfony Flex, manually register the bundle:
// config/bundles.php return [ // ... Daif\ChromePdfBundle\DaifChromePdfBundle::class => ['all' => true], ];
Configuration
Create a minimal configuration:
# config/packages/daif_chrome_pdf.yaml daif_chrome_pdf: assets_directory: '%kernel.project_dir%/assets'
The bundle will automatically detect Chrome/Chromium on your system. You can also specify the binary path explicitly:
daif_chrome_pdf: chrome_binary: '/usr/bin/google-chrome'
Basic Usage
PDF from Twig template
namespace App\Controller; use Daif\ChromePdfBundle\ChromePdfInterface; use Symfony\Component\HttpFoundation\Response; class InvoiceController { public function generateInvoice(ChromePdfInterface $chromePdf): Response { return $chromePdf->html() ->content('invoice.html.twig', [ 'invoice' => $invoice, ]) ->generate() ->stream() ; } }
PDF from URL
use Daif\ChromePdfBundle\ChromePdfInterface; class ReportController { public function generateReport(ChromePdfInterface $chromePdf): Response { return $chromePdf->url() ->url('https://example.com/report') ->generate() ->stream() ; } }
PDF from Markdown
use Daif\ChromePdfBundle\ChromePdfInterface; class DocController { public function generateDoc(ChromePdfInterface $chromePdf): Response { return $chromePdf->markdown() ->wrapper('wrapper.html.twig') ->files('content.md') ->generate() ->stream() ; } }
Screenshot
use Daif\ChromePdfBundle\ChromeScreenshotInterface; class ScreenshotController { public function capture(ChromeScreenshotInterface $chromeScreenshot): Response { return $chromeScreenshot->html() ->content('page.html.twig') ->generate() ->stream() ; } }
Twig assets
If a template needs to link to a static asset (image, CSS, font), use the {{ chrome_pdf_asset() }} Twig function:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <title>My PDF</title> </head> <body> <img src="{{ chrome_pdf_asset('img/logo.png') }}" alt="Logo"/> </body> </html>
Advanced Usage
- Chrome installation guide
- Configuration
- Processing (saving, streaming, S3...)
- Working with assets
- Working with fonts
Screenshot
Licence
MIT License (MIT): see the License File for more details.
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 7
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-02-11