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
相关产品推荐
相关产品推荐

