php生成PDF文件(FPDF)

FPDF即"Free PDF",FPDF类库提供了基本的PDF创建功能,其源代码和使用权是免费的。

PDF格式文档优势

通用:PDF文档在UNIX和Windows系统均可正常使用。

安全:PDF文档可设置为只读模式,并且可以添加密码等保护措施。

美观:PDF文档可以很大程度上兼容中文编码,并且保留当前页面排版。

精巧:大多数情况下,生成PDF文档会减小文件体积。

FPDF类库下载

FPDF类库下载地址: ​ ​http://www.fpdf.org/​​

FPDF类库中文插件下载地址: ​ ​http://www.fpdf.org/download/chinese.zip​​

FPDF类库配置

下载FPDF文件。

将下载压缩文件解压到项目根目录下。

在项目中引用FPDF类库(如下代码)。

复制代码
<?php
define('FPDF_FONTPATH','font/');
require_once('fpdf/fpdf.php');
?>

FPDF类库的具体操作

创建对象

复制代码
new FPDF([string page-orientation [, string measure-unit [, string page-format]]]);

/*  
    page-orientation:可选参数,表示PDF文档为横向或纵向,默认 P
        取值:P:纵向 L:横向
    measure-unit:可选参数,表示计量单元,默认 mm
        取值:pt:点     mm:毫米       cm:厘米       in:英寸
    page-format:可选参数,纸张类型,默认 A4
        取值: A4、A5、Letter等
*/

添加新页

复制代码
void AddPage([string page-orientation]);
/*  
    page-orientation:可选参数,表示PDF文档为横向或纵向,默认 P
        取值:P:纵向 L:横向
*/

设置字体

复制代码
void SetFont(string font [, string style [, float size]]);
/*
    font:表示字体;
    style:可选参数,表示样式,默认为普通样式;
        取值:B:粗体     I:斜体        U:下划线
    size:可选参数,表示字体大小,默认为12pt;
*/

增加单元格

复制代码
void Cell(float width, float height, string txt, int border, int ln, string align, boolean fill, string link);
/*
    width:增加单元格宽度。
    height:增加单元格高度。
    str:放置在单元格中的文本。
    border:单元格边框。
    ln:换行高度,默认为0,即换一行。
    align:对齐方式,默认居左,R时居右,C时居中。
    fill:是否颜色填充,默认false。
    link:添加链接,默认无链接.

    * Cell()函数是FPDF中输出文字的主要方式之一。
*/

输出文档

复制代码
String Output([string name [, string dest]]);
/*
    name:可选参数,表示要储存的文件名。
    dest:可选参数,操作内容。
        取值:
        I:将PDF文档直接在浏览器中显示。
        D:下载PDF文档。
        F:保存为本地文件。
        S:返回一个字符串值。
*/

插入图片

复制代码
void Image(string file, float x, float y float width, float height);
/*
    file:图片路径。
    x:图片位置的横坐标。
    y:图片位置的纵坐标。
    width:图片宽度。
    height:图片高度。
*/

解决中文乱码问题

下载FPDF中的中文插件chinese.php文件,创建​​PDF_Chinese()​​对象。

将页面编码设置为GB2312或使用​​iconv()​​函数改变字符串编码方式。

复制代码
/*示例代码如下*/
<?php
require_once('fpdf/chinese.php');
$pdf=new PDF_Chinese('P','mm','A4');
$pdf -> AddGBFont ('GB',iconv("UTF-8","gbk",'微软雅黑'));
$pdf -> AddPage ();
$pdf -> SetFont ('GB', '', 20);
$pdf -> Cell(0,0,iconv("UTF-8","gbk",'你好,世界!'));
$pdf -> Write (5, iconv("UTF-8","gbk",'你好,世界!'));
$pdf -> Output();
?>

设置页眉和页脚

通过重写FPDF类中的​​Header()​​ 方法和​​Footer()​​ 方法设置页眉和页脚。

复制代码
<?php
require_once('fpdf/chinese.php');
class PDF extends PDF_Chinese
{
    function Header(){
        $this->SetFont('GB','',10);
        $this->Write(10,iconv("UTF-8","gbk",'这是页眉!'));
        $this->Ln(20);
    }
    function Footer(){
        $this->SetY(-15);
        $this->SetFont('GB','',10);
        $this->Cell(0,10,iconv("UTF-8","gbk",'这是页脚!'));
    }
}
$pdf=new PDF('P','mm','A4');
$pdf -> AddGBFont ('GB',iconv("UTF-8","gbk",'微软雅黑'));  
$pdf -> AddPage ();  
$pdf -> SetFont ('GB', '', 20);  
$pdf -> Cell(0,0,iconv("UTF-8","gbk",'你好,世界!'));
$pdf -> Write (5, iconv("UTF-8","gbk",'你好,世界!'));  
$pdf -> Output();  
?>

