Skip to content

配置

TCPDF-Next 提供合理的默认值,开箱即可使用。每项配置都可以在创建文档时覆写,也可以之后通过链式 API 的 setter 方法修改。

文档默认值

调用 Document::create() 时,若未另行指定,将应用以下默认值:

配置默认值说明
页面尺寸PageSize::A4ISO A4(210 x 297 mm)
方向Orientation::Portrait纵向
单位Unit::Millimeter所有尺寸以毫米为单位
左边距15 mm页面左边距
上边距27 mm页面上边距
右边距15 mm页面右边距
下边距25 mm页面下边距
自动换页true接近下边距时自动新增页面
字体Helvetica, 12 pt默认字体与字号
php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Core\Enums\PageSize;
use Yeeefang\TcpdfNext\Core\Enums\Orientation;
use Yeeefang\TcpdfNext\Core\Enums\Unit;

$doc = Document::create(
    pageSize: PageSize::Letter,
    orientation: Orientation::Landscape,
    unit: Unit::Inch,
);

边距(Margins)

边距可以设置为全局值,也可以对单独页面覆写:

php
use Yeeefang\TcpdfNext\Core\ValueObjects\Margin;

// 全局边距
$doc->setMargins(new Margin(
    left: 20,
    top: 30,
    right: 20,
    bottom: 25,
));

// 针对特定页面覆写
$doc->addPage(
    margin: new Margin(left: 10, top: 10, right: 10, bottom: 10),
);

字体路径与目录

TCPDF-Next 会从可配置的目录清单中搜索字体文件。内建字体(Helvetica、Courier、Times、Symbol、ZapfDingbats)始终可用。若需使用自定义或 Unicode 字体,请注册额外的路径:

php
use Yeeefang\TcpdfNext\Core\Config\FontConfig;

$doc->configureFonts(function (FontConfig $config): void {
    // 新增包含 .ttf / .otf 文件的目录
    $config->addDirectory('/path/to/my/fonts');

    // 新增单一字体文件并指定别名
    $config->addFont('/path/to/MyFont-Regular.ttf', alias: 'MyFont');
});

TIP

字体文件默认以子集化方式嵌入,可有效缩小 PDF 文件大小。如有需要,也可以针对单独字体启用完整嵌入。

加密配置

PDF 加密通过 EncryptionConfig 值对象进行配置:

php
use Yeeefang\TcpdfNext\Core\Config\EncryptionConfig;
use Yeeefang\TcpdfNext\Core\Enums\EncryptionLevel;
use Yeeefang\TcpdfNext\Core\Enums\Permission;

$doc->setEncryption(new EncryptionConfig(
    level: EncryptionLevel::AES256,
    userPassword: 'reader-pass',
    ownerPassword: 'admin-pass',
    permissions: [
        Permission::Print,
        Permission::Copy,
    ],
));
等级说明
EncryptionLevel::RC4_40旧版 40 位 RC4(不建议使用)
EncryptionLevel::RC4_128128 位 RC4
EncryptionLevel::AES128128 位 AES
EncryptionLevel::AES256256 位 AES(建议使用)

标记式 PDF 配置

标记式(无障碍)PDF 可提升屏幕阅读器的支持度,且为 PDF/UA 标准所要求。全局启用标记功能:

php
$doc->enableTaggedPdf();

// 选择性设置文档语言,以利无障碍支持
$doc->setLanguage('zh-CN');

启用标记式 PDF 模式后,文字与表格 API 会自动生成结构标签(<P><H1><H6><Table> 等)。

确定性模式(Deterministic Mode)

默认情况下,PDF 会包含时间戳与唯一标识符,使每次输出的内容都不同。确定性模式会移除这些信息,让相同输入产生完全一致的字节输出——适用于快照测试与可复现的构建流程:

php
$doc->enableDeterministicMode();

WARNING

确定性模式会移除创建日期、修改日期与唯一文件标识符。若文档需要这些元数据字段,请勿启用此模式。

完整配置示例

以下示例将所有主要配置选项集中展示:

php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Core\Enums\PageSize;
use Yeeefang\TcpdfNext\Core\Enums\Orientation;
use Yeeefang\TcpdfNext\Core\Enums\Unit;
use Yeeefang\TcpdfNext\Core\Enums\EncryptionLevel;
use Yeeefang\TcpdfNext\Core\Enums\Permission;
use Yeeefang\TcpdfNext\Core\Config\EncryptionConfig;
use Yeeefang\TcpdfNext\Core\Config\FontConfig;
use Yeeefang\TcpdfNext\Core\ValueObjects\Margin;

$doc = Document::create(
    pageSize: PageSize::A4,
    orientation: Orientation::Portrait,
    unit: Unit::Millimeter,
);

// 边距
$doc->setMargins(new Margin(
    left: 15,
    top: 27,
    right: 15,
    bottom: 25,
));

// 字体
$doc->configureFonts(function (FontConfig $config): void {
    $config->addDirectory('/path/to/fonts');
});

// 加密
$doc->setEncryption(new EncryptionConfig(
    level: EncryptionLevel::AES256,
    userPassword: '',
    ownerPassword: 'secret',
    permissions: [Permission::Print],
));

// 无障碍
$doc->enableTaggedPdf();
$doc->setLanguage('zh-CN');

// 确定性输出(供测试使用)
// $doc->enableDeterministicMode();

// 元数据
$doc->setTitle('公司报告');
$doc->setAuthor('TCPDF-Next');
$doc->setSubject('每月摘要');
$doc->setKeywords('报告, 财务, 2026');

$doc->addPage();
$doc->cell(text: 'Hello, configured world!');
$doc->save('/tmp/configured.pdf');

以 LGPL-3.0-or-later 许可证发布。