<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT狂人的博客 &#187; pdf</title>
	<atom:link href="http://www.yinzhili.com/tag/pdf/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yinzhili.com</link>
	<description>世界上有10种人:一种是懂二进制的，另一种是不懂的。</description>
	<lastBuildDate>Thu, 22 Jul 2010 03:51:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>使用TCPDF输出完美的中文PDF文档</title>
		<link>http://www.yinzhili.com/2009/08/using-tcpdf-to-generate-pdf-in-chinese.html</link>
		<comments>http://www.yinzhili.com/2009/08/using-tcpdf-to-generate-pdf-in-chinese.html#comments</comments>
		<pubDate>Thu, 20 Aug 2009 10:03:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[DroidSansFallback]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[tcpdf]]></category>

		<guid isPermaLink="false">http://www.yinzhili.com/?p=47</guid>
		<description><![CDATA[TCPDF是一个用于快速生成PDF文件的PHP5函数包。TCPDF基于FPDF进行扩展和改进。支持UTF-8，Unicode，HTML和XHTML。在基于PHP开发的Web应用中，使用它来输出PDF文件是绝佳的选择。但毕竟这款开源软件是外国人开发的，对中文的支持总不是那么尽如人意，因此我们需要对它作[......]<p class='read-more'><a href='http://www.yinzhili.com/2009/08/using-tcpdf-to-generate-pdf-in-chinese.html'>继续阅读</a></p>]]></description>
			<content:encoded><![CDATA[<p>TCPDF是一个用于快速生成PDF文件的PHP5函数包。TCPDF基于FPDF进行扩展和改进。支持UTF-8，Unicode，HTML和XHTML。在基于PHP开发的Web应用中，使用它来输出PDF文件是绝佳的选择。但毕竟这款开源软件是外国人开发的，对中文的支持总不是那么尽如人意，因此我们需要对它作进一步的增强。<br />
首先要下载TCPDF。访问http://www.tcpdf.org ，单击导航条上的&#8221;Download&#8221;链接，即可下载到最新版本的TCPDF压缩包。因为里面包含了范例和字体，因此文件大概有10M左右。下载完后解压它，会得到一个名为tcpdf的目录，此目录的结构大概是这样的：</p>
<div id="attachment_48" class="wp-caption alignnone" style="width: 134px"><img class="size-full wp-image-48" title="图1 TCPDF目录结构图" src="http://www.yinzhili.com/wp-content/uploads/2009/08/1.gif" alt="TCPDF目录结构图" width="124" height="267" /><p class="wp-caption-text">TCPDF目录结构图</p></div>
<p>将此目录移动到Apache的网页根目录下(假设您使用的是Apache，并且使用80端口，如有不同请根据实际情况修改)，打开浏览器，访问 http://localhost/tcpdf/ 应该就可以看到此目录下的文件和文件夹列表。由于TCPDF已经自带了一些范例，因此为了节省时间，我们可以直接对范例进行修改再使用。打开tcpdf目录下的examples目录，下面有50多个范例文件，其中example_038.php就是用来测试东亚字体的(比如简体/繁体中文、日文等等)，打开此文件，找到$pdf-&gt;SetFont 这一行，修改为：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SetFont</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'stsongstdlight'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>这一行代码的作用是设置PDF正文所用的字体及字号。其中&#8221;stsongstdlight&#8221;表示&#8221;STSongStdLight&#8221;字体，这是Adobe Reader的默认简体中文字体，TCPDF中已经内置这个字体的配置文件，我们只需直接调用即可。接下来，将$pdf->Cell那一段修改为:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Cell</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'敏捷的棕毛狐狸跃过那只懒狗。'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'C'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Cell</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'The quick brown fox jumps over the lazy dog.'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'C'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Cell</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'1234567890'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'C'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>保存，然后访问 http://localhost/tcpdf/examples/example_038.php 就可以生成一份PDF文档了:</p>
<div id="attachment_49" class="wp-caption alignnone" style="width: 431px"><img class="size-full wp-image-49" title="图2 使用默认中文字体生成的PDF文件" src="http://www.yinzhili.com/wp-content/uploads/2009/08/2.gif" alt="使用默认中文字体生成的PDF文件" width="421" height="112" /><p class="wp-caption-text">使用默认中文字体生成的PDF文件</p></div>
<p>这种方式生成的PDF文件的优点是：文件体积小，生成快速。但也有缺点是，没有嵌入中文字体，只限于安装了Adobe Reader之后才能正常显示。那万一用户使用的是FoxIt Reader或者是Linux操作系统呢？显示效果就不一样了。因此，为了保证生成的PDF文件在任何环境下都有同样的显示效果，嵌入字体是必需的。<br />
Windows下有很多中文字体，但是我们要用在TCPDF中的中文字体有下面几个要求：</p>
<ul>
<li>支持Unicode，因为TCPDF支持的是Unicode;</li>
<li>体积越小越好;</li>
<li>最好是也支持繁体中文;</li>
</ul>
<p>这样看来，微软雅黑以及方正的一些字体都符合要求。但是他们都是商业字体，而且个头都不小，以微软雅黑为例，msyh.ttf 文件就超过10M，如果使用它，生成的PDF文件体积也会很大。<br />
综合考虑，我觉得&#8221;Droid Sans Fallback&#8221;字体符合要求：</p>
<ul>
<li>首先它是免费字体;</li>
<li>其次它也是Unicode编码，支持简体繁体中文以及日文韩文等等;</li>
<li>然后它的体积很小，不超过5M。 </li>
</ul>
<p>然而TCPDF不支持TTF字体文件，因此我们先将它转换成TCPDF支持的格式，然后再使用。在TCPDF目录下有个fonts子目录，这个子目录下又有个utils，这里面带有一个字体转换工具ttf2ufm.exe。下面是转换的步骤：<br />
在网上很容易找到Droid Sans Fallback字体的下载链接，因此在这里就没有必要多做描述了。我们把下载到的 DroidSansFallback.ttf 复制到 TCPDF\fonts\utils 下面，然后打开Windows的命令行，切换到此路径下，输入如下命令：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">D<span style="color: #339933;">:</span>\www\tcpdf\fonts\utils<span style="color: #339933;">&gt;</span>ttf2ufm <span style="color: #339933;">-</span>a <span style="color: #339933;">-</span>F DroidSansFallback<span style="color: #339933;">.</span>ttf</pre></div></div>

<p>等待一段时间，等到命令行窗口显示</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #0000ff;">&quot;Finished - font files created&quot;</span></pre></div></div>

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

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #0000ff;">&quot;C:\Program Files\WAMP\PHP5\php.exe&quot;</span> <span style="color: #339933;">-</span>q makefont<span style="color: #339933;">.</span>php DroidSansFallback<span style="color: #339933;">.</span>ttf DroidSansFallback<span style="color: #339933;">.</span>ufm</pre></div></div>

<p>说明：这里的&#8221;C:\Program Files\WAMP\PHP5\php.exe&#8221;为php.exe文件所在的路径，请根据实际情况输入。回车运行之后，稍等片刻，命令行窗口中会提示</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">Font definition <span style="color: #990000;">file</span> generated</pre></div></div>

<p>至此大功告成。将生成的droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文件复制到 TCPDF\fonts 下面即可。<br />
打开example_038.php文件，将</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SetFont</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'stsongstdlight'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>修改为</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SetFont</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'droidsansfallback'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>这样就能够调用我们刚才生成的字体，再访问 http://localhost/tcpdf/examples/example_038.php 就可以看到重新生成的PDF文档。</p>
<div id="attachment_50" class="wp-caption alignnone" style="width: 489px"><img class="size-full wp-image-50" title="图3 嵌入DroidSansFallback字体后的PDF文档" src="http://www.yinzhili.com/wp-content/uploads/2009/08/3.gif" alt="嵌入DroidSansFallback字体后的PDF文档" width="479" height="105" /><p class="wp-caption-text">嵌入DroidSansFallback字体后的PDF文档</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.yinzhili.com/2009/08/using-tcpdf-to-generate-pdf-in-chinese.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
