16
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TCPDFを使ってPHPでPDFに文字を出力したい

Posted at

##やりたいこと
Web上で必要事項を入力させ、ボタンを押すと、テンプレートのPDFに入力した内容の文字を埋め込んだPDFファイルを作成させる。みたいな機能を作りたい。

##用意するもの
今回は以下のライブラリを使用してみた。
###TCPDF
https://tcpdf.org/
ソースはGitHubのリンクからCloneをダウンロード。
###FPDI
https://www.setasign.com/products/fpdi/about/
テンプレートPDFを読み込むのに必要

####composerで落とす場合
composer.phar require tecnickcom/tcpdf
composer.phar require setasign/fpdi
composer.phar require setasgin/fdpi-tcpdf

この3つを準備しておけば大丈夫。な、はず。

展開したものを今回は以下のように設置。
tcpdf
→tcpdf.php
→fpdi
 →autoload.php
 →その他fpdi
→その他tcpdf

##実際に使ってみる

まずはインスタンス化。

require_once('tcpdf/tcpdf.php');
require_once('tcpdf/fpdi/autoload.php');

$pdf = new setasign\Fpdi\Tcpdf\Fpdi();

次に初期設定。

 $pdf->SetMargins(0, 0, 0); //マージン無効
 $pdf->SetAutoPageBreak(false); //自動改ページ無効
 $pdf->setPrintHeader(false); //ヘッダー無効
 $pdf->setPrintFooter(false); //フッター無効

今回のようにテンプレートのPDFがそもそもカッチリ用意されている場合は不要な気もするけど一応。

次にテンプレートのPDFを読み込ませる。

$pdf->setSourceFile(テンプレのpath);
$pdf->AddPage();
$tpl = $pdf->importPage(1);
$pdf->useTemplate($tpl);

まずsetSourceFileで、テンプレートとなるファイルを指定。
AddPageでページを追加。
tplにテンプレートファイルをインポート。引数はページなので、今回は1ページ目を指定。最後にuseTemplateでテンプレートPDFの1ページ目が埋め込まれたtplを指定して、テンプレートを埋め込む。

あとは入力された内容を埋め込んでいく。

$pdf->SetFont('kozminproregular', スタイル, サイズ);
$pdf->Text(x座標, y座標, テキスト);

一応日本語フォントは用意されていたが、TCPDF自体がちょっと日本語に弱いみたいなので、フォントにこだわりたい場合はAddFontメソッドなどを使って色々設定する必要がありそう。

一通り文字の埋め込みが終わったら、最後に出力。

$pdf->Output(出力時のファイル名, 出力モード);

出力のさせ方にはいくつかのパターンが用意されている。

  • I:ブラウザで表示(デフォルト)
  • D:強制ダウンロード
  • F:指定されたパス上にファイルを保存
    使うのはこのあたりだと思う。

#####Fモードで出力させる時の注意
ファイル名のところでパスもつけてあげれば、指定のパス上に作成されたPDFを保存することができるが、通常ではローカルファイルとしての保存しか出来ない仕様になっていた。
今回はサーバ上に作成したPDFを保存したかったので、以下のように修正した。

//tcpdf/include/tcpdf_static.php
//return以外全てコメントアウト
public static function fopenLocal($filename, $mode) {
//		if (strpos($filename, '://') === false) {
//			$filename = 'file://'.$filename;
//		} elseif (stream_is_local($filename) !== true) {
//			return false;
//		}
		return fopen($filename, $mode);
	}

これでサーバ上にも問題なく保存できるようになった。

以上で、テンプレートのPDFにユーザが入力した内容を埋め込んだファイルを新たに作成することが出来るようになった。

今回は単純な文字の埋め込みだけだが、用意されているメソッドはけっこう多くて、色んな編集が出来そう。PDFに対して色々こねこねしたい時はお世話になりそう。

##参考
・TCPDFマニュアル(勝手訳)
http://tcpdf.penlabo.net/method.html
用意されているメソッドの情報がいっぱい載っていたので、引数がよくわかんない時や、こーいうこと出来ないかな?って思った時にお世話になりました。

・TCPDFの部屋
http://www.t-net.ne.jp/~cyfis/tcpdf/index.html
こちらは目的別にまとまっています。

16
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?