使用mPDF与phpSpreadsheet生成PDF时如何调整单元格间距?
解决PhpSpreadsheet+mPDF生成PDF时数字与文本单元格无间距的问题
你遇到的问题确实是因为数字单元格默认右对齐、文本单元格默认左对齐,mPDF渲染PDF时,单元格内容会紧贴相邻单元格的边界,而Excel本身会自动处理视觉间距,所以XLSX输出正常。可以通过以下几种方式添加内边距优化PDF效果:
方法1:为单个单元格设置内边距
通过PhpSpreadsheet的样式对象,给目标单元格设置左右内边距,拉开内容间距:
<?php require_once __DIR__ . "/vendor/autoload.php"; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\IOFactory; $spreadsheet = new Spreadsheet(); // 设置列宽 $spreadsheet->getActiveSheet() ->getColumnDimension('A') ->setWidth(12); $spreadsheet->getActiveSheet() ->getColumnDimension('B') ->setWidth(12); $spreadsheet->getActiveSheet() ->getColumnDimension('C') ->setWidth(12); // 设置单元格值 $spreadsheet->getActiveSheet() ->setCellValue("A1", 1234567) ->setCellValue("B1", 'ABCDEFG') ->setCellValue("C1", 'QWERTY'); // 为数字单元格A1设置右边内边距 $spreadsheet->getActiveSheet()->getStyle('A1')->applyFromArray([ 'padding' => [ 'right' => 5, // 单位:pt ], ]); // 为文本单元格B1设置左边内边距(可选,配合A1的右边内边距效果更明显) $spreadsheet->getActiveSheet()->getStyle('B1')->applyFromArray([ 'padding' => [ 'left' => 3, ], ]); header('Content-Type: application/pdf'); header('Content-Disposition: attachment;filename="test.pdf"'); header('Cache-Control: max-age=0'); $objwriter = IOFactory::createWriter($spreadsheet,'Mpdf'); $objwriter->save("php://output");
方法2:设置全局默认单元格样式
如果需要所有单元格都统一内边距,可以设置工作表的默认样式,避免逐个单元格配置:
// 在创建工作表后添加全局样式设置 $defaultStyle = $spreadsheet->getDefaultStyle(); $defaultStyle->applyFromArray([ 'padding' => [ 'left' => 2, 'right' => 2, 'top' => 1, 'bottom' => 1, ], ]);
方法3:调整单元格对齐方式(备选)
如果允许调整对齐规则,也可以将数字单元格改为左对齐,或者文本单元格改为右对齐,避免内容紧贴:
// 将数字单元格A1设置为左对齐 $spreadsheet->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT);
内容的提问来源于stack exchange,提问作者RMichaelW
相关产品推荐
相关产品推荐

