
本文详解 tcpdf 中如何精确设置非标准页面尺寸(如宽 5.8 cm、高 7 cm),指出常见错误用法,并提供单位换算、实例代码及关键注意事项。
本文详解 tcpdf 中如何精确设置非标准页面尺寸(如宽 5.8 cm、高 7 cm),指出常见错误用法,并提供单位换算、实例代码及关键注意事项。
在使用 TCPDF 生成自定义尺寸 PDF(例如小票、标签或卡片)时,一个常见误区是误用 AddPage() 方法传入自定义尺寸——AddPage() 的第三个参数(页面尺寸数组)仅在构造时未指定 PDF_PAGE_FORMAT 时才生效,且其单位必须与构造函数中 PDF_UNIT 严格一致;而你当前代码中 PDF_PAGE_FORMAT 是预设常量(如 'A4'),导致自定义尺寸被忽略。
✅ 正确做法:在构造 TCPDF 实例时直接传入自定义页面布局数组,并显式指定单位为 'cm'(而非 'pt',除非你手动换算)。TCPDF 原生支持 'cm' 单位,无需手动转点(1 cm ≈ 28.35 pt)。
以下是推荐写法(单位为厘米,直观准确):
// 定义页面尺寸:宽 5.8 cm,高 7 cm(注意:数组顺序为 [宽度, 高度])
$pageLayout = array(5.8, 7);
// 构造 TCPDF 实例:方向 'P'(纵向),单位 'cm',布局为自定义数组
$pdf = new TCPDF('P', 'cm', $pageLayout, true, 'UTF-8', false);
// 添加第一页(无需再传尺寸,构造时已确定)
$pdf->AddPage();
// 可选:验证实际尺寸(调试用)
echo "Page width: " . $pdf->getPageWidth() . " cm\n"; // 输出约 5.8
echo "Page height: " . $pdf->getPageHeight() . " cm\n"; // 输出约 7
⚠️ 注意事项:
- AddPage('P', 'cm', array(5.8,7)) ❌ 无效:AddPage() 不接受单位字符串作为第二个参数(该参数仅接受 'P'/'L');'cm' 会被忽略,数组也因构造时已固定格式而不生效。
- 自定义 $pageLayout 数组顺序为 [width, height](非 [height, width]),与 PDF 规范一致。
- 若需毫米(mm)精度,可改用 'mm' 单位并传入 array(58, 70),效果等价。
- 中文字体需确保已注册(如 addTTFfont() 或使用内置 UTF-8 字体),否则中文可能乱码或不显示。
总结:TCPDF 自定义页尺寸的核心在于 构造函数第三参数,而非 AddPage();坚持“单位统一、构造即定”的原则,即可精准控制每一页的物理尺寸。










