TCPDF:如何将图像放入HTML块中?

2022-08-31 00:23:47

我已经与TCPDF合作了几个月了。断断续续。它适用于我的大多数HTML模板,但我总是在将图像放入PDF中时遇到问题。图像通常放置在正文中,而不是标题中。我的位置要么是左上角的固定位置,要么是相对于文档底部的位置。无论哪种情况,我都有问题。当HTML中的文本发生变化时,我必须重新定位图像。多列表可能会使事情变得更加困难。注意:“类pdf扩展了TCPDF”。

$this->pdf->AddPage();
$this->pdf->writeHTML($pdf_html);
$cur_page = $this->pdf->getPage();
$x_pos = $this->pdf->GetX();
$y_pos = $this->pdf->GetY();
// Place image relative to end of HTML
$this->pdf->SetXY($x_pos, $y_pos - 54);
$this->pdf->Image('myimage.png');

有没有人知道将图像放入从HTML生成的PDF中的万无一失的方法。我想过将HTML分成两部分,但我不确定它是否也能很好地工作。


答案 1

我正在使用html img标签,它工作得很好。

$toolcopy = ' my content <br>';
$toolcopy .= '<img src="/images/logo.jpg"  width="50" height="50">';
$toolcopy .= '<br> other content';

$pdf->writeHTML($toolcopy, true, 0, true, 0);

答案 2

对不起,我知道你有一个被接受的答案。但是,对于不在Web级别的图像,它似乎并没有真正回答您的问题。

您是否考虑过使用file_get_contents();和简单呈现base_64字符串。通过这种方式,您可以从任何级别使用图像,而不必担心它可以公开访问。

例如:

$imageLocation = '/var/www/html/image.png';
$ext = end(explode(".", $imageLocation);
$image = base64_encode(file_get_contents($imageLocation));
$pdf->writeHTML("<img src='data:image/$ext;base64,$image'>");

或者,不依赖于 HTML 解析器。从经验来看,这会减慢生成的PDF的渲染速度,以至于您可以使用:

$image = file_get_contents('/var/www/html/image.png');
$pdf->Image('@'.$image);

编辑

为了完整,并回应罗兰。你当然可以使用SplFileObject。

$image = new SplFileObject('/var/www/html/image.png', 'r');
$imageContents = $image->fread($image->getSize());
$imageExtension = $image->getExtension();
$pdf->writeHTML("<img src='data:image/$imageExtension;base64,$imageContents'>");

推荐