个性化阅读
专注于IT技术分析

5个最好的PHP开源PDF生成库

本文概述

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, 请在下面的注释框中与社区共享, 祝你玩得开心!

赞(0)
未经允许不得转载:srcmini » 5个最好的PHP开源PDF生成库

评论 抢沙发

评论前必须登录!