TCPDF: Как я могу поместить изображение в блок HTML? - PullRequest
12 голосов
/ 27 февраля 2012

Я работаю с 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');

Кто-нибудь знает надежный способ размещения изображения в PDF, созданный из HTML. Я думал о том, чтобы разделить HTML на две части, но я не уверен, что он будет работать хорошо.

Ответы [ 2 ]

20 голосов
/ 20 марта 2012

Я использую html img tag и он работает хорошо.

$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);
8 голосов
/ 21 ноября 2016

Извините, я знаю, что вы получили принятый ответ.Тем не менее, похоже, что он не отвечает на ваш вопрос относительно изображения, которое НЕ на веб-уровне.

Рассматривали ли вы использование 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'>");
...