今天给公司做一个线上合同签约功能,用户签约后 生成pdf版的文件 。网上搜了搜大概都是用fpdf进行操作的  ,

通过fpdi 可以进行读取pdf模板。 在通过继承fpdf 操作现有的pdf文档 。

功能很简单,用户手写用页面canvas生成图片,图片保存png到服务器 。然后粘贴图片到对应的pdf模板上。

但是在实际操作上就出现了问题。国外的fpdf 对中文支持并不是很好,在pdf上加入中文汉字的时候,会出现乱码。

而且他只提供文件夹中的几种字体。而且这几种字体都是英文字体,所以无法正常支持汉字的写入。

下面说一下具体的解决方案:

1.   https://github.com/DCgithub21/cd_FPDF  下载代码

 2. 将上一步的源码放入vendor中

3. 修改composer源码  修改 fpdi中的  fpdfTpl.php  将他基础的fpdf类改成 咱们刚才引入的代码  而之前引入的代码再继承fpdf

  4.编写相关代码

 /*** 合成pdf* @param $sgin_img* @param $order_sn* @return string* @throws \setasign\Fpdi\PdfParser\CrossReference\CrossReferenceException* @throws \setasign\Fpdi\PdfParser\Filter\FilterException* @throws \setasign\Fpdi\PdfParser\PdfParserException* @throws \setasign\Fpdi\PdfParser\Type\PdfTypeException* @throws \setasign\Fpdi\PdfReader\PdfReaderException*/public function pdf($sgin_img,$order_sn,$orderInfo){$sgin_img=ROOT_PATH.'public/'.$sgin_img;$name=$order_sn;$outputPath=ROOT_PATH.'public/uploads/pdf/'.$name.'.pdf';$url='/uploads/pdf/'.$name.'.pdf';$pdf=new Fpdi();$pdf->AddPage();$pdf->setSourceFile('UI.pdf'); //设置模板文件$template = $pdf->importPage(1);$pdf->useTemplate($template); $count=mb_strlen($orderInfo['order_name']);$x=81+2.5*(9-$count); //计算宽度/*写入项目名称*/$pdf->SetTextColor(0, 0, 0);$pdf->SetXY($x, 67);//  $pdf->SetFont($font_path);$pdf->AddGBFont('songti');  //使用字体$pdf->SetFont('songti','',13); //注意此处一定要用iconv改一下编码 我之前没有想到这个 浪费很多时间$pdf->Write(0,iconv("utf-8","gbk",$orderInfo['order_name']));/*添加签名图片*/$pdf->Image($sgin_img,50,130,50,0);$pdf->Output($outputPath,'F');return $url;}

展示一下生成的效果:

 有可能你还会遇见其他的问题 :还是字体问题  上面贴的github中有一个黑体字体 ,但是你可能需要其他的字体

比如说我用的是宋体 。而fpdf中是有自己的字体库的  只能应用库中的 字体,这里可能还需要我们自己生产字体库,

网上也有相关的方法  这里我发一下比较简单便捷的。

  通过访问 http://www.fpdf.org/makefont/  这里地址 就可以生产所需要的字体库  图片如下:

将两个文件放入到对应的font文件夹中, 引入的时候 在Addfont 就可以正常使用了。

如果你还遇到了其他的问题,可以在留言中给我反馈。

fpdf fpdi 操作pdf文件 写入中文汉字相关推荐

  1. Java 使用itextPdf7操作pdf,写入照片这一篇就够了

    Java 使用itextPdf7操作pdf,写入照片这一篇就够了 1. 效果图 1.1 M*N列图片(无边界&有边界) 1.2 图片重叠 1.3 文字背景图片 1.4 图片与文字相邻 & ...

  2. itex将html转成pdf加水印,itext操作PDF文件添加水印

    功能描述:添加图片和文字水印 /** * * [功能描述:添加图片和文字水印] [功能详细描述:功能详细描述] * @param srcFile 待加水印文件 * @param destFile 加水 ...

  3. 使用ITEXT操作PDF文件

    2019独角兽企业重金招聘Python工程师标准>>> 使用ITEXT操作PDF文件 pom.xml <dependency><groupId>com.ite ...

  4. bfo java_Java操作PDF文件(BFO) | 学步园

    上一次我们用iText这个工具在Java环境下操作PDF文件,现在我们换一个工具:BFO iText的确小巧,但是功能也有限制,只能简单的生成PDF文件,BFO却不同,能设置字体.版面等元素. 最新版 ...

  5. 第19天---python办公自动化---操作PDF文件

    第19天-python办公自动化-操作PDF文件 在Python中,可以使用名为PyPDF2的三方库来读取PDF文件,可以使用下面的命令来安装它. pip install PyPDF2 读取PDF并抽 ...

  6. bfo java_Java操作PDF文件(BFO)

    上一次我们用iText这个工具在Java环境下操作PDF文件,现在我们换一个工具:BFO iText的确小巧,但是功能也有限制,只能简单的生成PDF文件,BFO却不同,能设置字体.版面等元素. 最新版 ...

  7. python 操作PDF文件 之 A3页面转A4

    python 操作PDF文件 A3页面转A4页面 文章目录 1. 需求概述 2. 代码实现 1. 需求概述 最近接到一份PDF资料需要打印,奈何页面是如图所示的A3格式的,奈何目前条件只支持打印A4. ...

  8. Python使操作PDF文件变得有趣

    大家好 我是毕加锁 (锁!) 大家在平时操作PDF文件时是不是感觉很枯燥 那么今天就教大家利用Python让操作PDF文件变得有趣起来  目录  工具  从PDF中提取文本  旋转和叠加页面  加密P ...

  9. python向json文件写入中文信息

    ''' 功能:python向json文件写入中文信息: 创建json数据. ''' import jsonorder_info={'订单需求信息': {'订单任务编号':'','观测目标名称':'', ...

最新文章

  1. python装饰器-python装饰器
  2. 将方法定义在prototype上的好处
  3. XML-RPC远程方法调用
  4. 几款常用的编辑器介绍,给刚入门学Web前端的人
  5. java正则 环视_正则表达式之环视(java)
  6. 逻辑回归 概率回归_概率规划的多逻辑回归
  7. html5引擎笔试题,最新!HTML5经典面试题型(附答案)
  8. 智能一代云平台(二十四):已安装的Nginx上安装echo插件
  9. 一些关于大数据的总结
  10. 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
  11. JAVA写的模拟收发器设备面板工作状态并输出图形界面
  12. 通过运算符重载实现复数加减
  13. 【转】MFC中用CFile读取和写入文件2
  14. Java后端开发常用规范
  15. firefox插件使用
  16. 使用PG处理地图数据偏移问题
  17. 把手机作为网站服务器,如何利用废旧手机打造网站服务器
  18. 关于C++、C#实现EXCEL数据库批量导入数据库万行以上数据效率问题
  19. 广告投放ROI如何计算?实现广告效果最大化
  20. 怎么判断一个数是奇数还是偶数?

热门文章

  1. 理解 Zend 框架
  2. 如何运行开源游戏?八分音符酱python版踩坑记录
  3. 欢迎来到JIT的世界: The Joy of Simple JITs
  4. 从躁动的“互联”进化
  5. max 图片无法拖入3ds_宋MAX升级版对比吉利嘉际,10万级MPV谁是超值首选?
  6. Java-MultipartFile批量Http上传
  7. anaconda安装完找不到.jupyter目录
  8. 理解并实现 你自己的 订阅-发布模式
  9. 这个 拿去 用 这70个让你笑的合不拢嘴的GitHub项目,居然拿了7万星
  10. XML的四个神话:XML属于世界