设置/获取某元素在页面中的位置

复制代码
void setX(float x);
    //设置某元素在页面的X坐标,单位为mm。如x为负数,则表示自页面右端向左的距离。
void setY(float y [, boolean resetX]);
    //设置某元素在页面的Y坐标,单位为mm。如y为负数,则表示自页面底部向上的距离。若可选参数resetX为真则重置X坐标。
void setXY(float x, float y);
    //设置某元素在页面的(X,Y)坐标,规则如上,定位Y时不重置X坐标。
float getX();
    //获得某元素当前X坐标。
float getY();
    //获得某元素当前Y坐标。

输出字符串

复制代码
void Write(float h, string txt [, mixed link]);
/*
    h:定义字符串的行高。
    txt:指定输出字符串。
    link:可选参数,设置链接。
*/

换行

复制代码
void Ln([float h]);
//h:设置行高,默认值为最后输出的行的高度。

正文输出

复制代码
void MultiCell(float width, float height, string txt, int border, string align, boolean fill);
/*
    width:单元格宽度。
    height:单元格高度。
    txt:放置在单元格中的文本。
    border:单元格边框,默认为0。
    align:对齐方式。默认居左,R=居右,C=居中。
    fill:是否颜色填充。默认false。

    * MultiCell()函数是FPDF输出大段文字的主要方法,可自动换行。
*/

绘制表格

利用​​Cell()​​函数循环创建单元格,最终组成表格。

复制代码
<?php
require_once('fpdf/chinese.php');
$pdf = new PDF_Chinese('P','mm','A4');
$pdf -> AddGBFont();
$pdf -> AddPage();
$pdf -> SetFont('GB','',14);
$header = array('姓名','年龄','性别','工资');
$data = array();
$data[0] = array('小张','24','男','5,000.00');
$data[1] = array('小王','22','女','4,000.00');
$width = array(40,40,40,40);
for($i=0;$i<count($header);$i++){
    $pdf -> Cell($width[$i],6,iconv("UTF-8","gbk",$header[$i]),1);
}
$pdf -> Ln();
foreach($data as $row){
    $pdf -> Cell($width[0],6,iconv("UTF-8","gbk",$row[0]),1);
    $pdf -> Cell($width[1],6,iconv("UTF-8","gbk",$row[1]),1);
    $pdf -> Cell($width[2],6,iconv("UTF-8","gbk",$row[2]),1);
    $pdf -> Cell($width[3],6,iconv("UTF-8","gbk",$row[3]),1);
    $pdf -> Ln();
}
$pdf -> Output();
?>

注意事项

部分资料中含有FPDF类库的​​Open()​​方法,但实际上类库中并不包含。使用​​Open()​​方法将会造成错误。

使用FPDF类生成PDF文件时,编码格式应设置为GB2312(或GB相关编码),否则即使继承了PDF_Chinese类依然是乱码。

火狐浏览器无法直接将创建的PDF文档内容显示在浏览器,仅提供下载选项。

相关推荐
Kyln.Wu1 天前
【python实用小脚本-190】Python一键删除PDF任意页:输入页码秒出干净文件——再也不用在线裁剪排队
服务器·python·pdf
阿幸软件杂货间2 天前
免费万能电子书格式转换器!Neat Converter支持 ePub、Azw3、Mobi、Doc、PDF、TXT 文件的相互转换。
pdf·格式转换
星马梦缘2 天前
CSDN转PDF【无水印且免费!!!】
pdf·免费·pandoc·转pdf·无水印·csdn转pdf·wkhtmlpdf
画月的亮2 天前
前端处理导出PDF。Vue导出pdf
前端·vue.js·pdf
伊织code3 天前
pdfminer.six
python·pdf·图片·提取·文本·pdfminer·pdfminer.six
HAPPY酷3 天前
给纯小白的Python操作 PDF 笔记
开发语言·python·pdf
代码AI弗森4 天前
PDF OCR + 大模型:让文档理解不止停留在识字
pdf·ocr
小周同学:5 天前
在 Vue2 中使用 pdf.js + pdf-lib 实现 PDF 预览、手写签名、文字批注与高保真导出
开发语言·前端·javascript·vue.js·pdf
Kyln.Wu5 天前
【python实用小脚本-187】Python一键批量改PDF文字:拖进来秒出新文件——再也不用Acrobat来回导
python·pdf·c#
迪尔~6 天前
Apache POI中通过WorkBook写入图片后出现导出PDF文件时在不同页重复写入该图片问题,如何在通过sheet获取绘图对象清除该图片
java·pdf·excel