//生成pdf最近会用到,找到一些资料,非原创

PHP生成PDF格式文件以TCPDF为基础,TCPDF是一个用于快速生成PDF文件的PHP5函数包。TCPDF基于FPDF进行扩展和改进。支持UTF-8,Unicode,HTML和 XHTML。在基于PHP开发的Web应用中,使用它来输出PDF文件是绝佳的选择。但毕竟这款开源软件是外国人开发的,对中文的支持也不是那么尽如人 意,因此我们需要对它作进一步的强化。首先要到TCPDF官网下载TCPDF最新版。访问http://www.tcpdf.org ,单击导航条上的”Download”链接,即可下载到最新版本的TCPDF压缩包。因为里面包含了许多的TCPDF范例和字体文件,因此下载的文件比较大,大概有10M左右。下载完后解压它,会得到一个名为tcpdf的目录,此目录的结构大概是这样的:

将此目录移动到WEB网站的根目录下(假设您使用的是Apache,并且使用80端口,如有不同请根据实际情况修改),打开浏览器,访问 http://localhost/tcpdf/ 应该就可以看到此目录下的文件和文件夹列表。由于TCPDF已经自带了一些范例,因此为了节省时间,我们可以直接对范例进行修改再使用。打开tcpdf目 录下的examples目录,下面有50多个范例文件,其中example_038.php就是用来测试东亚字体的(比如简体/繁体中文、日文等等),打开此文件,找到$pdf->SetFont 这一行,修改为:

$pdf->SetFont(‘stsongstdlight’, ”, 20);

这一行代码的作用是设置PDF正文所用的字体及字号。其中”stsongstdlight”表示”STSongStdLight”字体,这是Adobe Reader的默认简体中文字体,TCPDF中已经内置这个字体的配置文件,我们只需直接调用即可。接下来,

