本文概述
PDF文件的自动创建是项目(无论是否商业)最重要的方面之一。生成的PDF可能不适合你或你的团队, 而是适合你苛刻的客户, 你需要提供一种满足所有期望和要求的解决方案。
在某些情况下, 不是因为客户需求过大, 而是因为你用于生成PDF的库, 你会发现自己受到限制, 并且很可能遇到问题, 无法为客户提供解决方案。
在本文中, 我们将展示5个最不重要的PDF生成库, 这些库将帮助你实现那些复杂和扩展的PDF。
该主题的不同之处在于它们的实现难易程度, 用例, 库用户, 功能和开发状态。
5. FPDF
例子
FPDF是一个PHP类, 它允许使用纯PHP生成PDF文件, 也就是说, 无需使用PDFlib库。 FPDF中的F表示免费:你可以将其用于任何用途, 并对其进行修改以适合你的需求。
FPDF还具有其他优点:高级功能, 其主要功能包括:
- 选择度量单位, 页面格式和边距。
- 页面页眉和页脚管理。
- 自动分页符。
- 自动换行和文本对齐。
- 图像支持(JPEG, PNG和GIF)。
- 颜色。
- 链接。
- TrueType, Type1和编码支持。
- 页面压缩。
FPDF不需要扩展名(Zlib除外, 以启用压缩功能, 而GD则支持GIF)。最新版本至少需要PHP 5.1。
以下代码片段显示了使用FPDF生成的基本PDF:
<?php
require('fpdf/fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(40, 10, 'Hello World!');
$pdf->Output();
?>
4. mPDF
mPDF是一个PHP类, 可以从UTF-8编码的HTML生成PDF文件。它基于FPDF和HTML2FPDF, 具有许多增强功能。 mPDF由Ian Back编写, 并根据GNU GPL v2许可证发布。
在开始使用它之前, 我们请你阅读位于https://mpdf.github.io/的文档。
以下代码片段显示了使用mPDF安装作曲家后的基本PDF:
<?php
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new mPDF();
// Write some HTML code:
$mpdf->WriteHTML('<h1>Hello World</h1><br><p>My first PDF with mPDF</p>');
// Output a PDF file directly to the browser
$mpdf->Output();
?>
3. DOMPDF
Github
Dompdf(大多数情况下)是用PHP编写的, 符合CSS 2.1的HTML布局和呈现引擎。它是样式驱动的渲染器:它将下载和读取外部样式表, 内联样式标签以及单个HTML元素的样式属性。它还支持大多数演示HTML属性。
特征
- 处理大多数CSS 2.1和一些CSS3属性, 包括@ import, @ media和@page规则
- 支持大多数演示HTML 4.0属性
- 支持本地或通过http / ftp的外部样式表(通过fopen-wrappers)
- 支持复杂的表格, 包括行和列跨度, 单独和折叠的边框模型, 单个单元格样式
- 图像支持(gif, png(带有alpha通道的8、24和32位), bmp和jpeg)
- 借助R&OS PDF类, 无需依赖外部PDF库
- 内联PHP支持
- 基本SVG支持
要求
- PHP版本5.3.0或更高版本
- DOM扩展
- GD扩展
- MBString扩展
- PHP的字体库
- php-svg-lib
推荐建议
- OPcache(OPcache, XCache, APC等):提高性能
- IMagick或GMagick扩展:提高图像处理性能
以下代码段显示了如何使用Dompdf生成简单的PDF并生成直接下载:
<?php
require_once 'dompdf/autoload.inc.php';
// reference the Dompdf namespace
use Dompdf\Dompdf;
// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml('<h1>DOMPDF Demo</h1><br><p>Hello World !</p>');
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'portrait');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser
$dompdf->stream();
2. Snappy(wkhtmltopdf)
Github Snappy库| Github wkhtmltopdf
Snappy是一个PHP5库, 允许从url或html页面生成缩略图, 快照或PDF。它使用了出色的基于Webkit的wkhtmltopdf和wkhtmltoimage, 可在OSX, Linux, Windows上使用。你必须下载wkhtmltopdf 0.12.x才能使用Snappy。
wkhtmltopdf和wkhtmltoimage是开源(LGPLv3)命令行工具, 可使用Qt WebKit渲染引擎将HTML渲染为PDF和各种图像格式。它们完全”无头运行”, 不需要显示或显示服务。
你甚至可以下载wkhtmltopdf发行版作为作曲者依赖项, 并在你的项目中动态引用Binary。
以下代码段显示了带有Github主页的Windows中使用wkhtmltopdf的HTML基本PDF:
<?php
require __DIR__ . '/vendor/autoload.php';
use Knp\Snappy\Pdf;
// For example, in windows use the wkhtmltopdf executable file
$snappy = new Pdf('wkhtmltopdf.exe');
// Download the streamed PDF
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="file.pdf"');
echo $snappy->getOutput('http://www.github.com');
1. TCPDF
Github |主页
TCPDF是一个PHP库, 用于轻松, 两行地生成PDF文档。当你创建PDF文件时, 它支持自定义和许多关键功能。
该库支持Unicode字体, 由Nicola Asuni在Github存储库中积极维护。
它的官方主页上有大量示例和易于测试的摘录。 TCPDF具有以下主要功能:
- 基本功能不需要外部库。
- 所有标准页面格式, 自定义页面格式, 自定义边距和度量单位。
- UTF-8 Unicode和从右至左的语言。
- TrueTypeUnicode, OpenTypeUnicode v1, TrueType, OpenType v1, Type1和CID-0字体。
- 字体子集。
- 发布一些XHTML + CSS代码, Javascript和Forms的方法。
- 图像, 图形(几何图形)和转换方法。
- 本地支持JPEG, PNG和SVG图像, GD支持的所有图像(GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM)以及ImagMagick支持的所有图像(http://www.imagemagick.org/脚本/formats.php)
- 一维和二维条形码:CODE 39, ANSI MH10.8M-1983, USD-3、3之9, CODE 93, USS-93, 标准2之5, 交错2之5, CODE 128 A / B / C, 2和5位基于UPC的扩展名, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC(Royal Mail 4状态客户代码), CBC(客户条形码), KIX(文本索引-客户索引), 智能邮件条形码, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE两轨, Datamatrix, QR码, PDF417。
- JPEG和PNG ICC配置文件, 灰度, RGB, CMYK, 专色和透明胶片。
- 自动页面页眉和页脚管理。
- 高达256位的文件加密和数字签名认证。
- 到UNDO命令的事务。
- PDF批注, 包括链接, 文本和文件附件。
- 文本渲染模式(填充, 描边和剪切)。
- 多列模式。
- 不写页面区域。
- 书签, 命名的目的地和目录。
- 文字连字。
- 文字拉伸和间距(跟踪)。
- 自动分页符, 换行符和文本对齐方式, 包括对齐方式。
- 自动页面编号和页面组。
- 移动和删除页面。
- 页面压缩(需要php-zlib扩展名)。
- XOBject模板。
- 图层和对象可见性。
- PDF / A-1b支持。
以下示例如何使用TCPDF将HTML呈现为PDF:
<?php
// Include the main TCPDF library (search for installation path).
require_once('tcpdf_include.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Our Code World');
$pdf->SetTitle('Example Write Html');
// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 006', PDF_HEADER_STRING);
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// add a page
$pdf->AddPage();
$html = '<h4>PDF Example</h4><br><p>Welcome to the Jungle</p>';
$pdf->writeHTML($html, true, false, true, false, '');
// add a page
$pdf->AddPage();
$html = '<h1>Hey</h1>';
// output the HTML content
$pdf->writeHTML($html, true, false, true, false, '');
// reset pointer to the last page
$pdf->lastPage();
//Close and output PDF document
$pdf->Output('example_006.pdf', 'I');
首先是TCPDF, 为什么?从理论上讲, 第一个位置应该是wkhtmltopdf, 因为它使用webkit来呈现HTML, 并且可能更有助于将其呈现为canvas, SVG等。但是, 你需要知道并非每个开发人员都能够包含二进制文件(应用程序或TCPDF成为大多数开发人员的第一选择, 或者享受其在服务器上执行任何操作所需的特权。
TCPDF在此顶部居于首位, 因为它是最易于使用的PHP库来创建PDF, 但是, 由于它不需要可执行文件, 因此它最完整和扩展, 因为一切都可与Plain PHP一起使用。它涵盖了所有需要PDF生成功能的项目的基本要求。
如果你知道另一个很棒的PHP库可以生成PDF, 请在下面的注释框中与社区共享, 祝你玩得开心!
评论前必须登录!
注册