You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用TCPDF设置5.8cm宽自定义页面尺寸不生效问题

问题根因

无报错但尺寸不生效是两个问题叠加导致的:

  1. AddPage()参数传参顺序完全错误
    TCPDF的页面单位是构造实例时全局指定的,AddPage()方法没有单独设置单位的入参,该方法的官方签名如下:
public function AddPage(
    $orientation = '',  // 页面方向
    $format = '',       // 页面格式/自定义尺寸
    $keepmargins = false, // 是否保留之前的边距设置,布尔值
    $tocpage = false    // 是否为目录页
)

你写的$pdf->AddPage('P', 'cm', array(5.8,7));中,第二个参数位置本来应该传页面格式/尺寸,你传入了字符串'cm';第三个参数位置本来应该传布尔值,你传入了尺寸数组。PHP弱类型特性下不会抛出参数类型错误,只会把传入的数组隐式转换为布尔值true,你设置的自定义尺寸根本没有被方法识别,最终页面沿用了构造函数里默认的PDF_PAGE_FORMAT(默认值为A4规格),尺寸自然不符合预期。
2. 默认单位不匹配
TCPDF全局默认长度单位PDF_UNIT的取值是mm(毫米),如果你没有手动修改过该常量定义,就算参数位置传对,直接传厘米单位的数值也会出现10倍的尺寸偏差。

解决方案

二选一即可:

方案1:全局设置厘米单位,按参数规范传值

构造TCPDF实例时直接指定全局单位为厘米,同时设置默认页面尺寸,后续调用AddPage()不需要重复传单位:

// 构造函数第二个参数指定全局单位为cm,第三个参数传默认自定义页面尺寸[宽5.8cm, 高7cm]
$pdf = new TCPDF('P', 'cm', array(5.8,7), true, 'UTF-8', false);
// 新增页面时仅传方向即可,会自动沿用全局设置的单位和默认尺寸
$pdf->AddPage('P');

// 如果后续需要新增其他尺寸的页面,把尺寸数组作为第二个参数传入即可
// $pdf->AddPage('P', array(10, 8));

方案2:沿用默认毫米单位,换算尺寸后传入

如果不想修改全局单位,将厘米尺寸换算为毫米后传入即可:

// 沿用默认配置,默认单位为mm
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// 5.8cm=58mm,7cm=70mm,尺寸数组作为AddPage第二个参数传入
$pdf->AddPage('P', array(58,70));
尺寸校验方法

生成文件前可以调用内置方法确认尺寸是否正确,返回值单位和你设置的全局单位一致:

// 输出当前页面宽高做校验
echo '当前页面宽度:' . $pdf->getPageWidth() . ',当前页面高度:' . $pdf->getPageHeight();

生成文件后也可以直接在PDF阅读器的「文档属性」中查看实际页面尺寸做二次确认。

内容的提问来源于stack exchange,提问作者Maryam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 08:54:20