PDFのテンプレートの活用について。
PDFを出力するプログラムはいろいろありますが、今回はすでにあるPDFをテンプレート化できるライブラリについて。
FPDI
https://www.setasign.com/products/fpdi/about/
PDFの生成自体はFPDFやTCPDFを想定しています。FPDIが担当するのはあくまでテンプレート生成機能です。
直でダウンロードしてもよいですが、composerに以下のように記述することのほうが一般的でしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//FPDF { "require": { "setasign/fpdi": "1.6.1" } } //FPDFを使う場合 { "require": { "setasign/fpdi-fpdf": "1.6.1" } } //TCPDFを使う場合: { "require": { "setasign/fpdi-tcpdf": "1.6.1" } } |
ソース
composer.json
1 2 3 4 5 6 |
{ "require": { "setasign/fpdi": "1.6.1", "setasign/fpdi-fpdf": "1.6.1" } } |
また日本語を使う場合にはこちらで少し説明した日本語用のライブラリが使えます。
ただしこのライブラリはFPDFを直接見ているため、FPDIを見るように以下のリンクの修正を加えます。
FPDF+FPDIでUTF-8でちゃんと日本語使えるようにする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
//こちらでinclude_pathを設定します。 set_include_path( __DIR__ . '/vendor/'); require_once 'setasign/fpdf/fpdf.php'; require_once 'setasign/fpdi/japanese.php'; $pdf = new PDF_Japanese(); //ページ追加 $pdf->AddPage(); $pdf->setSourceFile('テンプレートのファイルパス'); $tplIdx = $pdf->importPage(1); $pdf->useTemplate($tplIdx, 0, 0, 210, 296 ); $pdf->AddSJISFont(); $pdf->SetFont('SJIS'); setMessage( $pdf, 149, 41.3 , "29"); setMessage( $pdf, 164, 41.3 , "2"); setMessage( $pdf, 177, 41.3 , "4"); setMessage( $pdf, 40, 48 , "サンプル商事"); setMessage( $pdf, 48, 101.8 , "2"); setMessage( $pdf, 55.6, 101.8 , " 1"); setMessage( $pdf, 67, 101.8 , "2"); setMessage( $pdf, 74, 101.8 , "28"); $pdf->Output(); function setMessage( &$pdf ,$x, $y, $str ) { $pdf->SetTextColor(0, 0, 0); $pdf->SetXY($x, $y); $pdf->Write(0, mb_convert_encoding($str,'SJIS','UTF-8')); } |
参考リンク
セルで出力する場合はこちらが参考になります。
Let’s プログラミング Cellメソッドによるセル出力