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

如何使用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'],
        ],
    ],
]);

关键说明

  1. 类的选择:必须用PhpOffice\PhpSpreadsheet\Worksheet\Object类,它专门用于嵌入OLE对象(包括PDF、Word、Excel等文档),而Drawing类仅处理图片类型文件。
  2. 命名空间:确保你已经引入了正确的PhpSpreadsheet命名空间,不要混用旧的PHPExcel类名。
  3. 权限与路径:确认PHP进程有读取PDF文件的权限,路径要写对(相对路径的话要注意当前工作目录)。
  4. Excel端限制:用户打开Excel文件时,需要安装有PDF阅读器(比如Adobe Acrobat)才能正常预览嵌入的PDF,否则可能只会显示PDF图标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:48:15