【TCPDF】TCPDFを使用してPDFファイルをエクスポートする

目次

1. TCPDF クラス ライブラリをインストールします。

2. フォントをインストールする

3. TCPDF を使用して PDF ファイルをエクスポートする


目的: PHP は、TCPDF クラス ライブラリを通じてファイルを PDF にエクスポートします。

開発言語とクラスライブラリ: ThinkPHP、TCPDF

レンダリングは次のとおりです

1. TCPDF クラス ライブラリをインストールします。

Composer を使用して TCPDF をプロジェクトのルート ディレクトリにインストールします。インストールが完了すると、vendor ディレクトリに TCPDF クラス ライブラリである tecnickcom フォルダが生成されます。

composer require tecnickcom/tcpdf

2. フォントをインストールする

TCPDF は中国語をサポートしていないため、エクスポートされたファイルが文字化けする場合があります。そのため、中国語フォントをダウンロードする必要があります。フォントはオンラインで検索してダウンロードできます。ダウンロードしたフォント (ttf 形式) を「\tecnickcom\tcpdf\tools\」ディレクトリに置きます、このディレクトリで CMD を開き、次のように入力します。

php tcpdf_addfont.php -i .\msyh.ttf

実行が成功すると、対応するファイルが「\tecnickcom\tcpdf\fonts\」フォルダーに生成されます。

3. TCPDF を使用して PDF ファイルをエクスポートする

TCPDF クラス ライブラリとフォントがインストールされたら、TCPDF を引用して PDF ファイルをエクスポートできます。

<?php
use tecnickcom\tcpdf\tcpdf;

public function exportPDF(){
    $objPDF = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
	// 是否显示页眉
	$objPDF->setPrintHeader(false);
	// 是否显示页脚
	$objPDF->setPrintFooter(true);
	// 设置页脚的字体
	$objPDF->setFooterFont(Array('msyh', '', '8'));
	// 设置页脚距离底部的距离
	$objPDF->SetFooterMargin('7');
	// 设置默认等宽字体
	$objPDF->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
	// 设置行高
	$objPDF->setCellHeightRatio(1.5);
	// 设置是否自动分页  距离底部多少距离时分页
	$objPDF->SetAutoPageBreak(TRUE, '10');
	$objPDF->setFontSubsetting(true);
	$objPDF->AddPage();
	// 设置字体
	$objPDF->SetFont('msyh', '', 12, '', true);

	// 调用拼接html代码方法
	$pdf_html = $this->pdf_html($info,$list,$title);

	$objPDF->writeHTMLCell(0, 0, '', '', $pdf_html, 0, 1, 0, true, '', true);
	// 输出  四种模式 I输出、D下载、F保存本地、S输出二进制字符串
	$objPDF->Output('test.pdf', 'D');
}

上記の pdf_html メソッドは HTML コードを結合するもので、内部の HTML コードは必要に応じて変更できます。すべての CSS スタイルがサポートされているわけではありませんが、他の HTML タグで置き換えることもできます。たとえば、font-weight はサポートされていないため、<b></b> で置き換えることができます。

public function pdf_html($info,$list,$title)
{
	$html = '';
	$html .= '<h2 style="text-align:center;"><b>'.$title.'</b></h2>
				<table style="text-align:right">
				<tr><td>班级:'.$info['grade'].'_'.$info['year'].$info['season'].'</td></tr>
				<tr><td>总人数:'.$info['student'].'; 已交卷:'.$info['cmit'].'</td></tr>
				<tr><td>导出时间:'.date('Y-m-d H:i:s',time()).'</td></tr>
				</table>';

	foreach ($list as $k => $v) {
		
		$html .= '<div>
					【'.$v['type'].'】 第'.($k+1).'题:'.$v['title'].'<br><span style="color: green;">【正确答案:'.$v['answer'].'】</span><b style="color: #1E9FFF"> &nbsp; &nbsp; 正确率:'.$v['percent'].'%</b>
				</div>
				<table  border="1" style="text-align:center">
				    <colgroup>
				      <col width="40%">
				      <col width="10%">
				      <col width="50%">
				      <col>
				    </colgroup>
				    <tr style="background:#f2f2f2; ">
				        <th>选项</th>
				        <th>选择次数 / 人</th>
				        <th>比例</th>
				    </tr> 
			    		<tr>
					        <td style="text-align:left">A:'.$v['option_A'].'</td>
					        <td>'.$v['sel_A'].'</td>
					        <td>'.$v['percent_A'].'%</td>
					    </tr>
					    <tr>
					        <td style="text-align:left">B:'.$v['option_B'].'</td>
					        <td>'.$v['sel_B'].'</td>
					        <td>'.$v['percent_B'].'% </td>
				      	</tr>
				      	<tr>
					        <td style="text-align:left">C:'.$v['option_C'].'</td>
					        <td>'.$v['sel_C'].'</td>
					        <td> '.$v['percent_C'].'% </td>
					    </tr>
					    <tr>
					        <td style="text-align:left">D:'.$v['option_D'].'</td>
					        <td>'.$v['sel_D'].'</td>
					        <td> '.$v['percent_D'].'% </td>
					    </tr>
					    <tr>
					        <td style="text-align:left">E:'.$v['option_E'].'</td>
					        <td>'.$v['sel_E'].'</td>
					        <td> '.$v['percent_E'].'% </td>
					    </tr>
					    <tr>
					        <td style="text-align:left">F:'.$v['option_F'].'</td>
					        <td>'.$v['sel_F'].'</td>
					        <td> '.$v['percent_F'].'% </td>
					    </tr>
					    <tr>
					        <td style="text-align:left">G:'.$v['option_G'].'</td>
					        <td>'.$v['sel_G'].'</td>
					        <td> '.$v['percent_G'].'% </td>
					    </tr>
				    <tr>
				        <th>作答人数:'.$v['cmit_num'].' 人次</th>
				        <th></th>
				        <th></th>
				    </tr> 
				</table><br/>';
	}
	return $html;
}

おすすめ

転載: blog.csdn.net/qq_25285531/article/details/132761994