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.rhkb.cn/news/452551.html

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

相关文章

JavaScript:闭包、防抖与节流

一&#xff0c;闭包 1&#xff0c;什么是闭包 闭包是指一个函数和其周围的词法环境(lexical environment)的组合。 换句话说&#xff0c;闭包允许一个函数访问并操作函数外部的变量。 闭包的核心特性: 函数内部可以访问外部函数的变量即使外部函数已经返回&#xff0c;内部…

ApacheShiro反序列化 550 721漏洞

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550 是因为在Apache Shiro的GitHub问题跟踪器中&#xff0c;该漏洞最初被标记为第550个问题,721漏洞名称也是由此而来 Shiro-550 CVE-2016-4437 Shiro反序列化Docker复现 …

Pytest参数详解 — 基于命令行模式!

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff08;…

在wsl2下将Ubuntu从一个盘移动到其他盘

参考文章&#xff1a; wsl下将Ubuntu从c盘移动到其他盘 WSL数据迁移(迁移ext4.vhdx) WSL 系统迁移&#xff08;2&#xff09;&#xff0c;导入虚拟机磁盘映像 .vhdx ext4/fs WSL2迁移后默认登陆用户为root的解决方案 操作过程&#xff1a; 1.查看当前系统中wsl分发版本 …

系统托盘图标+快捷启动(Python)

QkStart 我把这个程序命名为QkStart 代码 # -*- coding: utf-8 -*- # Environment PyCharm # File_name QkStart |User Pfolg # 2024/10/19 22:06 import threading import time import pystray from PIL import Image from pystray import MenuItem, Menu import o…

【网络安全】缓存欺骗问题之查看个人资料接口

未经许可,不得转载。 文章目录 正文正文 目标网站 target.com,查看个人资料页面时,API 端点为/get_user,完整的 URL 是 https://target.com/web-api/v1/get_user?timestamp=123456(其中 timestamp 是一个易受攻击的参数)。 我注意到响应中有一个 cf-cache-status= MISS…

【ESP32-IDFV5.3.1开发】带SSL的MQTT-demo连接教程

目录 1.VSCODE以及IDF环境配置(略) 2.准备demo 2.1打开VSCODE&#xff0c;主菜单创建示例 找到SSL对应demo&#xff0c;点击创建&#xff0c;并成功创建项目&#xff0c;点击编译&#xff0c;显示编译成功即可以下一步。 确认该demo支持的开发板是你手上的开发板 3.修改demo配…

了解EasyNVR及EasyNVS,EasyNVR连接EasyNVS显示授权超时如何解决?什么原因?

我们先来了解NVR批量管理软件/平台EasyNVR&#xff0c;它深耕市场多年&#xff0c;为用户提供多种协议&#xff0c;兼容多种厂商设备&#xff0c;包括但不限于支持海康&#xff0c;大华&#xff0c;宇视&#xff0c;萤石&#xff0c;天地伟业&#xff0c;华为设备。 NVR录像机…

基于模型设计的智能平衡移动机器人-基础实验SPI

目录 SPI介绍 模型搭建 SPI介绍 SPI即Serial Peripheral Interface是高速同步串行输入/输出端口。SPI目前被广泛用于外部移位寄存器、D/A、A/D、串行EEPROM、LED显示驱动器等外部芯片的扩展。与前文介绍的SCI最大的区别是,SPI是同步串行接口。 SPI接口的通信原理简单&#…

(五)若使用LQR控制小车倒立摆,该如何对小车和摆杆的动力学方程线性化?哪些变量是可以进行简化的,线性化后的状态空间方程应该怎么列写

写在前面&#xff1a; 关于lqr控制的讲解&#xff0c;可以观看如下三个视频&#xff1a; 2. LQR数学公式理解_哔哩哔哩_bilibili 如何感性地理解LQR控制&#xff1f;_哔哩哔哩_bilibili LQR简介与使用_哔哩哔哩_bilibili 正文&#xff1a; 在之前系列的文章中我们已经得出…

WGCLOUD使用手册 - 文件防篡改监测

WGCLOUD作为一款运维平台&#xff0c;天然具备了文件防篡改监测能力&#xff0c;也可以监测文件夹 如果发现文件或者文件夹下的文件&#xff0c;被修改&#xff0c;被删除&#xff0c;被添加等操作&#xff0c;会立刻发送告警通知 如果设置了自动恢复指令&#xff0c;也会立刻…

极速体验:实用的前端性能优化技巧

本文将深入探讨一系列实用的前端性能优化方案&#xff0c;从基础知识到高级技巧&#xff0c;我们将揭示如何让你的网站在瞬息万变的互联网中脱颖而出&#xff0c;无论你是经验丰富的开发者还是刚入行的新手&#xff0c;这篇文章都将为你提供宝贵的见解和实践建议。 目录 &…

基于SSM+微信小程序的打印室预约管理系统(打印2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的打印室预约管理系统实现了管理员和用户两个角色。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;附近打印店管理&#xff0c;文件打印管理&#xff0c;当…

rk3568 android11 单独烧写内核。

问题: 我现在 遇到一个问题,如果我单独 烧写boot.img 的话,就会进入 recovery 的模式。 如下图: 问题说明: 如果我烧写的 Update.img 是可以启动的。那么我再烧写一个 编译 update.img 顺带编译出来的 boot.img 是可以正常启动的。 问题出在 , 如果我 重新编译一遍 ,使…

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…

WebGL编程指南 - WebGL入门

初识绘图流程、缓冲区、着色器、attribute和uniform变量 先画一个蓝色的正方形 html代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content&…

stm32 为什么有2个晶振?8mhz+32.768k

1个是系统时钟晶振是单片机内部系统的主时钟源&#xff0c;它负责控制整个系统的时钟频率。这个晶振的频率一般比较高&#xff0c;通常在几十MHz到几百MHz不等。它和CPU以及各种总线之间相互配合&#xff0c;从而协同工作。 另外一个是外设时钟晶振则通常用于单片机的内部外设…

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦

背景 接上一篇&#xff0c;【大模型问答测试】大模型问答测试脚本实现&#xff08;第一版&#xff09;。 在实现自动化的时候&#xff0c;原先把很多方法与request请求写在一块了&#xff0c;趁着目前实现接口数量较少&#xff0c;决定对代码进行解耦&#xff0c;并且清晰目录…

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

[论文阅读]RGB-Depth Fusion GAN for Indoor Depth Completion

摘要 由于固有的限制&#xff0c;如无法感知透明物体和有限的距离范围&#xff0c;室内深度传感器捕获的原始深度图像通常会有大面积的深度值缺失。这种不完整的深度图给许多后续视觉任务带来了负担&#xff0c;尽管提出了很多深度补全方法来缓解这一问题。但是现有的大多数方…