信推网

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

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的目录,此目录的结构大概是这样的: xjjtjt.cn

  内容来自xjjgjt.cn

copyright xjjgjt

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

本文来自信推网xjjtjt.cn

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

本文来自信推网xjjtjt.cn

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

来自信推网xjjtjt.cn

 

来自信推网xjjtjt.cn

$pdf->Write(0,’敏捷的棕毛狐狸跃过那只懒狗‘, ”, 0, ’L', true, 0, false, false, 0); 来自信推网xjjtjt.cn

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

copyright xjjgjt

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

来自信推网xjjtjt.cn

  来自信推网xjjtjt.cn

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

copyright xjjgjt

信推网,北京网络营销

使用默认中文字体生成的PDF文件 来自信推网xjjtjt.cn

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

xjjtjt.cn

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

copyright xjjgjt

· 体积越小越好; copyright xjjgjt

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

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

· 首先它是免费字体; copyright xjjgjt

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

信推网,北京网络营销

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

信推网,北京网络营销

然而TCPDF不支持TTF字体文件,因此我们先将它转换成TCPDF支持的格式,然后再使用。在TCPDF目录下有个fonts子目录,这个子目录下又有个utils,这里面带有一个字体转换工具ttf2ufm.exe。下面是转换的步骤:
在网上很容易找到Droid Sans Fallback字体的下载链接,因此在这里就没有必要多做描述了。我们把下载到的 DroidSansFallback.ttf 复制到 TCPDF\fonts\utils 下面,然后打开Windows的命令行,切换到此路径下,输入如下命令: 内容来自xjjgjt.cn

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

来自信推网xjjtjt.cn

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

“Finished - font files created”

xjjtjt.cn

之后,可以发现此目录下生成了DroidSansFallback.afm,DroidSansFallback.t1a 和 DroidSansFallback.ufm 这三个文件。
在命令行中输入

copyright xjjgjt

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

本文来自信推网xjjtjt.cn

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

Font definition file generated

来自信推网xjjtjt.cn

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

copyright xjjgjt

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

来自信推网xjjtjt.cn

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

本文来自信推网xjjtjt.cn

修改为 本文来自信推网xjjtjt.cn

$pdf->SetFont(‘droidsansfallback’, ”, 20); 本文来自信推网xjjtjt.cn

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

copyright xjjgjt

copyright xjjgjt

嵌入DroidSansFallback字体后的PDF文档

copyright xjjgjt

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

本文来自信推网xjjtjt.cn

 

来自信推网xjjtjt.cn

define (‘PDF_FONT_NAME_MAIN’, ’helvetica’);

信推网,北京网络营销

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

信推网,北京网络营销

define (‘PDF_FONT_NAME_DATA’, ’helvetica’);

copyright xjjgjt

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

copyright xjjgjt

就可以把example_038.php文件中的

内容来自xjjgjt.cn

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

来自信推网xjjtjt.cn

改为: copyright xjjgjt

$pdf->SetHeaderData(PDF_HEADER_LOGO,PDF_HEADER_LOGO_WIDTH,’中文头部’, ’作者和版权’); 内容来自xjjgjt.cn

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

copyright xjjgjt

  来自信推网xjjtjt.cn

iconv(“gb2312//TRANSLIT”,’utf-8′,$str); 信推网,北京网络营销

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

来自信推网xjjtjt.cn

转载请注明来源于: http://www.5eyi.com/php-to-generate-pdf-the-perfect-support-for-the-chinese-to-address-the-garbage-tcpdf/trackback/ 本文来自信推网xjjtjt.cn

责任编辑:admin

相关推荐

网友评论:

验证码: 点击我更换图片

评论仅代表网友看法!请遵守阆中地方相关法律!
返回 信推网

本周排行

本月热点

百度优化 SEO优化 网站优化 淘宝商城 PHP PDF 百度搜索营销 北京网络营销 网站优化排名 外部链接 Javascript 北京网络营销策划 专业删帖公司 百度收录快 phpmailer B2C Ajax BaiduSpider 关键词优化 企业网络营销模式 网页的跳出率 网络营销方式 SEO 产品设计 网络推广 网络传媒 产品营销 北京seo优化 媒体营销模式 dreamweaver 垂直型网站 电子商务资源 phpmailer多收件 上海网站关键词排名 电子商务 保健品 营销模式 垂直B2C网站 负面信息 在线配色 代运营公司 整合策略 信息化技术 php访问mysql 北京网络推广 网络营销 百度快照更新 错误代码-2146893 搜索引擎偏见 用户体验 电子商务平台 网站开发 电子商务大军 整合营销 网络营销推广 网页开发者 网络推广策划 百度排名优化 百度新闻源 北京百度优化 网站地图 配色 百度搜索平台 黑客攻击 关键词竞争性 SEO作弊 中国电子商务 企业电子商务 百度掌门人 卓越亚马逊 搜索引擎优化 浏览器加载 群发供求消息 新闻自由 搜索引擎优化技术 Chrome插件 北京SEO技术 电子商务企业 网站被k 电子商务的发展 搜索引擎 网站建设 信息化发展 DDOS攻击 网站优化,网站建设 前端 支付宝官方 b2c电子商务 微博营销 马云 网络经销商 搜索引擎上做优化 个性化 页面性能优化 团购网站 前端开发 网站设计 虚拟机实施攻击 在线营销 网站作弊 phpmailer群发
关于信推 | 关于网邦 | 服务条款 | 广告服务 | 信推招聘 | 信推服务 | 客服中心 |
Copyright © 2010 - 2015 xjjgjt. All Rights Reserved
信推网 版权所有,信推网属西安网邦网络科技有限公司旗下品牌.联系电话029-87872554