思路:
fpdf生成PDF文件,fpdi加水印
fpdf类库下载
composer命令安装fpdf:composer require setasign/fpdf
composer命令安装fpdi:composer require setasign/fpdi
fpdf中文插件下载地址:http://www.fpdf.org/download/chinese.zip
中文插件下载解压后放setasign/fpdf 下
使用示例(绘制表格):
require_once('../vendor/setasign/fpdf/chinese.php');//引入中文包
$pdf=new PDF_Chinese('P','mm','A4');//A4设置纸张,最大能设置成A3
$pdf -> AddGBFont();
$pdf -> AddPage('L');//我这里使用的横向纸张,直向可以设置为L
$pdf -> SetFont('GB','',14);//设置字体和大小
//给每列设置宽度,可以根据需要设置宽度,一行放不下会自动换行
$pdf->SetWidths([30,30,30,30,30,30]);
//设置表头
$pdf->MBRow(array(
iconv("UTF-8","gbk","序号"),
iconv("UTF-8","gbk","列1"),
iconv("UTF-8","gbk","列2"),
iconv("UTF-8","gbk","列3"),
iconv("UTF-8","gbk","列4"),
iconv("UTF-8","gbk","列5"),
));
$data = [
[
iconv("UTF-8","gbk",'文字1'),
iconv("UTF-8","gbk",'文字2带英文AAAAAAA'),
iconv("UTF-8","gbk",'文字3带符号;,-、'),
iconv("UTF-8","gbk",'文字4带数字12345678909876'),
iconv("UTF-8","gbk",'文字5'),
iconv("UTF-8","gbk",'文字6带英文符号/\[]----')
],
[
iconv("UTF-8","gbk",'文字1'),
iconv("UTF-8","gbk",'文字2带英文AAAAAAA'),
iconv("UTF-8","gbk",'文字3带符号;,-、'),
iconv("UTF-8","gbk",'文字4带数字12345678909876'),
iconv("UTF-8","gbk",'文字5'),
iconv("UTF-8","gbk",'文字6带英文符号/\[]----')
],
];
//逐行写入
foreach($data as $row){
$pdf->MBRow($row);
}
//可以直接输出
$pdf->Output();
//可以保存文件到指定目录下
//$pdf->Output($fileName,'F');
结果如下:
这个过程中会遇到三个问题:
1、写入中文时,如果遇到换行,行数会计算错误,导致一部分字体在表格外;
2、中文和数字一起写入的时候,数字会圆角显示,导致数字之间间距很大;
3、中文、英文、符号一起作为字符串写入时,某种情况下会进入一个死循环挂掉;