如何使用PhpSpreadsheet将PDF文件嵌入Excel工作表?
如何用PhpSpreadsheet将PDF嵌入Excel工作表
首先,咱们先说说你当前代码里的核心问题:
你用的是PHPExcel_Worksheet_Drawing类——这是旧版PHPExcel的类,而且这个类仅支持嵌入图片格式(JPG、PNG等),完全不支持PDF文件。所以你这样写不仅会因为命名空间不匹配报错(如果用的是PhpSpreadsheet的话),还根本无法实现PDF嵌入的需求。
接下来是正确的实现方法,基于PhpSpreadsheet的最新API:
正确代码示例
use PhpOffice\PhpSpreadsheet\Worksheet\Object; // 你的PDF文件路径 $pdfFilePath = './assets/tpaudit/checkpoint_ng_image/kl.pdf'; // 创建Object实例(专门用于嵌入OLE对象,比如PDF、Word等文档) $objPdfObject = new Object(); $objPdfObject->setPath($pdfFilePath); // 设置PDF嵌入的单元格位置 $objPdfObject->setCoordinates('H2'); // 设置PDF在Excel中显示的宽高(单位:像素) $objPdfObject->setWidth(120); $objPdfObject->setHeight(120); // 将嵌入对象关联到当前活动工作表 $objPdfObject->setWorksheet($this->excel->getActiveSheet()); // 设置对象在单元格内的偏移量(可选) $objPdfObject->setOffsetX(5); $objPdfObject->setOffsetY(5); // 调整行高,适配嵌入的PDF $this->excel->getActiveSheet()->getRowDimension(2)->setRowHeight(150); // 给单元格添加边框(和你原来的需求一致) $this->excel->getActiveSheet()->getStyle('H2')->applyFromArray([ 'borders' => [ 'allborders' => [ 'style' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['rgb' => '000000'], ], ], ]);
关键说明
- 类的选择:必须用
PhpOffice\PhpSpreadsheet\Worksheet\Object类,它专门用于嵌入OLE对象(包括PDF、Word、Excel等文档),而Drawing类仅处理图片类型文件。 - 命名空间:确保你已经引入了正确的PhpSpreadsheet命名空间,不要混用旧的PHPExcel类名。
- 权限与路径:确认PHP进程有读取PDF文件的权限,路径要写对(相对路径的话要注意当前工作目录)。
- Excel端限制:用户打开Excel文件时,需要安装有PDF阅读器(比如Adobe Acrobat)才能正常预览嵌入的PDF,否则可能只会显示PDF图标。
内容的提问来源于stack exchange,提问作者Ganpat Thakor
相关产品推荐
相关产品推荐

