多页文件
当内容无法在单页内呈现时,就需要创建多页文件。TCPDF-Next 支持手动新增页面、自动分页、混合不同页面尺寸,以及页码管理等功能。
手动新增页面
最基本的做法是通过 addPage() 逐页新增内容:
php
<?php
use YeeeFang\TcpdfNext\Document\PdfDocument;
use YeeeFang\TcpdfNext\Document\PageFormat;
use YeeeFang\TcpdfNext\Content\FontStyle;
$pdf = PdfDocument::create()
->setTitle('多页文件示例')
->setPageFormat(PageFormat::A4)
->build();
// 第一页:封面
$page1 = $pdf->addPage();
$page1->addText('年度技术报告')
->setPosition(105, 120)
->setFont('Helvetica', size: 28, style: FontStyle::BOLD)
->setAlignment(Alignment::CENTER);
$page1->addText('技术部门 | 2026 年 2 月')
->setPosition(105, 140)
->setFont('Helvetica', size: 14)
->setAlignment(Alignment::CENTER);
// 第二页:目录
$page2 = $pdf->addPage();
$page2->addText('目录')
->setPosition(20, 25)
->setFont('Helvetica', size: 18, style: FontStyle::BOLD);
$page2->addText('1. 项目概述 .......... 3')
->setPosition(20, 45)
->setFont('Helvetica', size: 11);
$page2->addText('2. 技术架构 .......... 5')
->setPosition(20, 55)
->setFont('Helvetica', size: 11);
// 第三页:正文
$page3 = $pdf->addPage();
$page3->addText('第一章:项目概述')
->setPosition(20, 25)
->setFont('Helvetica', size: 18, style: FontStyle::BOLD);
$page3->addParagraph('本章节概述了 2026 年度所有主要技术项目的进展与成果...')
->setPosition(20, 45)
->setWidth(170)
->setFont('Helvetica', size: 11)
->setLineHeight(1.5);
$pdf->save('multi_page.pdf');自动分页
当写入的内容超出页面底部时,TCPDF-Next 可以自动创建新页面并接续内容:
php
use YeeeFang\TcpdfNext\Html\HtmlRenderer;
$pdf = PdfDocument::create()
->setPageFormat(PageFormat::A4)
->setAutoPageBreak(true, margin: 25) // 底部保留 25mm 边距
->build();
$pdf->addPage();
$renderer = new HtmlRenderer($pdf);
// 写入大量内容,系统自动处理分页
$longContent = str_repeat(
'<p>这是一段测试文字,用来展示自动分页功能。'
. 'TCPDF-Next 会在内容即将超出页面时自动换页,开发者不需要手动计算。</p>',
30
);
$renderer->writeHtml($longContent);分页事件回调
您可以通过回调函数,在每次自动分页时执行自定义逻辑:
php
use YeeeFang\TcpdfNext\Graphics\Color;
$pdf->onPageBreak(function (Page $newPage, int $pageNumber) {
// 在每个新页面顶部画一条分隔线
$newPage->drawLine(20, 15, 190, 15)
->setColor(Color::hex('#3498DB'))
->setWidth(0.5);
});混合页面尺寸与方向
同一份 PDF 中可以混合不同的页面尺寸与方向,适合包含横向图表或大型表格的报告:
php
// A4 纵向
$pdf->addPage();
// A4 横向(适合宽表格或图表)
$pdf->addPage(PageFormat::A4_LANDSCAPE);
// A3 页面(大尺寸海报或工程图)
$pdf->addPage(PageFormat::A3);
// Letter 尺寸(美规纸张)
$pdf->addPage(PageFormat::LETTER);页码管理
显示页码
php
// 在页脚加入页码
$pdf->onPageFooter(function (Page $page, int $pageNumber, int $totalPages) {
$page->addText("第 {$pageNumber} 页,共 {$totalPages} 页")
->setPosition(105, 285)
->setFont('Helvetica', size: 9)
->setAlignment(Alignment::CENTER);
});跳过封面页码
如果封面和目录不需要显示页码,可以设置起始页号:
php
// 封面页(不计入页码)
$pdf->addPage();
// ... 封面内容
// 目录页(不计入页码)
$pdf->addPage();
// ... 目录内容
// 从这里开始计算为第 1 页
$pdf->setStartingPageNumber(1);
$pdf->addPage();
// ... 正文内容书签导航
为长文件加入书签,让用户能在 PDF 阅读器的导航面板中快速跳转:
php
$page1 = $pdf->addPage();
$pdf->addBookmark('第一章:简介', level: 0);
$page2 = $pdf->addPage();
$pdf->addBookmark('第二章:核心概念', level: 0);
$pdf->addBookmark('2.1 基础架构', level: 1);
$pdf->addBookmark('2.2 配置选项', level: 1);
$page3 = $pdf->addPage();
$pdf->addBookmark('第三章:实现', level: 0);完整示例:多章节报告
php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use YeeeFang\TcpdfNext\Document\PdfDocument;
use YeeeFang\TcpdfNext\Document\PageFormat;
use YeeeFang\TcpdfNext\Content\FontStyle;
use YeeeFang\TcpdfNext\Content\Alignment;
use YeeeFang\TcpdfNext\Graphics\Color;
$pdf = PdfDocument::create()
->setTitle('2026 年度技术报告')
->setAuthor('技术部门')
->setPageFormat(PageFormat::A4)
->setAutoPageBreak(true, margin: 25)
->build();
// 封面
$cover = $pdf->addPage();
$cover->addText('2026 年度技术报告')
->setPosition(105, 100)
->setFont('Helvetica', size: 28, style: FontStyle::BOLD)
->setColor(Color::hex('#2C3E50'))
->setAlignment(Alignment::CENTER);
$cover->addText('技术部门 | 2026 年 2 月')
->setPosition(105, 120)
->setFont('Helvetica', size: 14)
->setColor(Color::hex('#7F8C8D'))
->setAlignment(Alignment::CENTER);
// 章节内容
$chapters = [
'项目概述' => '本章节概述了年度所有主要技术项目的进展与成果...',
'技术架构' => '我们在本年度对系统架构进行了重大升级...',
'性能优化' => '通过一系列优化措施,系统响应时间降低了 60%...',
];
foreach ($chapters as $title => $content) {
$page = $pdf->addPage();
$pdf->addBookmark($title, level: 0);
$page->addText($title)
->setPosition(20, 25)
->setFont('Helvetica', size: 20, style: FontStyle::BOLD)
->setColor(Color::hex('#2C3E50'));
$page->drawLine(20, 38, 80, 38)
->setColor(Color::hex('#3498DB'))
->setWidth(0.8);
$page->addParagraph($content)
->setPosition(20, 48)
->setWidth(170)
->setFont('Helvetica', size: 11)
->setLineHeight(1.5)
->setAlignment(Alignment::JUSTIFY);
}
$pdf->save('annual_report.pdf');