fpdf fpdi 操作pdf文件 写入中文汉字
今天给公司做一个线上合同签约功能,用户签约后 生成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文件 写入中文汉字的更多相关文章
- Itext简绍及操作PDF文件
iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...
- 操作PDF文件的关键技术点
一个PDF文档从大到小可以分成如下几个要素:文档.章节.小节.段落.表格.列表. com.lowagie.text.Document表示PDF文档.必须为它创建一个PDF写入器,即com.lowagi ...
- PHP文件读写操作之文件写入代码
在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...
- vue项目中操作PDF文件
以前从来没接触过前端要求显示PDF文件,一时之间有点懵逼,不知从哪下手啊... 无奈之下,去找度娘,方法还不少,iframe embed object这些标签就可以, 可是拿过来做个demo一试, ...
- .net通过iTextSharp.pdf操作pdf文件实现查找关键字签字盖章
之前这个事情都CA公司去做的,现在给客户做demo,要模拟一下签字盖章了,我们的业务PDF文件是动态生成的所以没法通过坐标定位,只能通过关键字查找定位了. 之前在网上看了许多通多通过查询关键字,然后图 ...
- c#操作pdf文件系列之创建文件
1.我使用的工具是vs2013,引用的第三方程序集itextpdf 具体安装方法,可以通过nuget搜索iTextSharp然后进行安装. 2具体代码如下 创建两个不同pdf文件,每个地方什么意思代码 ...
- Qt 操作 pdf 文件
写了好久的东西,不小心按了下返回键就没了.CSDN居然没自动保存,坑爹啊 原本还有很多信息的,现在直入正题吧. QT没有内置PDF操作的功能(其实有一个,QPrinter,不过只能写不能读,基本是半残 ...
- CStdioFile.WriteString无法向文件写入中文
CStdioFile.WriteString向文件中写入字符串,但字符串中带有中文的,无法写入. 解决方案: 将带有中文的字符串进行转换后再写入文件. char* pBuffer = NULL; lo ...
- itext操作PDF文件添加水印
功能描述:添加图片和文字水印 /** * * [功能描述:添加图片和文字水印] [功能详细描述:功能详细描述] * @param srcFile 待加水印文件 * @param destFile 加水 ...
随机推荐
- 常用API - Scanner、Random、ArrayList
API 概述 API(Application Programming Interface),应用程序编程接口. Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档. 这些类 ...
- django 缓存(memcached)
Django提供了6种缓存方式 开发调试缓存 内存缓存 文件缓存 数据库缓存 Memcache缓存(使用python-memcached模块) Memcache缓存(使用pylibmc模块) 常使用的 ...
- Unity音量可视化——粒子随声浪跳动
起初是看到这么一篇博客 Shader特效-- 音符跳动,效果如下图 具体的shader代码就不贴在这里了,他的博客里都有. 处理音频的关键代码如下: private int m_NumSamples ...
- 一文梳理Web存储,从cookie,WebStorage到IndexedDB
前言 HTTP是无状态的协议,网络早期最大的问题之一是如何管理状态.服务器无法知道两个请求是否来自同一个浏览器.cookie应运而生,开始出现在各大网站,然而随着前端应用复杂度的提高,Cookie 也 ...
- day47 作业
表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum('ma ...
- day30 继承、派生与多态,类中方法和内置函数
目录 一.多继承出现的问题(mixins机制) 二.派生与方法重用 三.多态 1 什么是多态 2 为什么要有多态 3 python中多态的鸭子类型 四.绑定方法与非绑定方法 1 绑定方法 1.1对象的 ...
- setTimeout还有第三个参数
今天才发现setTimeout还有第三个参数. for (var i = 0; i< 10; i++){ setTimeout((i) => { console.log(i); }, 10 ...
- MySQL数据库的卸载与安装
MySQL数据库的卸载与安装 MySQL的完全卸载 因为不知道什么原因,电脑里同时存在两个版本的mysql,所以决定卸载重新安装,但是大家都说MySQL很难清除干净,所以特地查找完全卸载MySQL的方 ...
- Flask 基础组件(二):配置文件
配置参数 flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为: { 'DEBUG': get_debug_flag(default=False), 是否开启 ...
- 02-flask项目创建及debug模式的开启
一.flask文件的创建 打开pycharm,选择flask文件,选择相关配置,需要配置的有虚拟环境,flask文件名.如下图所示: 新建的flask文件如下所示: static:用来存放静态文件,包 ...