windows 2003 上配置 vpn + nat共享上网

用VPN+NAT再结合路由可以实现很方便的代理功能,适用于有一台能方便连接Internet的电脑,其他不在同一子网内的电脑能够连接到这台机器但不能完全访问Internet。比如好些学校的校园网,访问国外资源需要付流量费,此时可以找一台能够“出国”的服务器并采用此方案。

Windows 2003作为代理服务器时的配置方法如下:
1.关闭防火墙,用“管理工具”中的“服务”将“Windows Firewall/Internet Connection Sharing (ICS)”设置为“禁止”状态,否则没法启用路由和远程访问。
2.打开“管理工具”中的“路由和远程访问”配置界面,选中“路由和远程访问”节点下的“XX(本地)”(如果没有,则需要用“添加服务器”创建一个),用“操作”菜单下的“配置并启动路由和远程访问”,打开安装向导。
通常情况下只有一块网卡(否则就不需要VPN了),选择“自定义配置”并继续,选中“VPN访问”和”NAT和基本防火墙”并继续,完成安装向导。
3.会弹出对话框说已经完成安装,询问是否启动服务,选择“是”。
4.可选步骤:选中“XX(本地)”,点右键打开“属性”对话框,在“IP”标签下的“IP地址指派”中选中“静态地址池”,并添加用于VPN连接的私有地址范围,比如10.1.0.1-32。
5.打开“管理工具”中的“计算机管理”,选中“系统工具”->“本地用户和”->“用户”,双击允许进行VPN连接的用户,在用户属性的对话框中选择“拨入”标签,选中“远程访问权限(拨入或 VPN)”下的允许访问。
6.此时VPN功能已经配置好了,后面将讲述如何建立VPN连接。
选中“XX(本地)”->“IP路由选择”->“NAT/基本防火墙”,点击右键并“新增接口”,选择用来连接外部网络的接口,通常是“本地连接”,在弹出的对话框中选择“公共接口连接到Internet”,并选上“在此接口上启用NAT”,确定。(千万不要把本地再加上接口,否则上不了,原理我不太清楚,达人指教!)
此时已经完成了NAT的配置。

客户端的配置,以Windows XP为例:

1.创建VPN连接:在“网上邻居”的“属性”界面,打开“新建连接向导”,选择“连接到我的工作场所的网络”,再选择“虚拟专用网络连接”(既VPN),随便输入一个名字作为公司名(比如VPN,它是作为VPN连接的名字),如果之前有其它的拨号连接根据情况选择是否自动拨入,输入上面配置了VPN服务的服务器地址,完成向导。
2.双击刚创建的VPN连接,在连接对话框中输入刚才配置的有拨入权限的用户名和密码,并连接。可能某些协议在VPN上不支持,会弹出警告对话框,“接受”即可。
到此为止,已经可以用Windows 2003作为代理来上网了,赶紧打开浏览器畅游Internet吧:-)

APACHE负载过高自动重启的办法

抽时间找了一个centos/linux负载过高自动重启apache的脚本,保护你的vps不因超负荷被关闭。稍微改了点,适合所有可以通过service httpd start | stop 来重启apache的vps或服务器。最后别忘记在crontab设置每隔几分钟执行一次即可。

一行命令自动安装,安装成功后请看 crontab -l :

wget http://www.ctohome.com/linux-vps-pack/restart_apache_by_load.sh;sh restart_apache_by_load.sh;

TOP_SYS_LOAD_NUM表示到达这个负载的时候,就会停止apache。然后过段时间负载降下来后,再尝试启动apache

#!/bin/sh

# crontab usage: */3 * * * * /backup/www.ctohome.com/loadavg_restart_apache.sh >> /backup/www.ctohome.com/restart_apache.log

TOP_SYS_LOAD_NUM=5
SYS_LOAD_NUM=`uptime | awk ‘{print $(NF-2)}’ | sed ‘s/,//’`

