PHPからPDFを生成するには、主にFPDFというライブラリを使用します。
FPDFの後継としてTCPDFというライブラリもあります。
私はTCPDFの方を使用しているのですが、今回「PDFに画像を埋め込む」ことが必要になりました。
PDF自体は画像埋め込みに対応しているので、TCPDFでのやり方があるのだろうと思い、ググって調べてみました。
忘備録として記録いたします。
TCPDFのImage()関数を使用すればPDFに画像埋め込みできます
ググってみるといくつか画像埋め込み事例がありました。
いずれもImage()関数を使用すればできるとありました。
そこで、Image()関数を使用してPDFに画像を埋め込むサンプルを作ってみました。
それがこちらです。
星形の画像が埋め込まれています。
意外とあっさり埋め込むことができました。
ソースはこちらです
記述方法について解説いたします。
まずソースはこちらです。
<?php
require_once('./tcpdf/tcpdf.php');
/** PDFクラス取得 */
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, "UTF-8", false);
// 等幅フォント指定
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// 書式の余白設定
$pdf->SetMargins(10, 10, 10);
/** ページ基本設定 P:縦 L:横 */
$pdf->setPageOrientation("P", true, 10);
// 画像をピクセルからユーザー処理単位へ変換する時の調整ファクタ。
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
/** フォントセット */
$pdf->SetFont("kozgopromedium", "", 10);
// ヘッダー非表示
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->AddPage();
/** 見出しセット */
$date = date("Y-m-d h:i:s");
$pdf->Cell(0, 0, mb_convert_encoding("PDF画像埋め込みテスト ${date}", "UTF-8", "SJIS-win"), 0, 0, "C");
// 画像埋め込み
$pdf->Image("sample.gif", 0, 30, 50);
// PDF 出力
$pdf->Output("sample.pdf");
?>
TCPDFライブラリは様々な関数が用意されています。
そのため、なれないと分かりにくい点があります。
ただ、画像を埋め込んでいるのは1行です。
- $pdf->Image(“sample.gif”, 0, 30, 50);
ちなみに引数の意味合い的は以下の通りです。
$pdf->Image(画像名、掲載位置座標X、掲載位置座標Y、画像の横幅サイズ)
- 画像名「sample.gif」
- 左からの掲載位置:一番左端
- 上からの掲載位置:30
- 画像の横幅サイズ:50
- ※その他の情報は省略
Image()関数には他にも沢山引数がありますが、最低限このくらいの情報でPDFに画像を埋め込むことができます。
折角なのでいろいろ触ってみました
(1)画像をセンター寄せする
サンプルでは、PDFに埋め込んだ画像が左に寄っています。
TCPDFではX、Y座標指定で絶対位置を指定できます。
真ん中になるようにちまちま調整すればよいのですが、疑問がわきました。
一発でセンター寄せできないの?
ということで調べてできたのがこちらです。
座標指定せずに、センター寄せができています。
センタ寄席部分のコーディングは以下のように記述しています。
// 画像埋め込み
$pdf->Image("sample.gif", 0, 30, 50, null, "gif", NULL, NULL, NULL, NULL, "C");
11番目の引数に「C」を設定しています。
ちなみに「R」を設定すると右寄せ、「L」を設定すると左寄せになります。
(2)画像にリンクをつける
PDFなので、リンクを設定することもできます。
画像にリンクを設定したものがこちらになります。
これもImage()関数のオプション設定で設定することができます。
コーディングは以下のようになります。
// 画像埋め込み
$pdf->Image("sample.gif", 0, 30, 50, null, "gif", "https://office-obata.com", NULL, NULL, NULL, "C");
7番目の引数にURLを設定します。
ちなみに、target=”_blank”を設定することはできませんでした。
(3)画像に枠線をつける
画像の周囲に枠線をつけることもできます。
画像周囲に色を付けたサンプルがこちらです。
枠線もImage()関数のオプションで設定することができます。
コーディングは以下のようになります。
// 色設定
$pdf->SetDrawColor(128, 0, 0);
// 画像埋め込み
$pdf->Image("sample.gif", 0, 30, 50, null, "gif", NULL, NULL, NULL, NULL, "C", false, false, 1);
// 色設定
$pdf->SetDrawColor(0, 0, 255);
// 画像埋め込み
$pdf->Image("sample.gif", 0, 100, 50, null, "gif", NULL, NULL, NULL, NULL, "C", false, false, "RB");
14番目の引数を1にすると周囲に線が付きます。
「RB」は右と下に線を引く場合の指定方法です。
ちなみに、T:上、B:下、L:左、R:右です。
Image()関数には他にもたくさん引数がありますがおおよそこれだけ知っていればなんとかなります
Image()関数を調べてみると、引数が19個ありました。
中には、意味がさっぱり分からない引数もありました。
ただ、位置指定、サイズ指定が分かれば困ることはなさそうです。
調べて試してみると、思いのほか良い経験になります。