web-dev-qa-db-ja.com

TCPDF:画像をHTMLブロックに配置するにはどうすればよいですか?

私は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を2つの部分に分割することを考えましたが、うまくいくかどうかはわかりませんまあどちらか。

13
jjwdesign

私は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);
21
henna

申し訳ありませんが、回答は承認されました。ただし、Webレベルで[〜#〜] not [〜#〜]である画像に関しては、実際に質問に答えているようには見えません。

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'>");
10
Doug

回答はこちら

HTML属性に二重引用符があることを確認してください。

$html = "<img src='...' />"; // This will not work

$html = '<img src="..." />'; // This will work

$pdf->writeHTML($html, true, false, true, false, '');
0
Nuri Akman