PHP+Laravel+Fpdi+Fpdf 在PDF模板上编辑自定义文字并输出新PDF文件示例
PHP+Laravel+Fpdi+Fpdf 在PDF模板上编辑自定义文字并输出新PDF文件示例
- 效果图展示
- 情景说明:
- 开发环境与准备
- 开发
- 相关文献:
- End
效果图展示
情景说明:
现在有个PDF格式的奖状模板,需要根据数据库中的获奖名单,动态的生成带有获奖者昵称的PDF格式的奖状
说白了,就是填空题!
开发环境与准备
- php7
- laravel框架
- Fpdi组件(用于打开PDF素材模板文件)
- Fpdf组件 (用于在素材上写字,并生成最后成品PDF文件)
开发
1.进入Laravel项目根目录执行下面2条composer命令
1.1 下载fpdi
composer require setasign/fpdi
1.2 下载fpdf
composer require setasign/fpdf
2.下载FPDF中文语言包(没有此包会导致自定义的中文出现乱码情况)
链接: https://github.com/DCgithub21/cd_FPDF
2.1 将中文补丁包粘贴到 项目名\vendor\setasign\PDF_Chinese
目录下 (没有PDF_Chinese文件夹就自己创建一个)
2.2 修改 项目名\vendor\setasign\fpdi\srcFpdfTpl.php
文件 修改后与下面图2保持一致
图1:修改前
图2:修改后
修改好的代码直接粘贴复制替换即可
<?php/*** 经过修改后的代码,直接复制替换就行!* This file is part of FPDI** @package setasign\Fpdi* @copyright Copyright (c) 2020 Setasign GmbH & Co. KG (https://www.setasign.com)* @license http://opensource.org/licenses/mit-license The MIT License*/namespace setasign\Fpdi;
include_once "../vendor/setasign/PDF_Chinese/chinese.php";/*** Class FpdfTpl** This class adds a templating feature to FPDF.*/
class FpdfTpl extends \PDF_Chinese
{use FpdfTplTrait;
}
2.3 如果运行demo出现下图错误,请修改 项目名\vendor\setasign\PDF_Chinese\chinese.php
的69~70行代码
正确代码如下
//正确代码,可直接替换
function AddGBFont($family='GB', $name='STSongStd-Light-Acro')
{// Add GB font with proportional Latin//$cw = $GLOBALS['GB_widths'];//@todo 报错原因是因为$GLOBALS['GB_widths']没能获取到代码第15行定义的$GB_widths的变量内容!#直接把15行定义的$GB_widths变量内容在重新赋值就可解决!$cw = array(' '=>207,'!'=>270,'"'=>342,'#'=>467,'$'=>462,'%'=>797,'&'=>710,'\''=>239,'('=>374,')'=>374,'*'=>423,'+'=>605,','=>238,'-'=>375,'.'=>238,'/'=>334,'0'=>462,'1'=>462,'2'=>462,'3'=>462,'4'=>462,'5'=>462,'6'=>462,'7'=>462,'8'=>462,'9'=>462,':'=>238,';'=>238,'<'=>605,'='=>605,'>'=>605,'?'=>344,'@'=>748,'A'=>684,'B'=>560,'C'=>695,'D'=>739,'E'=>563,'F'=>511,'G'=>729,'H'=>793,'I'=>318,'J'=>312,'K'=>666,'L'=>526,'M'=>896,'N'=>758,'O'=>772,'P'=>544,'Q'=>772,'R'=>628,'S'=>465,'T'=>607,'U'=>753,'V'=>711,'W'=>972,'X'=>647,'Y'=>620,'Z'=>607,'['=>374,'\\'=>333,']'=>374,'^'=>606,'_'=>500,'`'=>239,'a'=>417,'b'=>503,'c'=>427,'d'=>529,'e'=>415,'f'=>264,'g'=>444,'h'=>518,'i'=>241,'j'=>230,'k'=>495,'l'=>228,'m'=>793,'n'=>527,'o'=>524,'p'=>524,'q'=>504,'r'=>338,'s'=>336,'t'=>277,'u'=>517,'v'=>450,'w'=>652,'x'=>466,'y'=>452,'z'=>407,'{'=>370,'|'=>258,'}'=>370,'~'=>605);$CMap = 'GBKp-EUC-H';$registry = array('ordering'=>'GB1', 'supplement'=>2);$this->AddCIDFonts($family,$name,$cw,$CMap,$registry);
}
3.创建路由与控制器
3.1 创建路由
<?phpuse Illuminate\Support\Facades\Route;/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/use App\Http\Controllers\TestController;Route::get('test/test01',[TestController::class,'test01']);//开发者-在原有pdf上添加自定义文字
3.2 创建控制器
<?php
//直接粘贴就能用
namespace App\Http\Controllers;use setasign\Fpdi\Fpdi;//1.请先下载composer require setasign/fpdi组件
//2.请先下载composer require setasign/fpdf组件
class TestController extends Controller
{//public function test01(){$pdf = new Fpdi();//实例化 启动Fpdi$pdf->AddPage();//添加一个页面$pdf->AddGBFont('simhei', '黑体');//设置字体文件$pdf->SetFont('simhei', '', 12);//设置字体,字号$path = 'testA.pdf';//现有PDF模板(素材文件在 项目名\public\testA.pdf)$page_count = $pdf->setSourceFile($path);//设置源文件 echo $page_count; => 1$tplIdx = $pdf->importPage($page_count);//导入页面 参数为int$pdf->useTemplate($tplIdx, 0, 0);//使用导入的页面并将其放置在点 0,0 处$pdf->SetTextColor(0, 0, 0);//设置新增文字的颜色//定坐标$pdf->SetXY(52, 28);//设置新增文字的位置坐标//注意此处一定要用iconv改一下编码$pdf->Write(0, iconv("utf-8", "gbk", "特别剑Abc123!@#."));//添加文字$pdf->Output('I', 'example.pdf');//输出结果 I:直接输入,D:下载文件,F:保存到本地文件,S:返回字符串//$pdf->Output('F', 'uploads/111example.pdf');//参数1=F,参数2=文件路径/文件名.pdf(文件将保存在 项目名\public\111example.pdf)}}
相关文献:
- 中文字体包: https://github.com/DCgithub21/cd_FPDF/blob/master/example.php
- FPDI源码: https://github.com/Setasign/FPDI
- FPDI官方手册地址: https://manuals.setasign.com/fpdi-manual/
- FPDF源码: https://github.com/Setasign/FPDF
- FPDF官方手册(我没用到这个手册): http://www.fpdf.org/
End
PHP+Laravel+Fpdi+Fpdf 在PDF模板上编辑自定义文字并输出新PDF文件示例相关推荐
- echarts图片上加上自定义文字或其它下载
想要下载echarts的图片,并且想在图片上加上一条条件之类的文字. 1.在echarts的自定义一个方法,下载前设置 graphic 属性,下载后再去掉属性(应该可以行通): 2.获取到你的echa ...
- java 实现向pdf模板写入数据。并重新生成一个新文件
引入maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf< ...
- 【PC工具】Windows 上编辑树莓派(linux EXT)分区文件工具——Ext2Fsd
官网:http://www.ext2fsd.com/ 版本:0.69 功能:看我下边用一种巧妙的方式引入这个软件的功能 第一次使用树莓派,(好不容易)按照教程将镜像写入了SD卡,突然弹出(下图)要我格 ...
- 根据文件模板实现预览、生成word、pdf、excel(后端-项目)
背景 页面上有一份表单,包含基本信息和列表信息,用户填写完信息后,点击预览/导出,可以预览/导出word.pdf.excel文档. 因为代码重构过,所以看流程可能会有点绕,为方便能看懂,这里直接提供了 ...
- 使用itextpdf在pdf模板中插入对应数据
大家好今儿给大家带来的是使用itextpdf在pdf模板中插入对应数据 目录 大家好今儿给大家带来的是使用itextpdf在pdf模板中插入对应数据 1.需求描述 2.操作Adobe Acrobat ...
- pdf模板定制技术调研
背景 使用pdf模板 按需求导出pdf报告 技术调研 常见技术 常见的使用itext pdf和spire.pdf操作编辑pdf,使用pdfbox用来读取pdf 技术问题: 问题1 itext spir ...
- java 文字生成pdf,并创建自定义表单域pdf模板
目录 本文总共知识点: pom 所有的import 生成带表格的pdf 另一种方式是指定坐标生成文本域 main方法: 创建表单域做为pdf模板: 创建签名域: 根据文字获取坐标位置 完整代码: 本文 ...
- Android根据pdf模板生成pdf文件
我们需要生成一些固定格式的pdf文件或者一些报表数据,那么我们可以用 iText包去做. 需要包含的jar包:iText-5.0.6.jar iTextAsian.jar ,怎样jar包导入工程 ...
- java 根据PDF模板生成PDF文件并导出
1.准备操作的maven包 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpd ...
最新文章
- 病毒进入体内的48小时
- 图灵5周年系列活动之科普大爆炸(免费!)
- 清华教授沈向洋:创新就要做到极致,用开源的方式培养未来的工程师
- GaussDB(for MySQL) HTAP只读分析特性详解
- mybatis一简单one2one关系xml配置
- 实用技术会议通知:我知道你不会来,可是我不说是我的错
- 如何实现SSID白名单管控
- 数字电子技术基础笔记
- 类型多样的3Dmax软件插件素材,速来收藏
- 趣头条自媒体审核不过怎么办,趣头条伪原创工具教程
- java地铁最短距离_地铁线路最短路径(项目实现)
- Vue的8种通信方式
- ICCV21 - 无监督语义分割《Unsupervised Semantic Segmentation by Contrasting Object Mask Proposals》
- 【Day3.3】美攻铁道市场零距离接触行驶中的火车
- 性能之巅——洞悉系统、企业与云计算 Brendan Gregg
- 中间件常见安全漏洞(转载)
- Sphinx 之 Coreseek、Sphinx-for-chinaese、Sphinx+Scws 评测
- C++类的成员函数(在类外定义成员函数)
- 楼宇控制服务器显示FT,【产品介绍】楼宇智控系统
- Voltus任命全球投资者关系负责人