FPDF中文应用攻略

转载自:http://www.cnblogs.com/zcy_soft/archive/2010/11/23/1885067.html

曾经写过一个关于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. $pdf = new PDF_Chinese ();
  4. $pdf -> AddGBFont (‘simhei‘, ‘黑体‘);
  5. $pdf -> Open ();
  6. $pdf -> AddPage ();
  7. $pdf -> SetFont (‘simhei‘, ‘‘, 20);
  8. $pdf -> Write (10, ‘我们都是黑体字 by hubing.info‘);
  9. $pdf -> Output();
  10. ?>

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

(图片无)

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

(图片无)

  这就比较满意了!

以上转载自:http://www.cnblogs.com/zcy_soft/archive/2010/11/23/1885067.html

关于资源:上文中的资源连接失效了。

FPDF可以在fpdf官网找:

(1)http://www.fpdf.org

(2)Chinese Suport:http://www.fpdf.org/phorum/read.php?f=1&i=5142&t=5142

又或者,我将找到的fpdf包以及繁体中文使用手册、TTF2TP1、TTF2TP1中文包等放在了百度云盘中:http://pan.baidu.com/s/1o6J1SGM

我自己实践情况:

需求:打印的内容有中文、数字、字母

问题1:引用了 chinese.php 之后,还是中文乱码

解决1:使用 string iconv ( string $in_charset , string $out_charset , string $str )

例子1(没有使用新的字体,直接使用了chinese.php中 GB 字体):

 1 <?php
 2     require (‘chinese.php‘);
 3
 4     $pdf = new PDF_Chinese ();
 5     $pdf -> AddGBFont ();
 6     $pdf -> AddPage ();
 7     $pdf -> SetFont (‘GB‘, ‘‘, 20);
 8     $pdf -> Write (10, ‘我们是中文1233 by hubing.info‘);
 9     $pdf -> Output();
10 ?>

问题2:例子1的代码是正常了的,但是我在其他地方引用时遇到了数字、字母始终是全角的形式,间距特别大,按照原文修改$GB_widths也不行。

网上找了好久找不到原因,后来自己再一点点去看,发现是由于chinese.php中,使用它自己的 $GB_widths 时当作了超全局变量处理。

在例子1中,$GB_widths自然是超全局变量,但我引入chinese.php的地方是在一个类中的一个方法,$GB_widths不再是超全局。

解决2:此处,我偷了个懒,没有更深入,在chinese.php中最开始定义 $GB_widths = ... 改成 $GLOBALS[‘GB_widths‘] = ... 。

此外,字母、数字的间距还是不合适的话,可以按照原文中修改 $GB_widths 中的数值。

时间: 2024-10-28 16:18:03

FPDF中文应用攻略的相关文章

Python中文全攻略

Python中文全攻略[转] 这几天一直纠结月python的中文编码问题,发现一篇不错的文章,转过来留个念想. 原文链接:http://blog.csdn.net/mayflowers/archive/2007/04/18/1568852.aspx 1.        在Python中使用中文 在Python中有两种默认的字符串:str和unicode.在Python中一定要注意区分“Unicode字符串”和“unicode对象”的区别.后面所有的“unicode字符串”指的都是python里的

python 之中文全攻略

1.        在Python中使用中文 在Python中有两种默认的字符串:str和unicode.在Python中一定要注意区分"Unicode字符串"和"unicode对象"的区别.后面所有的"unicode字符串"指的都是python里的"unicode对象". 事实上在Python中并没有"Unicode字符串"这样的东西,只有"unicode"对象.一个传统意义上的uni

Wargame narnia level 4 (中文攻略)

ssh [email protected] 然后输入密码:XXOO cat narnia4.c #include <string.h> #include <stdlib.h> #include <stdio.h> #include <ctype.h> extern char **environ; int main(int argc,char **argv){ int i; char buffer[256]; for(i = 0; environ[i] !=

Wargame narnia level 2 (中文攻略)

前面省略连接部分-- cat narnia2.c #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char * argv[]){ char buf[128]; if(argc == 1){ printf("Usage: %s argument\n", argv[0]); exit(1); } strcpy(buf,argv[1]); print

弹丸论破2 中文攻略

最近在推这个游戏,于是转一篇自己看着比较顺眼的攻略= = -------------------------------------------------------------------------- 转载请注明作者和出处 [email protected]洛天之痕 写在前面: 虽然弹丸2感觉还是自己打通的比较有成就感啦,但苦逼的撸主在打完一周目后发现还有那么多CG和隐藏熊币没拿确实很蛋疼(残缺的男人无幸福啊,我的福利),所以为了广大同胞们第一次玩的幸福点(撸主第一个反论钻研了半个多小时.

Wargame narnia level 3 (中文攻略)

ssh [email protected] 密码:OOXX(上一关拿到的密码) cat narnia3.c #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int main(int arg

Wargame narnia level 0 (中文攻略)

想写这个主要是因为我去谷歌搜到的攻略都是英文,看着有点吃力(菜B英语不好) , 然后就是分享交流技术. 比较有意思的一个闯关游戏(适合新手) 网站是:http://overthewire.org/wargames/narnia/ 游戏主要涉及基础的漏洞利用(环境是LINUX下的) 下面就开始吧, LINUX系统中 用SSH命令   登陆远程服务器 第0关的账号和密码都是narnia0 登陆后,需要我们利用的漏洞程序在 narnia这个文件夹里 服务器里把文件权限卡得很死,如果没有权限是不能执行一

活水渠 - 云影院之云时代看片全攻略

本文讨论了大数据时代最热门的两大应用之一的云计算(另一应用是物联网)对网络视频观看体验的具体影响,以及在观看方式上区别于传统下载方式的优点. 一.视频门户类网站 此类网站以优酷.乐视等为代表,主营传统网络视频业务,使用浏览器进行直接点击链接进行观看. 优点:电视节目丰富.观看技术手段简单.大型网站服务器稳定 缺点:看不了热门电影,精华视频要收费,免费用户要看广告 解决:浏览器辅助工具或插件解决收费和广告问题,在此基础上还诞生了视频门户网 站的入口集成网站,每天看云帆可免VIP直接观看主流视频门户

拿nodejs快速搭建简单Oauth认证和restful API server攻略

拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最近一直在鼓捣这个东西,拿出来分享下一下经验吧,其实很简单,一点也不难. 首先需求是这样,给自己的网站要增加API服务,API分为两种,公共的和私有授权的,授权的使用Oauth方法认证身份,API格式均为JOSN和JSONP. 嗯,别的语言我也没怎么学过,首先是找合适的框架进行实现吧.本身网站使用的e