图像未在服务器上与 TCPDF 一起显示

问题描述

我遇到了与 TCPDF don't display image with writeHTML 相同的问题。在我的本地主机服务器上一切正常,但在部署到实时服务器时没有显示图像。

我尝试了以下步骤:

  1. 图片是base64,所以和路径或文件权限无关。我打印了 base64 字符串,很确定它是正常的。
  2. png 和 jpeg 格式都不起作用
  3. TCPDF Image() 和 writeHTML() 都不起作用
  4. 引号是 '<img src="..." />' 而不是 "<img src='...' />"
  5. 添加宽度和高度不起作用。

代码如下:

// $data is the base64 string       
$data = base64_decode($scoreImg);
$pdf->Image('@'.$data);  // this doesn't work
$html = '<img src="data:image/jpeg;base64,' . $scoreImg . '"  width="50" height="50">';
$pdf->writeHTMLCell(0,'',$html,1,true,true); // this doesn't work as well

任何人都请拯救我的一天。

解决方法

从某处获取图像数据,然后用base64编码,并用@符号设置图像:

$data = base64_encode($data);
$pdf->Image('@'.$data);
,

使用正确的 base64 编码图像字符串,您应该能够通过 Image('@') 命令和 writeHTML 语句来完成

请试试这个(请用您自己的路径替换 tcpdf.php 文件路径) - 它会生成并下载带有红点图像的 pdf:

<?php
require_once('./tcpdf/tcpdf.php');

$pdf = new TCPDF("P",PDF_UNIT,PDF_PAGE_FORMAT,true,'UTF-8',false);

$pdf->AddPage();

$data='iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';

$imgdata = base64_decode($data);
$pdf->Image('@'.$imgdata);
$pdf->writeHTML($html,false,'');
$pdf->Output('ken1.pdf','D');
?>

上面的 $data 字符串是一个 base64_encoded 图像文件字符串。例如如下

$data = base64_encode(file_get_contents("reddot.png"));