【发布时间】:2014-05-12 07:58:49
【问题描述】:
我正在尝试从 http 网址加载图像,但它们不会显示在我生成的 pdf 中。
$this->layout = '//layouts/pdftemplate';
$pdf = Yii::app()->toPDF->mpdf();
$pdf->shrink_tables_to_fit = 1;
$pdf->defaultfooterline = false;
$stylesheet = file_get_contents(Yii::app()->basePath.'/../webroot/admin/themes/admin/css/formbuilder-print.css');
$pdf->WriteHTML($stylesheet, 1);
$pdf->WriteHTML($_POST['html_string']);
$pdf->Output(sys_get_temp_dir()."/test.pdf", 'F');
我在 ajax 调用中将 html 传递给 php 函数。图片位于 Amazon CloudFront 上。
更新
感谢 Asped 和 Latheesan Kanes,我解决了这个问题。我还使用 PHP 的 DOMDocument 类将图像 url 替换为图像的本地副本。如果有人也遇到类似问题,这是供将来参考
$doc = new DOMDocument();
@$doc->loadHTML($_POST['html_string']);
$imgs = $doc->getElementsByTagname('img');
foreach ($imgs as $img){
$src = $img->getAttribute('src');
$name = explode('?', basename($src));
$name = $name[0];
$tmp = sys_get_temp_dir().'/'.$name;
copy($src, $tmp);
$img->setAttribute('src', $tmp);
}
$html = $doc->saveHTML(); // you can write this to the pdf. $pdf->WriteHTML($html);
【问题讨论】:
-
样式表上的图片是如何设置的?他们是否使用完整的网络根路径?例如
/path/to/image.jpg而不是 css 文件的相对路径? -
@LatheesanKanes 图片是从一个完全不同的 url / web 服务器加载的。就我而言,来自 Amazons CloudFront
-
也许您可能需要将图像下载到 Yii 的临时文件夹中的本地服务器或其他地方,并在构建 PDF 之前用本地临时位置替换对亚马逊的引用。用一张图片试试。