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文档内容显示在浏览器,仅提供下载选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JDK、Maven、Git、PostgreSQL】VSCode后端开发环境配置样例

文章目录 一、文件下载1 Maven早期版本下载安装1.1 文件下载1.2 设置系统变量1.3 查看是否设置成功1.4 设置MAVEN的本地仓库 和 镜像等内容 2 Git 下载安装3 下载并安装PostgreSQL 103.1 下载并安装3.2 配置系统环境变量 4 在VScode中下载扩展包5 在VSCode中为项目配置JDK 二、…

Maven 的使用:在 IDEA 中配置 Maven 的超详细步骤

一、概述 记录时间 [2024-10-20] Maven 用来管理 Java 项目中的依赖。 为什么要进行 Maven 配置呢&#xff1f;IDEA 默认选择内置的 Maven 仓库&#xff0c;但是不好用。 本文所讲述的 Maven 配置可以说是超详细的&#xff01; 从下载 Maven 这个东西开始&#xff0c;修改它…

sql-labs靶场第十七关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…

基于微信小程序的智能校园社区服务推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

华为eNSP:端口安全

一、什么是端口安全 端口安全是指保护计算机端口免受未经授权的访问、攻击或滥用的一种措施。计算机上的每个服务或应用程序都依靠特定的端口进行通信。端口安全的目的是限制对计算机端口的访问&#xff0c;确保只有经过授权的用户或服务可以使用这些端口。通过配置防火墙、访…

影刀RPA实战番外:excel函数应用指南

Excel函数是用于执行特定计算、分析和数据处理任务的预定义公式。它们可处理数学计算、文本处理、逻辑判断、日期和时间运算、查找和引用数据等。例如&#xff0c;SUM函数可以计算一系列数字的总和&#xff0c;IF函数进行逻辑测试&#xff0c;VLOOKUP函数在表格中查找数据&…

基于vue框架的的房屋租借系统6vsj6(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,房东,房源类型,房屋租赁,租赁信息,续租信息,退租信息 开题报告内容 基于Vue框架的的房屋租借系统开题报告 一、选题背景 随着城市化进程的加速和人口流动性的增强&#xff0c;房屋租赁市场日益繁荣&#xff0c;成为满足人们居住…

揭秘 Mark Word 的存储结构

一个Java对象被初始化之后会存储在堆内存中&#xff0c;那么这个对象在堆内存中存储了哪些信 呢? Java 对象存储结构可以分为三个部分:对象头、实例数据、对齐填充。当我们构建一个0b lock new Object() 对象实例时&#xff0c;这个1ock实例最终的存储结构就对应下面…

如何高效集成聚水潭数据至MySQL-技术案例解析

如何高效集成聚水潭数据至MySQL-技术案例解析 聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中&#xff0c;我们将探讨如何通过轻易云数据集成平台&#xff0c;将聚水潭的店铺信息高效地集成到MySQL数据库中。具体方案为“聚水潭-店铺信息查询-->BI崛起-店铺信息表”…

SSL证书有免费的吗?在哪里可以申请到?——附带申请步骤

申请免费的SSL证书通常可以通过以下几个步骤完成&#xff0c;这里以使用JoySSL为例进行说明&#xff0c;因为JoySSL提供了一个免费、自动化和开放的证书颁发机构&#xff08;CA&#xff09;来促进网站从HTTP向HTTPS的转换。 步骤&#xff1a; 选择工具&#xff1a; 访问JoySSL…

【Nuvoton干货分享】开发应用篇 5 -- 32bit MCU Flash 操作

在实际开发中&#xff0c;我们都会碰到需要把部分数据存放在不易失存储空间上&#xff0c;比如外部NOR FLASH、EEPROM、SD等存储空间上&#xff0c;针对数据量不大的情况下&#xff0c;可以考虑将数据存放在芯片ROM存储空间。Nuvoton 32bit MCU ROM存储空间包括LDROM、APROM、S…

ImportError: DLL load failed while importing _ext: 找不到指定的程序。

下载mmcv&#xff0c;torch时报错&#xff1a; ImportError: DLL load failed while importing _ext: 找不到指定的程序。 报错原因&#xff1a; mmcv&#xff0c;torch&#xff0c;python的版本冲突问题&#xff08;版本对应不上&#xff09;。 最新版本&#xff0c;请参考…

不同类型数据资产的价值差异知多少

在数字化时代&#xff0c;数据成为关键资产。数据资产类型多样&#xff0c;包括结构化、半结构化和非结构化数据&#xff0c;它们的价值差异显著。 结构化数据存储在关系型数据库中&#xff0c;如企业财务报表、销售数据和客户信息等。其价值特点在于准确性和一致性高&#xff…

C++ queue适配器(配接器)

queue queue是CSTL库中的一个适配器&#xff0c;一般使用deque作为数据存储容器。在数据结构中&#xff0c;它是采用队列的设计思路&#xff1b;在算法领域中&#xff0c;适用于解决宽度优先搜索BFS、图论等问题。下面我们就来认识一下queue适配器。 文章目录 queue1. queue的…

C++ 二叉树进阶:二叉搜索树

目录 二叉搜索树的概念 二叉搜索树的实现 基本结构 插入 1&#xff0c;当树是空树的时候 2&#xff0c;当树不为空的时候 3&#xff0c;纠正后的代码 查找 删除 1&#xff0c;左为空或右为空 2&#xff0c;左右都不为空 3&#xff0c;删除的完整代码&#xff1a; 二…

visual studio设置修改文件字符集方法

该方法来自网文&#xff0c;特此记录备忘。 添加两个组件&#xff0c;分别是Force UTF-8,FileEncoding。 截图如下&#xff1a; 方法如下&#xff1a;vs中点击“扩展”->“管理扩展”&#xff0c;输入utf搜索&#xff0c;安装如下两个插件&#xff0c;然后重启vs&#xf…

MongoDB 安装教程(MAC版本)

1.官网地址 https://www.mongodb.com/ 下载社区版&#xff0c;并且解压即可 2.安装位置 没有固定位置&#xff0c;将解压后的文件拷贝到任意位置&#xff0c;这里将以 /usr/locall为例。 3.配置环境变量 ## 1.打开环境配置文件 open .bash_profile ## 2.添加环境配置&#…

input子系统的框架和重要数据结构详解

#1024程序员节 | 征文# 往期内容 I2C子系统专栏&#xff1a; 专栏地址&#xff1a;IIC子系统_憧憬一下的博客-CSDN博客具体芯片的IIC控制器驱动程序分析&#xff1a;i2c-imx.c-CSDN博客 – 末篇&#xff0c;有往期内容观看顺序 总线和设备树专栏&#xff1a; 专栏地址&#…

【人工智能】掌握深度学习中的时间序列预测:深入解析RNN与LSTM的工作原理与应用

深度学习中的循环神经网络&#xff08;RNN&#xff09;和长短时记忆网络&#xff08;LSTM&#xff09;在处理时间序列数据方面具有重要作用。它们能够通过记忆前序信息&#xff0c;捕捉序列数据中的长期依赖性&#xff0c;广泛应用于金融市场预测、自然语言处理、语音识别等领域…

RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器

RSocket vs WebSocket&#xff1a;Spring Boot 3.3 中的两大实时通信利器 随着现代互联网应用的不断发展&#xff0c;实时通信已经成为许多应用程序不可或缺的功能。无论是社交网络、在线游戏还是数据监控系统&#xff0c;实时通信都能提供快速、无缝的信息交换。而实现实时通…