bigbozo / fpdi
FPDI 是一系列 PHP 类,帮助开发者从现有的 PDF 文档中读取页面,并在 FPDF 中用作模板。由于也可以使用 FPDI 与 TCPDF 一起,因此没有定义固定的依赖关系。请参阅评估依赖关系的包的建议
Requires
- php: ^5.6 || ^7.0 || ^8.0
- ext-zlib: *
Requires (Dev)
- phpunit/phpunit: ~5.7
- setasign/fpdf: ~1.8
- setasign/tfpdf: 1.31
- squizlabs/php_codesniffer: ^3.5
- tecnickcom/tcpdf: ~6.2
Suggests
- setasign/fpdf: FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured.
Conflicts
- setasign/tfpdf: <1.31
This package is auto-updated.
Last update: 2024-09-07 20:09:16 UTC
README
❗ 本文档参考 FPDI 2 版本。版本 1 已弃用,开发已停止。❗
FPDI 是一系列 PHP 类,帮助开发者从现有的 PDF 文档中读取页面,并在由 Olivier Plathey 开发的 FPDF 中用作模板。除了包含一个 FPDF 的副本外,FPDI 不需要任何特殊的 PHP 扩展。
FPDI 还可以作为 TCPDF 或 tFPDF 的扩展使用。
使用 Composer 进行安装
由于 FPDI 可以与 FPDF、TCPDF 或 tFPDF 一起使用,我们尚未在主 composer.json 文件中添加固定依赖项。您需要自己将依赖项添加到您选择的 PDF 生成库中。
要使用 FPDF 与 FPDI 一起,请在您的 composer.json 文件中包含以下内容
{
"require": {
"setasign/fpdf": "1.8.*",
"setasign/fpdi": "^2.0"
}
}
如果您想使用 TCPDF,您必须更新您的 composer.json 到以下内容
{
"require": {
"tecnickcom/tcpdf": "6.3.*",
"setasign/fpdi": "^2.0"
}
}
如果您想使用 tFPDF,您必须更新您的 composer.json 到以下内容
{
"require": {
"setasign/tfpdf": "1.31.*",
"setasign/fpdi": "^2.3"
}
}
手动安装
如果您不使用 composer,只需要求 /src 文件夹中的 autoload.php
require_once('src/autoload.php');
如果您实现了一个 PSR-4 自动加载器,只需按如下方式注册 src 路径
$loader = new \Example\Psr4AutoloaderClass; $loader->register(); $loader->addNamespace('setasign\Fpdi', 'path/to/src/');
版本 1 的更改
版本 2 是从零开始重写的 FPDI 的完整版本,它包含
- 命名空间代码
- 干净且最新的代码库和风格
- PSR-4 兼容的自动加载
- 性能提升高达 100%
- 内存消耗降低
- 原生支持从字符串或流资源中读取 PDF
- 支持文件头之前包含“无效”数据的文档
- 优化页面树解析
- 使用单个异常
- 多种测试类型(单元测试、功能测试和视觉测试)
我们尽量保持主要方法和逻辑流程与版本 1 相同,但请注意,有一些不兼容的更改,您在升级到版本 2 时应予以考虑
- 您需要使用
src/autoload.php文件而不是classes/FPDI.php来加载代码。 - 类和特性现在是命名空间化的:
setasign\Fpdi - 以斜杠开头的页面边界,如
/MediaBox,不再受支持。删除斜杠或使用PdfReader\PageBoundaries的常量。 useTemplate()或getTemplateSize()方法的参数 $x、$y、$width 和 $height 现在具有更合理的默认值。现在传递0作为宽度或高度将导致InvalidArgumentException。getTemplateSize()的返回值已更改为具有更多说明性键和可重用性的数组:使用width代替w,使用height代替h。- 如果您想使用 FPDI 与 TCPDF 一起,您需要重构您的代码以使用类
Tcpdf\Fpdi(自 2.1 版起;之前是TcpdfFpdi)而不是FPDI。
示例和文档
一个简单的示例,导入单个页面并将其放置在创建的新页面上
<?php use setasign\Fpdi\Fpdi; // or for usage with TCPDF: // use setasign\Fpdi\Tcpdf\Fpdi; // or for usage with tFPDF: // use setasign\Fpdi\Tfpdf\Fpdi; // setup the autoload function require_once('vendor/autoload.php'); // initiate FPDI $pdf = new Fpdi(); // add a page $pdf->AddPage(); // set the source file $pdf->setSourceFile("Fantastic-Speaker.pdf"); // import page 1 $tplId = $pdf->importPage(1); // use the imported page and place it at point 10,10 with a width of 100 mm $pdf->useTemplate($tplId, 10, 10, 100); $pdf->Output();
完整的用户文档和API参考可在此处查看:这里。