mengl_2011 发表于 2011-12-22 08:54

如何让TCPDF支持中文

<DIV>
<DIV class=intro><FONT color=#0000f0 size=3 face=幼圆>最近在做将网页内容输出成pdf文档方面的一个项目,找了好多类,php_pdflib,fpdf,HTML_topdf等等,不过最终还是发现这个好用,究其汉字处理方面发现了写一篇文章,就抄过来了,以供大家参考。</FONT></DIV>
<DIV class=intro><FONT color=#0000f0 size=3 face=幼圆></FONT>&nbsp;</DIV>
<DIV class=intro><FONT face=幼圆><FONT size=3><FONT color=#0000f0>TCPDF是一个用于快速生成PDF文件的PHP5函数包。TCPDF基于FPDF进行扩展和改进。支持UTF-8,Unicode,HTML和XHTML。在基于PHP开发的Web应用中,使用它来输出PDF文件是绝佳的选择。但毕竟这款开源软件是外国人开发的,对中文的支持总不是那么尽如人意,因此我们需要对它作进一步的增强。<BR>首先要下载TCPDF。访问http://www.tcpdf.org ,单击导航条上的”Download”链接,即可下载到最新版本的TCPDF压缩包。因为里面包含了范例和字体,因此文件大概有10M左右。下载完后解压它,会得到一个名为tcpdf的目录,此目录的结构大概是这样的: <FONT class=mix_fontStyle>copyright www.00isp.com</FONT></FONT></FONT></FONT></DIV>
<P><A class=highslide href="http://www.00isp.com/uploads/allimg/101109/0135263528-0.gif" getParams="null"><FONT color=#0000f0 size=3 face=幼圆><IMG title="图1 TCPDF目录结构图" alt=TCPDF目录结构图 src="http://www.00isp.com/uploads/allimg/101109/0135263528-0.gif"></FONT></A><BR><FONT color=#0000f0 size=3 face=幼圆>TCPDF目录结构图 <I class=np1hFD1C0>零度科技提供美国服务器租用</I> </FONT>
<P><FONT color=#0000f0 size=3 face=幼圆></FONT></P>
<P><FONT color=#0000f0 size=3 face=幼圆>将此目录移动到Apache的网页根目录下(假设您使用的是Apache,并且使用80端口,如有不同请根据实际情况修改),打开浏览器,访问 http://localhost/tcpdf/ 应该就可以看到此目录下的文件和文件夹列表。由于TCPDF已经自带了一些范例,因此为了节省时间,我们可以直接对范例进行修改再使用。打开tcpdf目录下的examples目录,下面有50多个范例文件,其中example_038.php就是用来测试东亚字体的(比如简体/繁体中文、日文等等),打开此文件,找到$pdf-&gt;SetFont 这一行,修改为: 内容来自00isp.com</FONT></P>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>$pdf-&gt;SetFont('stsongstdlight', '', 20); <SPAN class=np1hFD1C0>零度科技提供美国服务器租用</SPAN></FONT></FONT></FONT></P>
<P><FONT color=#0000f0 size=3 face=幼圆>这一行代码的作用是设置PDF正文所用的字体及字号。其中”stsongstdlight”表示”STSongStdLight”字体,这是Adobe Reader的默认简体中文字体,TCPDF中已经内置这个字体的配置文件,我们只需直接调用即可。接下来,将$pdf-&gt;Cell那一段修改为: 美国主机租用www.00isp.com</FONT></P>
<P><FONT color=#0000f0 size=3 face=幼圆>$pdf-&gt;Cell(0, 10, '敏捷的棕毛狐狸跃过那只懒狗。', '',1, 1, 'C');<BR>$pdf-&gt;Cell(0, 10, 'The quick brown fox jumps over the lazy dog.', '',1, 1, 'C');<BR>$pdf-&gt;Cell(0, 10, '1234567890', '',1, 1, 'C'); 零度科技提供DirectAdmin面板</FONT></P>
<P><FONT color=#0000f0 size=3 face=幼圆>保存,然后访问 http://localhost/tcpdf/examples/example_038.php 就可以生成一份PDF文档了: 零度科技提供香港服务器</FONT></P>
<P><A class=highslide href="http://www.00isp.com/uploads/allimg/101109/01352B2Z-1.gif" getParams="null"><FONT color=#0000f0 size=3 face=幼圆><IMG title=使用默认中文字体生成的PDF文件 alt=使用默认中文字体生成的PDF文件 src="http://www.00isp.com/uploads/allimg/101109/01352B2Z-1.gif"></FONT></A><BR><FONT color=#0000f0 size=3 face=幼圆>使用默认中文字体生成的PDF文件 <SPAN class=np1hFD1C0>零度科技提供美国服务器租用</SPAN> </FONT>
<P><FONT color=#0000f0 size=3 face=幼圆></FONT></P>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>这种方式生成的PDF文件的优点是:文件体积小,生成快速。但也有缺点是,没有嵌入中文字体,只限于安装了Adobe Reader之后才能正常显示。那万一用户使用的是FoxIt Reader或者是Linux操作系统呢?显示效果就不一样了。因此,为了保证生成的PDF文件在任何环境下都有同样的显示效果,嵌入字体是必需的。<BR>Windows下有很多中文字体,但是我们要用在TCPDF中的中文字体有下面几个要求: <I class=np1hFD1C0>转载自00isp.com</I></FONT></FONT></FONT></P>
<UL>
<LI><FONT color=#0000f0 size=3 face=幼圆>支持Unicode,因为TCPDF支持的是Unicode; </FONT>
<LI><FONT color=#0000f0 size=3 face=幼圆>体积越小越好; </FONT>
<LI><FONT color=#0000f0 size=3 face=幼圆>最好是也支持繁体中文;</FONT></LI></UL>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>这样看来,微软雅黑以及方正的一些字体都符合要求。但是他们都是商业字体,而且个头都不小,以微软雅黑为例,msyh.ttf 文件就超过10M,如果使用它,生成的PDF文件体积也会很大。<BR>综合考虑,我觉得”Droid Sans Fallback”字体符合要求: <SPAN class=np1hFD1C0>copyright www.00isp.com</SPAN></FONT></FONT></FONT></P>
<UL>
<LI><FONT color=#0000f0 size=3 face=幼圆>首先它是免费字体; </FONT>
<LI><FONT color=#0000f0 size=3 face=幼圆>其次它也是Unicode编码,支持简体繁体中文以及日文韩文等等; </FONT>
<LI><FONT color=#0000f0 size=3 face=幼圆>然后它的体积很小,不超过5M。</FONT></LI></UL>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>然而TCPDF不支持TTF字体文件,因此我们先将它转换成TCPDF支持的格式,然后再使用。在TCPDF目录下有个fonts子目录,这个子目录下又有个utils,这里面带有一个字体转换工具ttf2ufm.exe。下面是转换的步骤:<BR>在网上很容易找到Droid Sans Fallback字体的下载链接,因此在这里就没有必要多做描述了。我们把下载到的 DroidSansFallback.ttf 复制到 TCPDF\fonts\utils 下面,然后打开Windows的命令行,切换到此路径下,输入如下命令: <SPAN class=np1hFD1C0>内容来自00isp.com</SPAN></FONT></FONT></FONT></P>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>D:\www\tcpdf\fonts\utils&gt;ttf2ufm -a -F DroidSansFallback.ttf <I class=np1hFD1C0>原文来自零度科技</I></FONT></FONT></FONT></P>
<P><FONT color=#0000f0 size=3 face=幼圆>等待一段时间,等到命令行窗口显示 内容来自00isp.com</FONT></P>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>"Finished - font files created" <FONT class=mix_fontStyle>转载自00isp.com</FONT></FONT></FONT></FONT></P>
<P><FONT color=#0000f0 size=3 face=幼圆>之后,可以发现此目录下生成了DroidSansFallback.afm,DroidSansFallback.t1a 和 DroidSansFallback.ufm 这三个文件。<BR>在命令行中输入 内容来自00isp.com</FONT></P>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>"C:\Program Files\WAMP\PHP5\php.exe" -q makefont.php DroidSansFallback.ttf DroidSansFallback.ufm <SPAN class=np1hFD1C0>转载自00isp.com</SPAN></FONT></FONT></FONT></P>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>说明:这里的”C:\Program Files\WAMP\PHP5\php.exe”为php.exe文件所在的路径,请根据实际情况输入。回车运行之后,稍等片刻,命令行窗口中会提示 <I class=np1hFD1C0>内容来自00isp.com</I></FONT></FONT></FONT></P>
<P><FONT color=#0000f0 size=3 face=幼圆>Font definition file generated 零度科技提供香港服务器</FONT></P>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>至此大功告成。将生成的droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文件复制到 TCPDF\fonts 下面即可。<BR>打开example_038.php文件,将<BR>$pdf-&gt;SetFont('stsongstdlight', '', 20);<BR>修改为<BR>$pdf-&gt;SetFont('droidsansfallback', '', 20); <SPAN class=np1hFD1C0>零度科技提供香港服务器</SPAN></FONT></FONT></FONT></P>
<P><FONT face=幼圆><FONT size=3><FONT color=#0000f0>这样就能够调用我们刚才生成的字体,再访问 http://localhost/tcpdf/examples/example_038.php 就可以看到重新生成的PDF文档。 <I class=np1hFD1C0>内容来自00isp.com</I></FONT></FONT></FONT></P>
<P><A class=highslide href="http://www.00isp.com/uploads/allimg/101109/01352C007-2.gif" getParams="null"><FONT color=#0000f0 size=3 face=幼圆><IMG title="图3 嵌入DroidSansFallback字体后的PDF文档" alt=嵌入DroidSansFallback字体后的PDF文档 src="http://www.00isp.com/uploads/allimg/101109/01352C007-2.gif"></FONT></A><BR><FONT color=#0000f0 size=3 face=幼圆>嵌入DroidSansFallback字体后的PDF文档 <I class=np1hFD1C0>原文来自零度科技</I> </FONT>
<P><FONT color=#0000f0 size=3 face=幼圆></FONT></P>
<P><FONT color=#0000f0 size=3 face=幼圆>零度科技原文链接:</FONT><A title="如何让TCPDF支持中文 - 零度科技" href="http://www.00isp.com/webdesign/php-project/201011/tcpdf-chinese.html"><FONT color=#0000f0 size=3 face=幼圆>http://www.00isp.com/webdesign/php-project/201011/tcpdf-chinese.html</FONT></A></P>
<P style="DISPLAY: none" id=PageBreak class="arc_page autoH" jQuery1312251572515="12"><FONT color=#0000f0 size=3 face=幼圆></FONT></P>
<P style="DISPLAY: none" id=TagsLink class="tags _blank" jQuery1312251572515="13"><STRONG><FONT color=#0000f0 size=3 face=幼圆>相关标签:</FONT></STRONG></P></DIV>
页: [1]
查看完整版本: 如何让TCPDF支持中文