$pdf->Write(0,’敏捷的棕毛狐狸跃过那只懒狗‘, ”, 0, ’L', true, 0, false, false, 0);

$pdf->Write(0,’The quick brown fox jumps over the lazy dog.’, ”, 0, ’L', true, 0, false, false, 0);

$pdf->Write(0,’1234567890′, ”, 0, ’L', true, 0, false, false, 0);

保存,然后访问 http://localhost/tcpdf/examples/example_038.php 就可以生成一份PDF文档了:

使用默认中文字体生成的PDF文件

这种方式生成的PDF文件的优点是:文件体积小,生成快速。但也有缺点是,没有嵌入中文字体,只限于安装了Adobe Reader之后才能正常显示。那万一用户使用的是FoxIt Reader或者是Linux操作系统呢?显示效果就不一样了。因此,为了保证生成的PDF文件在任何环境下都有同样的显示效果,嵌入字体是必需的。

Windows下有很多中文字体,但是我们要用在TCPDF中的中文字体有下面几个要求:

· 支持Unicode,因为TCPDF支持的是Unicode;

· 体积越小越好;

· 最好是也支持繁体中文;

这样看来,微软雅黑以及方正的一些字体都符合要求。但是他们都是商业字体,而且个头都不小,以微软雅黑为例,msyh.ttf 文件就超过10M,如果使用它,生成的PDF文件体积也会很大。

综合考虑,我觉得”Droid Sans Fallback”字体符合要求:

· 首先它是免费字体;

· 其次它也是Unicode编码,支持简体繁体中文以及日文韩文等等;

· 然后它的体积很小,不超过5M。

然而TCPDF不支持TTF字体文件,因此我们先将它转换成TCPDF支持的格式,然后再使用。在TCPDF目录下有个fonts子目录,这个子目录下又有个utils,这里面带有一个字体转换工具ttf2ufm.exe。下面是转换的步骤:

在网上很容易找到Droid Sans Fallback字体的下载链接,因此在这里就没有必要多做描述了。我们把下载到的 DroidSansFallback.ttf 复制到 TCPDF\fonts\utils 下面,然后打开Windows的命令行,切换到此路径下,输入如下命令:

D:\www\tcpdf\fonts\utils>ttf2ufm -a -F DroidSansFallback.ttf

等待一段时间,等到命令行窗口显示

“Finished - font files created”

之后,可以发现此目录下生成了DroidSansFallback.afm,DroidSansFallback.t1a 和 DroidSansFallback.ufm 这三个文件。

在命令行中输入

“C:\Program Files\WAMP\PHP5\php.exe” -q makefont.php DroidSansFallback.ttf DroidSansFallback.ufm

说明:这里的”C:\Program Files\WAMP\PHP5\php.exe”为php.exe文件所在的路径,请根据实际情况输入。回车运行之后,稍等片刻,命令行窗口中会提示

Font definition file generated

至此大功告成。将生成的droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文件复制到 TCPDF\fonts 下面即可。

生成不成功也没问题,另一个方法是到Joomla中文官网http://www.joomlagate.com下载Joomla中文程序找到\language\pdf_fonts目录下复制droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文件也是可以的

打开example_038.php文件,将

$pdf->SetFont(‘stsongstdlight’, ”, 20);

修改为

$pdf->SetFont(‘droidsansfallback’, ”, 20);

这样就能够调用我们刚才生成的字体,再访问 http://localhost/tcpdf/examples/example_038.php 就可以看到重新生成的PDF文档。

嵌入DroidSansFallback字体后的PDF文档

附注:SetHeaderData里中文的解决方法为:tcpdf\config\tcpdf_config.php

define (‘PDF_FONT_NAME_MAIN’, ’helvetica’);

改为: define (‘PDF_FONT_NAME_MAIN’, ’stsongstdlight’);

define (‘PDF_FONT_NAME_DATA’, ’helvetica’);

改为: define (‘PDF_FONT_NAME_DATA’, ’stsongstdlight’);

就可以把example_038.php文件中的

$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.’ 038′, PDF_HEADER_STRING);

改为:

$pdf->SetHeaderData(PDF_HEADER_LOGO,PDF_HEADER_LOGO_WIDTH,’中文头部’, ’作者和版权’);

假如你的网站源码为GBK格式 输出的PDF内容为乱码的话 就需要做个简单的转换了,把需要打出的中文文字做

iconv(“gb2312//TRANSLIT”,’utf-8′,$str);

$pdf->Write(0,iconv(“gb2312//TRANSLIT”,’utf-8′,’解决GBK网站输出中文乱码问题‘), ”, 0, ’L', true, 0, false, false, 0);

php生成pdf中文断码_PHP生成PDF完美支持中文,解决TCPDF乱码相关推荐

  1. codelite14中文语言包_Windows下CodeLite完美支持中文的正确设置方法

    一.准备工作 1.下载CodeLite最新版本  官方下载 .建议用迅雷下载比较快 如果想检验本文内容的有效性,你必须下载Windows系统下的版本. 2.下载中文语言包 论坛下载 . 如果链接无效, ...

  2. PHP生成PDF完美支持中文,解决TCPDF乱码

    PHP生成PDF完美支持中文,解决TCPDF乱码 2011-09-26 09:04 418人阅读 评论(0) 收藏 举报 phpfontsheaderttfxhtml文档 PHP生成PDF完美支持中文 ...

  3. Java 生成条形 二维码 Java 生成条形码 订单条形码 Java生成各种条形码 java条形码生成示例 java 生成条形 二维码

    1.加入Maven.或者Jar依赖 maven依赖, 如果不是Maven项目,则需要去 Maven中央仓库下载Jar <!-- 二维码工具--><dependency>< ...

  4. php生成pdf中文断码_Rmarkdown导出中文PDF解决方案

    Rmarkdown非常适合R语言使用者导出格式漂亮的文档,但是输出中文PDF的过程中会遇到各种麻烦的问题,本文整理了我的经验供大家参考. 总的来说,通过Rmarkdown输出中文版pdf报告,要解决以 ...

  5. 程序员的乐趣,生成自定义二维码,5行Python代码就解决

    随处可见的二维码是怎么生成的?自己做一个试试吧. 随着互联网和智能移动设备不断普及,二维码(Quick Response code)已经成为世界上应用最为广泛的信息载体之一.生成二维码的工具也层出不穷 ...

  6. 用python生成个性二维码_Python 生成个性二维码

    1.1 实验内容 本课程通过调用MyQR接口来实现生成个人所需二维码,并可以设置二维码的大小.是否在现有图片的基础上生成.是否生成动态二维码. 本课程主要面向Python3初学者. 1.2 知识点 P ...

  7. 如何生成微信二维码?生成方法其实非常简单

    如何生成微信二维码呢?生成微信二维码可以方便地分享微信号或公众号,让其他人可以快速添加你为好友或关注你的公众号.在商业领域中,可以将微信二维码作为营销手段,例如在文章中加入二维码,引导用户进入官方微信 ...

  8. MySQL查询不支持中文_为什么我的 Mysql 不支持中文查询?

    Q: 我在写一个查询条件时的问题如下: 如我想写一个字段中包含"李"字的所有记录 $str="李"; select * from table where fie ...

  9. 让Source Insight完美支持中文注释 (转)

    如何让source insight支持中文注释,解决回车删除,移动光标出现乱码的问题?下面是解决方案: -------Source Insight3 中文操作(左右键.删除和后退键)支持宏------ ...

最新文章

  1. 在有序旋转数组中找到最小值
  2. Kindeditor小改动
  3. 在webservice中传递Hashtable
  4. KindleConverter:Word批量转换为6寸PDF
  5. python-gevent模块实现socket大并发
  6. binlog日志_mysql日志redo log、undo log、binlog以及作用看这篇就可以啦
  7. 380.常数时间插入、删除和获取随机元素
  8. (附源码)spring boot网上购物平台 毕业设计 141422
  9. 传奇c语言编程,[转载]软件传奇Dennis M. Ritchie-c语言之父
  10. 原理图端口符号_电气原理图与接线图的区别和联系
  11. sunray破解版使用方法
  12. 想要穷游北京?这些湖光山色的地方人少还景美!
  13. 新导智能融合定位可视化物联系统
  14. 前端页面导出为xls、xlsx格式的excel文件
  15. 在线网校教育平台的开发,题库的搭建必不可少
  16. 暗月内网渗透实战——项目七
  17. MD5的标准幻数的不同写法
  18. 51单片机多路独立按键开关程序
  19. mac os 系统升级到 Catalina 版本后出现应用打不开 ,闪退,意外退出问题
  20. (第一期)-自动化实现全自动加好友(以QQ可能想认识的人为例)

热门文章

  1. Windows缓冲区溢出初探
  2. 5福最多多少钱_2018支付宝集5福攻略介绍 一天内集齐不是没可能
  3. python 打印乘法表各种形式_Python使用while循环花式打印乘法表
  4. 苹果手机显示无法与服务器建立安全连接,苹果手机那个safari浏览器无法与访问器建立安全链接是什么意思...
  5. 谷歌 地图 android studio,Android Studio百度地图开发(一)
  6. Spring项目启动报错No qualifying bean of type [xxx] available: expected single matching bean but found 2
  7. android 呼叫转移 延时,Android:在延迟后设置呼叫转移
  8. 派森编程python_《派森》(Python)下载
  9. `SpringBoot`+`axios`结合发送`ajax`请求
  10. SAP_什么是BAPI