echo $(date +”%y-%m-%d”) `uptime`
if [ `echo “$TOP_SYS_LOAD_NUM < $SYS_LOAD_NUM"|bc` -eq 1 ] then echo "#0#" $(date +"%y-%m-%d %H:%M:%S") "pkill httpd" `ps -ef | grep httpd | wc -l` /usr/sbin/apachectl stop sleep 8 pkill httpd sleep 8 for i in 1 2 3 do if [ `pgrep httpd | wc -l` -le 0 ] then /usr/sbin/apachectl start sleep 30 echo "#1#" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l` fi done else if [ `pgrep httpd | wc -l` -le 0 ] then /usr/sbin/apachectl start sleep 30 echo "#2#" $(date +"%y-%m-%d %H:%M:%S") "start httpd" `ps -ef | grep httpd | wc -l` fi fi 没有什么坏处,至少还可以监控系统的历史负载。下面的是某个vps设置了最大负载3的重启apache情况,效果不错: tail -f restart_apache.log 10-07-17 13:57:01 up 14:53, 2 users, load average: 0.34, 1.09, 1.14 10-07-17 14:00:01 up 14:56, 2 users, load average: 0.97, 1.06, 1.11 10-07-17 14:03:01 up 14:59, 2 users, load average: 1.38, 1.26, 1.18 10-07-17 14:06:01 up 15:02, 2 users, load average: 0.63, 0.92, 1.06 10-07-17 14:09:01 up 15:05, 2 users, load average: 0.98, 0.81, 0.98 10-07-17 14:12:01 up 15:08, 2 users, load average: 0.55, 0.71, 0.90 10-07-17 14:15:01 up 15:11, 2 users, load average: 0.46, 0.59, 0.81 10-07-17 14:18:02 up 15:14, 2 users, load average: 3.06, 1.30, 1.01 #0# 10-07-17 14:18:02 pkill httpd 38 #1# 10-07-17 14:18:51 start httpd 34 10-07-17 14:21:01 up 15:17, 2 users, load average: 1.14, 1.59, 1.20 10-07-17 14:24:01 up 15:20, 2 users, load average: 1.19, 1.45, 1.21 10-07-17 14:27:01 up 15:23, 2 users, load average: 0.29, 0.95, 1.05 10-07-17 14:30:01 up 15:26, 2 users, load average: 0.99, 0.85, 0.98 10-07-17 14:33:01 up 15:29, 2 users, load average: 1.15, 1.22, 1.12 10-07-17 14:36:01 up 15:32, 2 users, load average: 4.58, 2.94, 1.78 #0# 10-07-17 14:36:01 pkill httpd 36 #1# 10-07-17 14:36:49 start httpd 27 10-07-17 14:39:01 up 15:35, 2 users, load average: 2.24, 2.49, 1.79 10-07-17 14:42:01 up 15:38, 2 users, load average: 1.37, 1.87, 1.66 10-07-17 14:45:01 up 15:41, 2 users, load average: 0.69, 1.44, 1.54 10-07-17 14:48:01 up 15:44, 2 users, load average: 1.73, 1.68, 1.62 10-07-17 14:51:01 up 15:47, 2 users, load average: 0.81, 1.34, 1.49 10-07-17 14:54:01 up 15:50, 2 users, load average: 1.71, 1.25, 1.41 10-07-17 14:57:01 up 15:53, 2 users, load average: 1.93, 1.52, 1.47 10-07-17 15:00:01 up 15:56, 2 users, load average: 1.29, 1.43, 1.44 10-07-17 15:03:01 up 15:59, 2 users, load average: 1.45, 1.42, 1.43 10-07-17 15:06:01 up 16:02, 2 users, load average: 0.73, 1.24, 1.36 10-07-17 15:09:01 up 16:05, 2 users, load average: 1.66, 1.55, 1.47 10-07-17 15:12:03 up 16:08, 2 users, load average: 3.59, 2.02, 1.63 #0# 10-07-17 15:12:07 pkill httpd 35 #1# 10-07-17 15:12:55 start httpd 28 10-07-17 15:15:01 up 16:11, 2 users, load average: 1.19, 1.78, 1.63 10-07-17 15:18:01 up 16:14, 2 users, load average: 1.38, 1.60, 1.58 10-07-17 15:21:01 up 16:17, 2 users, load average: 3.32, 2.20, 1.79 #0# 10-07-17 15:21:01 pkill httpd 33 #1# 10-07-17 15:21:50 start httpd 33 10-07-17 15:24:01 up 16:20, 2 users, load average: 1.18, 1.66, 1.64 10-07-17 15:27:01 up 16:23, 2 users, load average: 1.67, 1.73, 1.67 10-07-17 15:30:01 up 16:26, 2 users, load average: 1.15, 1.55, 1.60 10-07-17 15:33:01 up 16:29, 2 users, load average: 0.85, 1.30, 1.49 10-07-17 15:36:01 up 16:32, 2 users, load average: 0.30, 0.89, 1.30 10-07-17 15:39:01 up 16:35, 2 users, load average: 0.37, 0.90, 1.25 脚本执行如果报错 /backup/www.cthome.com/loadavg_restart_apache.sh: line 6: bc: command not found /backup/www.cthome.com/loadavg_restart_apache.sh: line 6: [: -eq: unary operator expected 表示没有bc命令,centos可以用 yum -y install bc 安装它

200 0 64 |200 0 0 |304 0 0| 404 0 0百度蜘蛛在日志中的返回代码

打开日志文件,如:
2010-02-09 00:52:03 W3SVC1 2**.**.1**.7* GET /***/index.html – 80 – 220.181.7.43 Baiduspider+(+baidu/search/spider.htm) 200 0 0

在这个访问记录里面,2**.**.1**.25* 为你服务器的IP地址,220.181.7.43是百度蜘蛛的IP,/***/index.html 为你蜘蛛访问你的页面 80是端口 GET是打开方式 W3SVC1是记录的文件夹,这里说明,百度蜘蛛已经访问了你的index.html这个页面,那么最重要的是最后面的这个参数200 0 0。
下面我给大家一一分析下。

1:200 0 0 200成功访问该页面,0代表抓取成功并带回数据库。这个时候你就放心了,这个页面已经被百度收录,但是还没有释放出来,在这个期间,百度会对这个页面进行一系列的计算,比如:词频、镜像、链接、等等,塞你的这个页面属于采集页面,那么你很难看到他释放你这个页面,通常是:直接删除不释放、或者释放后没有排名。

2:200 0 64这里大家又要奇怪了,出现了这个带64的返回码,其实也属于正常,但是这个64被人说的很神秘,由于很多网站在出现64的返回码后被K或者降权,所以,有人称之为百度K占的前兆,但是我并不这么认为,64的出现不代表百度要K你,但是64的大量出现确实会带来很大的问题,下面看看我的理解。网络上流传着这么几种解释第一:64为K站的前兆。第二64的出现只是64位操作系统。第三:网络不可达对于我来说比较认可第三种说法,网络不可达,由于某种原因无法完全打开页面,或者网络不稳定这些原因,导致蜘蛛无法带回页面或者说不抓取该页面,200 0 64的解释也应该为:访问了该页面,但并没有任何抓取也没有带回数据库。这种原因多为空间不稳定、服务器不稳定,或者服务器配置错误引起的,还有一点必须说明,在好的空间也会有64的返回码,所以这个不要担心,但是为什么又有人说,我的网站出现了很多64后又被K了或者降权了呢?其实很简单,塞你的日志中大量的出现了64,就说明某种原因导致蜘蛛一直无法抓取页面,这样,你检查下空间的稳定性和服务器的配置是否有问题,空间长期不稳定和配置出现问题在大多数情况下是会被降权的。这就是为什么第一种说法没有依据的地方,也是我不赞同的地方。那么第二种说法,64位操作系统。有人这么解释:sc-win32- status,在你日志的头部,有这么句话,说明是32位系统,如蜘蛛访问是使用64位系统则显示为:200 0 64,这个观点我不认可,我做过这样的一个测试,朋友的一个网站,首页打开总的很慢,一般十几秒才可以打开,在检测友情链接的时候经常是显示该网站无法打开,于是为了证实这个网络不可达的猜测,我问他要了两个月的日志进行分析,分析结果为:首页访问记录,在白天的时候返回码70%都为64,晚上的时候返回大部分都是200 0 0,而且蜘蛛的爬行时间也有了明显的改变,访问这个网站的时候,大多都是在晚上,白天的次数逐渐的减少。

3:304 0 0这个返回码代表蜘蛛访问的页面没有更新,和他之前来的时候是一样的,所以看到这个不要担心,蜘蛛来过,只不过你没有更新,所以他也不愿意带走这个页面。

4:404 0 0这个是代表404页面,但是有个很严重的问题,这个返回码告诉我们,蜘蛛来到了404页面并把他带走了,崩溃~~~~,如是这样的话基本上你要倒霉了,如你有太多的404,那么蜘蛛就会不断是抓取,不断的带走,这样会造成无数的重复页面,最终导致K站或者降权,正确的返回码是404 0 64 这就代表蜘蛛没有抓取你这个页面。

5:500错误500错误是服务器内部错误,是由程序的错误造成的,500错误是会给你减分的,这点基本的逻辑都可以想的到,如发现500错误,马上查看是哪个页面的,然后去修正以下错误吧!

6:302如在日志中发现302的返回码也是需要注意的,302为临时重定向,如你是长期的将这个页面重定向到另一个页面,麻烦你使用301永久重定向,如是302的话百度蜘蛛下次来还会访问这个页面,这样又会造成复制大量页面的问题,结果肯定是K,所以,抽空检查以下。

使用UnixBench测试你的VPS

UnixBench是一款不错的Linux下的VPS性能测试软件,很多网站上对VPS都评测都采用这款软件,几乎是最基本的VPS测试。下面将说说如何使用UnixBench来测试你的VPS。

UnixBench 4.10 下载地址:http://soft.vpser.net/test/unixbench/unixbench-4.1.0-wht.tar.gz

下面是通过ssh安装和使用UnixBench来做测试。

[root@sayhosts ~]# wget http://soft.vpser.net/test/unixbench/unixbench-4.1.0-wht.tar.gz

[root@sayhosts ~]# tar xzf unixbench-4.1.0-wht.tar.gz

[root@sayhosts ~]# ls

unixbench-4.1.0-wht-2 unixbench-4.1.0-wht.tar.gz

[root@sayhosts ~]# cd unixbench-4.1.0-wht-2/

[root@sayhosts unixbench-4.1.0-wht-2]# make

如果出现下面错误
make: gcc: Command not found
make: *** [pgms/arithoh] Error 127

出现下面错误可能是由于没有安装gcc,所以运行下面命令安装下gcc就可以了。

[root@sayhosts unixbench-4.1.0-wht-2]# yum install make gcc

如果遇到 Error: Please install /usr/bin/time. 错误提示

centos/fedora 下运行

[root@sayhosts unixbench-4.1.0-wht-2]# yum install time

ubuntu/debian 下运行

[root@sayhosts unixbench-4.1.0-wht-2]# apt-get install time

最后运行

[root@sayhosts unixbench-4.1.0-wht-2]# ./Run

运行之后得到类似下面的结果就是你的VPS的分数:

INDEX VALUES
TEST BASELINE RESULT INDEX

Dhrystone 2 using register variables 376783.7 5063737.2 134.4
Double-Precision Whetstone 83.1 1045.1 125.8
Execl Throughput 188.3 3231.7 171.6
File Copy 1024 bufsize 2000 maxblocks 2672.0 75573.0 282.8
File Copy 256 bufsize 500 maxblocks 1077.0 23308.0 216.4
File Read 4096 bufsize 8000 maxblocks 15382.0 575528.0 374.2
Pipe-based Context Switching 15448.6 198749.2 128.7
Pipe Throughput 111814.6 623218.2 55.7
Process Creation 569.3 9493.6 166.8
Shell Scripts (8 concurrent) 44.8 468.7 104.6
System Call Overhead 114433.5 506205.8 44.2
=========
FINAL SCORE 138.8

如何屏蔽优酷广告

最近看优酷的视频,有时视频本身只有5秒钟,TMD被广告QJ了30多秒,甚是不爽,今日觅得此等良法,与大家共享。

一、打开 C:\Windows\System32\drivers\etc 这个文件夹,里面有一个文件名为“hosts”的文件,无扩展名,右键——打开,用记事本打开它。

二、打开后,在文本最后,空一行,添加以下内容:

127.0.0.1 atm.youku.com

127.0.0.1 Fvid.atm.youku.com

127.0.0.1 html.atm.youku.com

127.0.0.1 valb.atm.youku.com

127.0.0.1 valf.atm.youku.com

127.0.0.1 valo.atm.youku.com

127.0.0.1 valp.atm.youku.com

127.0.0.1 lstat.youku.com

127.0.0.1 speed.lstat.youku.com

127.0.0.1 urchin.lstat.youku.com

127.0.0.1 stat.youku.com

127.0.0.1 static.lstat.youku.com

127.0.0.1 valc.atm.youku.com

127.0.0.1 vid.atm.youku.com

127.0.0.1 walp.atm.youku.com

保存,就OK了。

从此就不会有广告骚扰你了。。

如果好用的话。记得留言、

还有其他的代码

#奇艺
127.0.0.1 afp.qiyi.com
127.0.0.1 focunbaiduafp.allyes.com
#CNTV
127.0.0.1 a.cctv.com
127.0.0.1 a.cntv.cn
127.0.0.1 ad.cctv.com
127.0.0.1 d.cntv.cn
127.0.0.1 adguanggao.eee114.com
127.0.0.1 cctv.adsunion.com
#新浪视频
127.0.0.1 dcads.sina.com.cn
#pptv
127.0.0.1 pp2.pptv.com
#乐视
127.0.0.1 pro.letv.com

#搜狐高清

#www.iqshw.com
127.0.0.1 images.sohu.com
@HostsX 国内站点广告/视频类网站
#CNTV
127.0.0.1 a.cctv.com
127.0.0.1 a.cntv.cn
127.0.0.1 ad.cctv.com
127.0.0.1 d.cntv.cn
127.0.0.1 adguanggao.eee114.com
127.0.0.1 cctv.adsunion.com
#我乐网
127.0.0.1 acs.56.com
127.0.0.1 acs.agent.56.com
127.0.0.1 acs.agent.v-56.com
127.0.0.1 bill.agent.56.com
127.0.0.1 bill.agent.v-56.com
127.0.0.1 stat.56.com
127.0.0.1 stat2.corp.56.com
127.0.0.1 union.56.com
127.0.0.1 uvimage.56.com
127.0.0.1 v16.56.com
#6间房
127.0.0.1 pole.6rooms.com
127.0.0.1 shrek.6.cn
127.0.0.1 simba.6.cn
127.0.0.1 union.6.cn
#土豆网
127.0.0.1 adextensioncontrol.tudou.com
127.0.0.1 iwstat.tudou.com
127.0.0.1 nstat.tudou.com
127.0.0.1 stats.tudou.com
127.0.0.1 *.p2v.tudou.com*
127.0.0.1 at-img1.tdimg.com
127.0.0.1 at-img2.tdimg.com
127.0.0.1 at-img3.tdimg.com
127.0.0.1 adplay.tudou.com
127.0.0.1 adcontrol.tudou.com
127.0.0.1 stat.tudou.com
#酷6网
127.0.0.1 1.allyes.com.cn
127.0.0.1 analytics.ku6.com
127.0.0.1 gug.ku6cdn.com
127.0.0.1 ku6.allyes.com
127.0.0.1 ku6afp.allyes.com
127.0.0.1 pq.stat.ku6.com
127.0.0.1 st.vq.ku6.cn
127.0.0.1 stat0.888.ku6.com
127.0.0.1 stat1.888.ku6.com
127.0.0.1 stat2.888.ku6.com
127.0.0.1 stat3.888.ku6.com
127.0.0.1 static.ku6.com
127.0.0.1 v0.stat.ku6.com
127.0.0.1 v1.stat.ku6.com
127.0.0.1 v2.stat.ku6.com
127.0.0.1 v3.stat.ku6.com
#激动网
127.0.0.1 86file.megajoy.com
127.0.0.1 86get.joy.cn
127.0.0.1 86log.joy.cn
#天线视频
127.0.0.1 casting.openv.com
127.0.0.1 m.openv.tv
127.0.0.1 uniclick.openv.com
#迅雷看看屏蔽:
127.0.0.1 mcfg.sandai.net
127.0.0.1 biz5.sandai.net
127.0.0.1 server1.adpolestar.net
127.0.0.1 advstat.xunlei.com
127.0.0.1 mpv.sandai.net

删除无用网卡信息

通过注册表删除多余网卡本地连接的方法这篇文章的内容如下: 在网卡出了问题并重新安装了网卡驱动程序后,系统将会自动创建连接,而且这个连接将会由原来的“本地连接”变成“本地连接2”。而“本地连接”的相关信息仍然存在于系统中。当你在“本地连接2”中设置IP等相关信息时,如果这些参数与以前的“本地连接”中设置的相同,系统将会提示被其它网卡占用的信息,此时你可以手工将以前的连接信息删除,将“本地连接2”转换成“本地连接”,问题即可解决,方法如下:打开注册表编辑器,展开到“HKEY_LOCAL_MCHINESYSTEMCurrentControlSetControl Network{4D36E972-E325-11CE-BFC1-08002BE10318}”,
  在该子键下面保存着关于本地连接的信息。在此有一个或多个子键,其中第一个子键对应着“本地连接”,第二个子键就对应着“本地连接2”依此类推,你也可以展开该子键,再选择下面的“Connection”子键,在右侧窗口中将会看到具体是对应着哪个连接,直接将对应以前旧连接的整个子键删除即可。

WHMCS From Latin1 To UTF8

The database was in latin1 sweedish colation and this had some side effects with the Greek characters.

FIRST THING: GO TO PHPMYADMIN AND EXPORT DATABASE TO HAVE A BACKUP!

Then I went to administration, utilities, database status, download backup.

This makes a good backup with proper encoding inside. (for me this was the right version and not the one created with phpmyadmin)

I opened the .sql file with Notepad++ and I replaced latin1 with utf8 in all the document. Save.

Then I went to phpmyadmin and i checked all tables and then selected the action drop. I confirmed dropping the tables, and then I went to import.

I imported the new sql file I created with Notepad and then I checked the database structure, tables structure and browsed some of the data. Everything appeared perfect!

Loaded a sample page of WHCS but all the Greek characters were corrupted and looked like ?????. After some research I added this line in configuration.php

mysql_charset=”utf8″;

Now everything worked perfect! I checked the database again and I made sure that the database collation was utf8_general_ci (if it isn’t go to operations and change collation).

I’m a happy Greek user of WHMCS now!

使用TCPDF输出完美的中文PDF文档

<转自: 可以任意转载, 转载时请务必以超链接形式标明文章原始出处及此声明 本文地址: http://www.yinzhili.com/2009/08/using-tcpdf-to-generate-pdf-in-chinese.html />

[转者注:我使用joomshoping 3.0.0(for joomla1.6),按本文方法,不嵌入字体成功。但生成三种字体并拷贝到font文件夹,修改应用文件后,不行。顺便说一句,希望高手指点。我不知道我哪里错了?使用TCPDF输出完美的中文PDF文档]

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

使用TCPDF输出完美的中文PDF文档TCPDF目录结构图

将此目录移动到Apache的网页根目录下(假设您使用的是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->Cell那一段修改为:

$pdf->Cell(0, 10, ‘敏捷的棕毛狐狸跃过那只懒狗。’, ”,1, 1, ‘C’);
$pdf->Cell(0, 10, ‘The quick brown fox jumps over the lazy dog.’, ”,1, 1, ‘C’);
$pdf->Cell(0, 10, ‘1234567890’, ”,1, 1, ‘C’);

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

使用TCPDF输出完美的中文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 下面即可。
打开example_038.php文件,将

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

修改为

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

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

使用TCPDF输出完美的中文PDF文档

嵌入DroidSansFallback字体后的PDF文档