PHP+Laravel+Fpdi+Fpdf 在PDF模板上编辑自定义文字并输出新PDF文件示例

  • 效果图展示
  • 情景说明:
  • 开发环境与准备
  • 开发
  • 相关文献:
  • End

效果图展示

情景说明:

现在有个PDF格式的奖状模板,需要根据数据库中的获奖名单,动态的生成带有获奖者昵称的PDF格式的奖状
说白了,就是填空题!

开发环境与准备

  1. php7
  2. laravel框架
  3. Fpdi组件(用于打开PDF素材模板文件)
  4. 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文件示例相关推荐

  1. echarts图片上加上自定义文字或其它下载

    想要下载echarts的图片,并且想在图片上加上一条条件之类的文字. 1.在echarts的自定义一个方法,下载前设置 graphic 属性,下载后再去掉属性(应该可以行通): 2.获取到你的echa ...

  2. java 实现向pdf模板写入数据。并重新生成一个新文件

    引入maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf< ...

  3. 【PC工具】Windows 上编辑树莓派(linux EXT)分区文件工具——Ext2Fsd

    官网:http://www.ext2fsd.com/ 版本:0.69 功能:看我下边用一种巧妙的方式引入这个软件的功能 第一次使用树莓派,(好不容易)按照教程将镜像写入了SD卡,突然弹出(下图)要我格 ...

  4. 根据文件模板实现预览、生成word、pdf、excel(后端-项目)

    背景 页面上有一份表单,包含基本信息和列表信息,用户填写完信息后,点击预览/导出,可以预览/导出word.pdf.excel文档. 因为代码重构过,所以看流程可能会有点绕,为方便能看懂,这里直接提供了 ...

  5. 使用itextpdf在pdf模板中插入对应数据

    大家好今儿给大家带来的是使用itextpdf在pdf模板中插入对应数据 目录 大家好今儿给大家带来的是使用itextpdf在pdf模板中插入对应数据 1.需求描述 2.操作Adobe Acrobat ...

  6. pdf模板定制技术调研

    背景 使用pdf模板 按需求导出pdf报告 技术调研 常见技术 常见的使用itext pdf和spire.pdf操作编辑pdf,使用pdfbox用来读取pdf 技术问题: 问题1 itext spir ...

  7. java 文字生成pdf,并创建自定义表单域pdf模板

    目录 本文总共知识点: pom 所有的import 生成带表格的pdf 另一种方式是指定坐标生成文本域 main方法: 创建表单域做为pdf模板: 创建签名域: 根据文字获取坐标位置 完整代码: 本文 ...

  8. Android根据pdf模板生成pdf文件

    我们需要生成一些固定格式的pdf文件或者一些报表数据,那么我们可以用 iText包去做. 需要包含的jar包:iText-5.0.6.jar    iTextAsian.jar ,怎样jar包导入工程 ...

  9. java 根据PDF模板生成PDF文件并导出

    1.准备操作的maven包 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpd ...

最新文章

  1. 病毒进入体内的48小时
  2. 图灵5周年系列活动之科普大爆炸(免费!)
  3. 清华教授沈向洋:创新就要做到极致,用开源的方式培养未来的工程师
  4. GaussDB(for MySQL) HTAP只读分析特性详解
  5. mybatis一简单one2one关系xml配置
  6. 实用技术会议通知:我知道你不会来,可是我不说是我的错
  7. 如何实现SSID白名单管控
  8. 数字电子技术基础笔记
  9. 类型多样的3Dmax软件插件素材,速来收藏
  10. 趣头条自媒体审核不过怎么办,趣头条伪原创工具教程
  11. java地铁最短距离_地铁线路最短路径(项目实现)
  12. Vue的8种通信方式
  13. ICCV21 - 无监督语义分割《Unsupervised Semantic Segmentation by Contrasting Object Mask Proposals》
  14. 【Day3.3】美攻铁道市场零距离接触行驶中的火车
  15. 性能之巅——洞悉系统、企业与云计算 Brendan Gregg
  16. 中间件常见安全漏洞(转载)
  17. Sphinx 之 Coreseek、Sphinx-for-chinaese、Sphinx+Scws 评测
  18. C++类的成员函数(在类外定义成员函数)
  19. 楼宇控制服务器显示FT,【产品介绍】楼宇智控系统
  20. Voltus任命全球投资者关系负责人

热门文章

  1. 扫地机器人作文说明文提纲_扫地机器人说明文600字
  2. 虚拟机怎么装服务器系统教程视频,云服务器装虚拟机教程视频
  3. 苹果手机浏览器下拉会闪动的解决办法
  4. 计算机应用程序没声音,电脑没声音怎么办
  5. 面试结束时应该向面试官提出什么问题
  6. JS屏蔽功能类(屏蔽F5,退格键,空格键......
  7. 美团点评2017校园招聘编程题--取红包
  8. IntelliJ IDEA 文件未被识别成maven工程
  9. 使用面阵相机进行传送带视频流的拼接
  10. 解决vue项目在ie、360兼容模式下空白页面问题