FPDF中文应用攻略

  曾经写过一个关于fpdf使用的文章,但由于戒烟如你放BLOG的服务器被攻击,数据库出了问题,现在是看不到了,不过上次的BLOG被不少地方转载,有兴趣的朋友可以自己去搜,在百度用关键词用“FPDF”和“戒烟如你”,就可以看到被转载的内容。

  现在要重新用FPDF,所以对使用方法再整理一次,另外需要提到一点,目前FPDF的官方网站(fpdf.org)被和谐了,登录的话需要用代理,所以把需要用到的文件再整理到这里来(上次提供的1.52版的中文手册这次就不提供了,英文版的也不难懂)。

  首先介绍需要用到的软件包:
  1、FPDF V 1.6(fpdf16.zip),这是目前看到的最新版,2008年8月3日的;
  2、FPDF 中文包(chinese.zip),似乎是TW的同胞搞的,可以对繁简体进行支持;
  3、TTF2TP1(ttf2pt1.zip),字体格式转换程序,这里是WIN系统用的可执行文件;
  4、TTF2TP1中文包(ttf2pt1-chinese-3.4.0.zip),似乎其中是码表。

  先来制作中文字体,把TTF2TP1里的ttf2tp1.exe解压到一个易于操作的文件夹里,因为要使用WIN的命令行工具,这里就用“C:\ttf”了。然后把TTF2TP1中文包里的ugbk.map也解压到这个目录下。

  从你的WIN字体文件夹中找到你想要处理的字体,这里用的是黑体(simhei.ttf),也复制到这个文件夹下吧。

  在命令行工具里运行C:\ttf\ttf2pt1.exe -a -L ugbk.map+a1 simhei.ttf simhei,特别提醒:命令里的所有字符都是半角的,网上某人转载戒烟如你上次的文章时把两个横线转成了全角,有人运行时提示错误,建议最好不要复制,自己用键盘输入

  经过一番艰苦的运行,C:\ttf文件夹里多出了simhei.afm和simhei.t1a两个文件,后面一个没用了,保留simhei.ttf和simhei.afm,一会儿用。

  解压FPDF压缩包,用到的是其中的fpdf.php文件和/font/makefont文件夹,把他们解压或上传到你的服务器目录里吧,如果用的是LINUX的服务器,记得把/font文件夹属性改为777,生成的字体文件要写入到这里。

  把FPDF中文包里的chinese.php和ex.php两个文件解压或上传到FPDF的根目录下。

  把刚才提到的simhei.ttf和simhei.afm复制或上传到/font文件夹内。

  在/font文件夹里建立一个文件,形如:

PHP代码
  1. <?php   
  2.     require('./makefont/makefont.php');   
  3.     makeFont('./simhei.ttf''./simhei.afm');   
  4. ?>  

  使用浏览器浏览该文件,屏幕上出现N多东西,不管它,只要看到又生成了两个文件simhei.php和simhei.z,制作字体的工作就完成了,删掉simhei.ttf。做多个字体重复上面的工作就可以。所有的字体做完之后,可以把/font/makefont.php文件和/font/makefont文件夹给删除掉。用LINUX服务器的朋友记得把/font文件夹的属性给改回来

  让我们来修改/ex.php文件,或者干脆叫重新编写这个文件:

PHP代码
  1. <?php
  2. require ('chinese.php');
  3.  
  4. $pdf = new PDF_Chinese ();
  5. $pdf -> AddGBFont ('simhei', '黑体');
  6. $pdf -> Open ();
  7. $pdf -> AddPage ();
  8. $pdf -> SetFont ('simhei', '', 20);
  9. $pdf -> Write (10, '我们都是黑体字 by hubing.info');
  10. $pdf -> Output();
  11. ?>

  用浏览器看一下,黑体出来了吧?不过效果似乎不太让人满意,中文没问题,英文间距出问题了,是不是?

ex.jpg

大小: 43.86 K
尺寸:  x 
浏览: 153 次
点击打开新窗口浏览全图

  具体原因在于chinese.php文件里,戒烟如你注意到里面有个变量叫$GB_widths,似乎是定义英文字符宽度的,戒烟如你经过一番调试,把所有英文、字符宽度全部改成了480,于是就有了下面的测试效果:

ex2.jpg

大小: 145.02 K
尺寸:  x 
浏览: 159 次
点击打开新窗口浏览全图

  这就比较满意了!

Tags: fpdf , pdf , php

上一篇: PHP发送SMTP邮件的代码(Part 3)
下一篇: FPDF代码研究(Part 1,类的属性)

相关文章

访客评论

  1. #1 刘辉 2009, April 10, 8:59 PM
    中文一般不需要makefont。内嵌字体不适合中文,太大了。
    默认的字体不用说了。实际上下面的代码就足够了:

    require_once "chinese.php";
    $pdf=new PDF_Chinese();
    $pdf->AddGBhwFont('simhei','黑体');
    $pdf->AddGBhwFont('simsun','宋体');
    $pdf->Open();
    $pdf->AddPage();
    $pdf->SetFont('simhei','',20);
    $pdf->Write(10,'这个是黑体!sahdasj78389hr49fhds89v');
    $pdf->SetFont('simsun','',20);
    $pdf->Write(10,'这个是宋体!!~@$#$%$^%#56754df');
    $pdf->Output('hello.pdf','D');
  2. #2 GPS车载智能终端 2009, May 18, 1:29 PM
    学习了,谢谢 !
    PDF的应用现在也是越来越多了。!
  3. #3 徐永宾 2009, August 24, 4:27 PM
    我照着你的步骤 出问题了。显示的是乱码。
  4. #4 xiaomao101 2009, September 4, 2:24 PM
    那个,被误导了,原来这样做的是内嵌字体啊,本来项目不需要内嵌的,直接用客户端的字体就好了,这样也就方便多了。

    不过还是谢谢了
  5. #5 zhilun 2009, September 19, 9:12 PM
    一两个月前动了一下这个念头,到你搜到你这里,附件不能下,其他地方下载,试了半天。不好用。放弃,今天又没事想起这事。到这能下附件了。结果还是不行,各种折腾。不好使。最后抓狂之际发现别人的一个打包好的。发现能用,结果打开一个事乱码。这个事情启发下,才搞明白原来我的乱码一直是因为netbeans的原因……郁闷死了。换成ultraedit编辑一下。立即ok。希望后来的兄弟不要犯我这样的错误(至少折腾了3小时)
    另外是win7下面的黑体过于庞大,所以可能导致生成php那一步错误。建议用旧版的
  6. #6 郭启军 2009, November 13, 6:54 PM
    我日 这么好的文章不回复 什么文章才回复

    这才是我要找的东东 临表涕零哦 收藏一下
  7. #7 zm945 2009, December 7, 4:40 PM
    请教一下,如何用fpdf生成数字的上下角标,比如 a 的平方
  8. #8 晓麦 2010, January 29, 12:00 AM
    为什么附件下载不下来呢?
  9. #9 furrball 2010, March 1, 11:28 AM
    在FreeBSD下,照着安装黑体无法显示,字型还是宋体
  10. #10 2010, March 20, 4:20 PM
    谢谢你!!!!!!!!!!!!
  11. #11 PKU 2010, July 7, 10:52 AM
    感谢lz,感谢刘辉!!!
  12. #12 lbx 2010, July 8, 2:22 AM
    bz & 刘辉,我服了
  13. #13 Jaley 2010, October 26, 4:23 PM
    字体生成了,也修改了$GB_widths的值,但是英文的字符在不同的阅读器下面间距还是不一样的,请问有什么解决办法没?
  14. #14 涂波 2010, November 18, 10:41 PM
    哥们,帮忙。你的步骤我照做了,可显示出来总是宋体,试了几个都不管用。
    我都折腾一天了。
    顺便说一句,原来我一同事也姓胡,我俩加起来是胡涂。
    为你当个好爸爸高兴。我孩子已经大四了。所以请百忙之中帮帮我。
  15. #15 日正 2011, January 6, 7:04 AM
    在制作字体运行ttf2tp1.exe时候提示
    **** Cannot access map file \'ugbk.map\' ****
    是什么原因呢?
    开始以为是win7的缘故,后来用2003试了,还是一样的问题。
    确认应该不是全半角的问题。

发表评论

评论内容 (必填):