mpdf - 来自 url 的图像不会加载到生成的 pdf 中
Posted
技术标签:
【中文标题】mpdf - 来自 url 的图像不会加载到生成的 pdf 中【英文标题】:mpdf - images from a url won't load in generated pdf 【发布时间】: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 之前用本地临时位置替换对亚马逊的引用。用一张图片试试。
【参考方案1】:
在 pdf 中显示 SVG 文件后,我遇到了类似的问题。它无法正常工作。然后我将它转换为 PNG(动态),存储在本地临时文件夹中,并将临时文件传递给 mDPF,这很有帮助。
更新 - 实际上现在我记得我什至不必转换它,我只需将它存储在本地临时文件夹中..
【讨论】:
将图像从 Amazon CloudFront 复制到我的临时文件夹解决了这个问题。我还使用 php 自己的DOMDocument
来修改 html,以便显示图像。感谢您的帮助。以上是关于mpdf - 来自 url 的图像不会加载到生成的 pdf 中的主要内容,如果未能解决你的问题,请参考以下文章
将背景图像复制到使用 mpdf 生成的 pdf 中的其他页面
来自 Django 中 ImageField 的图像不会加载到模板中