拆分非标尺寸PDF时FPDF GetPageWidth/GetPageHeight返回值异常
问题原因及解决方法
核心原因
你调用GetPageWidth()和GetPageHeight()时,获取的是FPDI实例初始化时的默认页面尺寸,而非源PDF的实际尺寸:
- 你用
new Fpdi("P", "mm")初始化时,默认采用的是A4纸的纵向尺寸(210mm×297mm),和源PDF的300×440mm完全无关。 setSourceFile()仅负责加载源PDF的内容,不会自动将FPDI的页面尺寸同步为源PDF的尺寸。
正确获取源PDF页面尺寸的方法
要获取源PDF某一页的实际尺寸,必须先导入对应页面的模板,再通过模板获取尺寸:
$pdf = new Fpdi("P", "mm"); $pageCount = $pdf->setSourceFile($sourcePath); // 以第1页为例,导入页面模板 $templateId = $pdf->importPage(1); // 获取该模板的实际尺寸 $size = $pdf->getTemplateSize($templateId); $pageWidth = $size['width']; $pageHeight = $size['height'];
- 若源PDF各页面尺寸不一致,需循环每一页分别获取对应尺寸。
- 拆分单页PDF时,每创建一页都要根据源页面尺寸重新设置FPDI的页面大小,示例代码如下:
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { $templateId = $pdf->importPage($pageNo); $size = $pdf->getTemplateSize($templateId); // 根据源页面尺寸设置新页面 $pdf->AddPage($size['orientation'], [$size['width'], $size['height']]); $pdf->useTemplate($templateId); // 此处可添加单页PDF的保存逻辑,按需求处理即可 }
内容的提问来源于stack exchange,提问作者f7n
相关产品推荐
相关产品推荐

