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 中的其他页面

使用带有 MPDF 的动态 php 生成的图像

来自 Django 中 ImageField 的图像不会加载到模板中

如何将来自 URL(具有不同来源)的图像加载到 File 对象中?

mpdf中带有https的图像

将 html+css 内容添加到 mPDF