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

CodeIgniter中html2pdf生成PDF时图片无法加载的问题

解决CodeIgniter中html2pdf转换时图片无法加载的问题

我之前也碰到过类似的情况,html2pdf对图片路径的处理确实有点挑剔,尤其是在CodeIgniter环境里。结合你的代码和已经尝试过的方法,给你几个可行的解决方案:

1. 使用服务器物理文件路径而非Web URL

你当前用base_url()生成的是Web访问URL,但html2pdf在生成PDF时,可能无法通过HTTP请求获取本地图片(比如本地开发环境、服务器内部访问限制等场景)。换成服务器的绝对物理路径试试:

在视图example.php里,把img标签修改为:

<img src="<?php echo FCPATH . 'assets/images/logo.jpg'; ?>" alt="BulkSMS">

FCPATH是CodeIgniter内置的常量,指向项目根目录(也就是index.php所在的文件夹),这样html2pdf可以直接读取本地文件系统里的图片资源。

2. 配置html2pdf的资源基础路径

如果坚持要用相对路径,可以在控制器里给html2pdf设置资源基础路径,确保它能定位到图片所在的目录:

public function htmlToPdf($data) { 
    $this->html2pdf->folder(PURCHASE_INVOICE_PATH); 
    $fileName = $data['invoiceNumber'].'.pdf'; 
    $this->html2pdf->filename($fileName); 
    $this->html2pdf->paper('a4', 'portrait'); 
    // 设置资源基础路径,指向assets文件夹
    $this->html2pdf->setBasePath(FCPATH . 'assets/');
    $content = $this->load->view('templates/example', '', true); 
    $this->html2pdf->html($content); 
    $this->html2pdf->create('save'); 
    return $fileName; 
}

对应的视图里用相对路径即可:

<img src="images/logo.jpg" alt="BulkSMS">

3. 将图片转为Base64内嵌到HTML

如果上面的方法都不生效,最稳妥的方式是把图片转换成Base64编码,直接嵌入HTML中,完全不需要依赖外部文件路径:

可以在视图里直接处理(或者提前在控制器里转换好数据传递过来):

<?php
$imagePath = FCPATH . 'assets/images/logo.jpg';
$imageData = base64_encode(file_get_contents($imagePath));
$base64Image = 'data:image/jpeg;base64,' . $imageData;
?>
<img src="<?php echo $base64Image; ?>" alt="BulkSMS">

这种方式能确保html2pdf肯定能读取到图片,因为图片数据已经直接包含在HTML内容里了。

4. 检查文件权限

最后别忘了确认assets/images/logo.jpg文件以及上级目录的权限,确保Web服务器进程(比如www-data、apache)有读取该文件的权限。可以用以下命令调整权限:

chmod -R 644 /path/to/your/project/assets/images
chmod -R 755 /path/to/your/project/assets

你可以先试试第一种方法,这是最常见的解决思路,大概率能解决你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:23:40