<?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>LiangXu Wang &#187; zend</title>
	<atom:link href="http://wlx.westgis.ac.cn/tag/zend/feed/" rel="self" type="application/rss+xml" />
	<link>http://wlx.westgis.ac.cn</link>
	<description>research of gis, rs, opensource.</description>
	<lastBuildDate>Wed, 28 Jul 2010 17:08:40 +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>用PHP处理中文PDF</title>
		<link>http://wlx.westgis.ac.cn/556/</link>
		<comments>http://wlx.westgis.ac.cn/556/#comments</comments>
		<pubDate>Sat, 20 Dec 2008 11:58:40 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[fpdf]]></category>
		<category><![CDATA[fpdi]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[中文]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/?p=556</guid>
		<description><![CDATA[因项目需要，现在想在服务器端动态生成PDF文件，已一个PDF为模板，然后把所需的数据动态填入。
本来在使用zend framework，因此很直接的就使用zend_pdf类来进行测试，代码实现如下：
			$pdf = Zend_Pdf::load($this-&#62;view-&#62;config-&#62;offline-&#62;template);
			$pdf-&#62;pages = array_reverse($pdf-&#62;pages);
			$style = new Zend_Pdf_Style();
			$font = Zend_Pdf_Font::fontWithPath($this-&#62;view-&#62;config-&#62;offline-&#62;font, ( Zend_Pdf_Font::EMBED_DONT_SUBSET));
			$pdf-&#62;pages[0]-&#62;setFont($font, 10);
			$pdf-&#62;pages[0]-&#62;saveGS();
			//datalist
			$pdf-&#62;pages[0]-&#62;drawText(str_replace(";","\n",$datalist), 100, 570,"UTF-8");
			//project
			$pdf-&#62;pages[0]-&#62;drawText($formData['project'], 100, 430,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($formData['realname'], 100, 78,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($formData['realname'], 130, 590,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($formData['unit'], 95, 58,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($formData['address'], 285, 58,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($formData['postcode'], 470, 58,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($formData['email'], 95, 40,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($formData['phone'], 295, 40,"UTF-8");
			$t=getdate();
			$pdf-&#62;pages[0]-&#62;drawText($t['year'], 465, 40,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($t['mon'], 500, 40,"UTF-8");
			$pdf-&#62;pages[0]-&#62;drawText($t['mday'], 525, 40,"UTF-8");
			$pdf-&#62;pages[0]-&#62;restoreGS();
			$fn=$formData['realname'].date('YmdHis').".pdf";
			$pdf-&#62;save($this-&#62;view-&#62;config-&#62;offline-&#62;savepath."/".$fn);
这样，的确能完成要求，但是令人恼火的是，其把中文字体内嵌到PDF文件中去，因此导致PDF文件过大，而且导致PHP所需内存也增大（64M）。
因此，就开始尝试别的办法，开始锁定fpdf，PHP能完美支持，而且也能支持中文（所要单独下载chinese.php和chinese-unicode.php）。
但是，FPDF不支持打开已有的PDF文件作为模板，因此还需要使用fpdi进行模板的支持，还要修改fpdi，使其父类为PDF-UNICODE。
然后就可以这样使用：
		$pagecount = $this-&#62;setSourceFile($this-&#62;template);
		$tplidx = $this-&#62;importPage(1, '/MediaBox');
		$this-&#62;addPage();
		$this-&#62;useTemplate($tplidx);
		$this-&#62;AddUniGBhwFont('ugb','AdobeSongStd-Light-Acro');
		$this-&#62;SetFont('ugb','',$this-&#62;fontsize);
		$this-&#62;setXY(45,65);
		$this-&#62;Write($this-&#62;fontsize,$this-&#62;data['realname']);
其中，字形由默认的AdobeSongStd-Light改成AdobeSongStd-Light-Acro，是为了防止英文字体变宽和变窄，格式才会整齐，英文字不会挤在一起。(参考： http://bbs.erp100.com/thread-18424-1-1.html)
]]></description>
			<content:encoded><![CDATA[<p>因项目需要，现在想在服务器端动态生成PDF文件，已一个PDF为模板，然后把所需的数据动态填入。<br />
本来在使用zend framework，因此很直接的就使用zend_pdf类来进行测试，代码实现如下：</p>
<blockquote><p><code >			$pdf = Zend_Pdf::load($this-&gt;view-&gt;config-&gt;offline-&gt;template);<br />
			$pdf-&gt;pages = array_reverse($pdf-&gt;pages);<br />
			$style = new Zend_Pdf_Style();<br />
			$font = Zend_Pdf_Font::fontWithPath($this-&gt;view-&gt;config-&gt;offline-&gt;font, ( Zend_Pdf_Font::EMBED_DONT_SUBSET));<br />
			$pdf-&gt;pages[0]-&gt;setFont($font, 10);<br />
			$pdf-&gt;pages[0]-&gt;saveGS();<br />
			//datalist<br />
			$pdf-&gt;pages[0]-&gt;drawText(str_replace(";","\n",$datalist), 100, 570,"UTF-8");<br />
			//project<br />
			$pdf-&gt;pages[0]-&gt;drawText($formData['project'], 100, 430,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($formData['realname'], 100, 78,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($formData['realname'], 130, 590,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($formData['unit'], 95, 58,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($formData['address'], 285, 58,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($formData['postcode'], 470, 58,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($formData['email'], 95, 40,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($formData['phone'], 295, 40,"UTF-8");<br />
			$t=getdate();<br />
			$pdf-&gt;pages[0]-&gt;drawText($t['year'], 465, 40,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($t['mon'], 500, 40,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;drawText($t['mday'], 525, 40,"UTF-8");<br />
			$pdf-&gt;pages[0]-&gt;restoreGS();<br />
			$fn=$formData['realname'].date('YmdHis').".pdf";<br />
			$pdf-&gt;save($this-&gt;view-&gt;config-&gt;offline-&gt;savepath."/".$fn);</code></p></blockquote>
<p>这样，的确能完成要求，但是令人恼火的是，其把中文字体内嵌到PDF文件中去，因此导致PDF文件过大，而且导致PHP所需内存也增大（64M）。<br />
因此，就开始尝试别的办法，开始锁定fpdf，PHP能完美支持，而且也能支持中文（所要单独下载chinese.php和chinese-unicode.php）。<br />
但是，FPDF不支持打开已有的PDF文件作为模板，因此还需要使用fpdi进行模板的支持，还要修改fpdi，使其父类为PDF-UNICODE。</p>
<p>然后就可以这样使用：</p>
<blockquote><p><code >		$pagecount = $this-&gt;setSourceFile($this-&gt;template);<br />
		$tplidx = $this-&gt;importPage(1, '/MediaBox');<br />
		$this-&gt;addPage();<br />
		$this-&gt;useTemplate($tplidx);<br />
		$this-&gt;AddUniGBhwFont('ugb','AdobeSongStd-Light-Acro');</p>
<p>		$this-&gt;SetFont('ugb','',$this-&gt;fontsize);<br />
		$this-&gt;setXY(45,65);<br />
		$this-&gt;Write($this-&gt;fontsize,$this-&gt;data['realname']);</code></p></blockquote>
<p>其中，字形由默认的AdobeSongStd-Light改成AdobeSongStd-Light-Acro，是为了防止英文字体变宽和变窄，格式才会整齐，英文字不会挤在一起。(参考： http://bbs.erp100.com/thread-18424-1-1.html)</p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/556/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ubuntu hardy下使用zend framework</title>
		<link>http://wlx.westgis.ac.cn/503/</link>
		<comments>http://wlx.westgis.ac.cn/503/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 08:12:10 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hardy]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/?p=503</guid>
		<description><![CDATA[安装：
sudo aptitude install zend-framework
补充操作：
1 添加Zend符号连接
sudo ln -s /usr/share/php/libzend-framework-php/Zend /usr/share/php/Zend
2 修补中文EMAIL的subject乱码
参考http://framework.zend.com/issues/browse/ZF-2532
]]></description>
			<content:encoded><![CDATA[<p>安装：</p>
<blockquote><p>sudo aptitude install zend-framework</p></blockquote>
<p>补充操作：<br />
1 添加Zend符号连接<br />
sudo ln -s /usr/share/php/libzend-framework-php/Zend /usr/share/php/Zend<br />
2 修补中文EMAIL的subject乱码<br />
参考http://framework.zend.com/issues/browse/ZF-2532</p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/503/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>use bcspamblock in zend form</title>
		<link>http://wlx.westgis.ac.cn/500/</link>
		<comments>http://wlx.westgis.ac.cn/500/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 06:26:23 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[bcspamblock]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/?p=500</guid>
		<description><![CDATA[I want to integrate the bcspamblock and zend form, so first to do:
为了能自动防止机器人攻击，打算把bcspamblock整合到zend_form中。
1 创建element_bcSpamBlock.php文件，
&#60;?php
class element_bcSpamBlock extends Zend_Form_Element_Xhtml{
    /**
     * Default form view helper to use for rendering
     * @var string
     */
    public $helper = 'bcSpamBlock';
}
2 创建helper文件：BcSpamBlock.php
&#60;?php
include_once("bcspamblock.php");
class Zend_View_Helper_BcSpamBlock [...]]]></description>
			<content:encoded><![CDATA[<p>I want to integrate the bcspamblock and zend form, so first to do:<br />
为了能自动防止机器人攻击，打算把bcspamblock整合到zend_form中。<br />
1 创建element_bcSpamBlock.php文件，</p>
<blockquote><p><code >&lt;?php<br />
class element_bcSpamBlock extends Zend_Form_Element_Xhtml{<br />
    /**<br />
     * Default form view helper to use for rendering<br />
     * @var string<br />
     */<br />
    public $helper = 'bcSpamBlock';<br />
}</code></p></blockquote>
<p>2 创建helper文件：BcSpamBlock.php</p>
<blockquote><p><code >&lt;?php<br />
include_once("bcspamblock.php");<br />
class Zend_View_Helper_BcSpamBlock extends Zend_View_Helper_FormElement{</p>
<p>    public function bcSpamBlock($name, $value='', $attribs = null){</p>
<p>        $xhtml = bcspamblock_generate(true);<br />
        return $xhtml;<br />
    }<br />
}</code></p></blockquote>
<p>3 创建validator，但奇怪的是，这一步经测试，没发生实际作用，不知道是什么原因。</p>
<blockquote><p><code >&lt;?php<br />
include_once("bcspamblock.php");<br />
class Validator_SpamBlock extends Zend_Validate_Abstract {<br />
    const NOT_MATCH = '机器人阻止';//'spam blocked!';</p>
<p>    protected $_messageTemplates = array(<br />
        self::NOT_MATCH =&gt; '机器人阻止'<br />
    );</p>
<p>    public function isValid($value) {<br />
    	$result=bcspamblock_verify();<br />
      return $result;<br />
    }<br />
}</code></p></blockquote>
<p>4 创建自定义的form</p>
<blockquote><p><code >&lt;?php</p>
<p>class ContactForm extends Zend_Form<br />
{<br />
    public function __construct($options = null)<br />
    {<br />
        parent::__construct($options);<br />
        $this-&gt;setName('Contact');</p>
<p>        $username = new Zend_Form_Element_Text('username');<br />
        $username-&gt;setLabel('用户名')-&gt;setRequired(true)<br />
        -&gt;addFilter('StripTags') -&gt;addFilter('StringTrim')<br />
        -&gt;addValidator('StringLength',false,array(3,50));</p>
<p>        $email=new Zend_Form_Element_Text('email');<br />
        $email-&gt;setLabel('E-Mail')<br />
        			-&gt;setRequired(true)<br />
        			-&gt;addFilter('StringTrim')<br />
        			-&gt;addValidator('NotEmpty')<br />
        			-&gt;addValidator('EmailAddress');</p>
<p>		  $subject=new Zend_Form_Element_Text('subject');<br />
		  $subject-&gt;setLabel('主题')-&gt;setRequired(true);</p>
<p>		  $body=new Zend_Form_Element_Textarea('body');<br />
		  $body-&gt;setLabel('内容')-&gt;setRequired(true)-&gt;setAttrib('rows',4);</p>
<p>        $id = new Zend_Form_Element_Hidden('id');</p>
<p>        $submit = new Zend_Form_Element_Submit('submit');<br />
        $submit-&gt;setAttrib('id', 'submitbutton')-&gt;setLabel('发送');</p>
<p>        $spam=new element_bcSpamBlock('spam');<br />
        $spam-&gt;addPrefixPath('Validator','validator/','validate')<br />
        		 -&gt;addValidator('SpamBlock');</p>
<p>        $this-&gt;addElements(array($id, $spam,$username,$email,$subject,$body,$submit));<br />
    }<br />
}</code></p></blockquote>
<p>5 在action中调用此form</p>
<blockquote><p><code >    function contactAction()<br />
    {<br />
    	$form=new ContactForm();<br />
    	$this-&gt;view-&gt;form=$form;<br />
    	$this-&gt;view-&gt;addHelperPath('helper','Zend_View_Helper_');<br />
    	if ($this-&gt;_request-&gt;isPost()) {<br />
    		//发送邮件<br />
    		$formData=$this-&gt;_request-&gt;getPost();<br />
    		include_once("bcspamblock.php");<br />
    		if (bcspamblock_verify() &amp;&amp; $form-&gt;isValid($formData)) {<br />
    			$mail=new Zend_Mail('utf-8');<br />
....</code></p></blockquote>
<p>因为第3步中的validator自动调用不成功，因此在此进行了手工的判断。</p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/500/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP的Framework</title>
		<link>http://wlx.westgis.ac.cn/303/</link>
		<comments>http://wlx.westgis.ac.cn/303/#comments</comments>
		<pubDate>Mon, 11 Dec 2006 14:50:54 +0000</pubDate>
		<dc:creator>wlx</dc:creator>
				<category><![CDATA[Program]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[seagull]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://wlx.westgis.ac.cn/303/</guid>
		<description><![CDATA[很长时间没有关注PHP，今天无意中点到javaeye.com，发现其已经改版，使用了ruby on rails框架技术，做得很好，然后又看到了还有php相关的框架，最近最近一段时间在PHP的世界里也出现了很多框架。作为php的发行公司，Zend自己也推出了一个框架，简称为ZF，目前最新的稳定版本还是0.2。觉得php的动作有点慢了，应该在php5推出后，要是能紧跟就推出几个框架系统，那对于php世界应该有非常大的推动！不过，虽然动作慢了一些，但是已经有了很多的php框架发展起来了。粗粗阅读了zf的文档后，发现框架的功能还是蛮丰富的，但是ZF目前还是有相当多的进步空间的，就是说，目前还是有一些缺点的。
一些framework的比较：
http://www.mustap.com/phpzone_post_73_top-10-php-mvc-frameworks
http://www.phpit.net/article/ten-different-php-frameworks/
http://www.5itag.com/viewtopic.php/177
seagull感觉像是一个大的CMS系统
ZF感觉像是一个库，或者就是pear
最后看了symfony的manual，感觉symfony相当好，不过也有缺陷，就是配置太麻烦了。
在symfony中，用Propel实现了OR映射，支持多种数据库，包括mysql,sqlserver,pgsql,sqlite,oracle。
感觉这套框架和zend framework有很大不同，对我来说，symfony要好于zf。
还支持schema, or map, paging, multitype databases, ...
Conclusion: 首选symfony，其次cakephp，最后再考虑zf。当然还可以考虑seagull。
]]></description>
			<content:encoded><![CDATA[<p>很长时间没有关注PHP，今天无意中点到<a href="http://javaeye.com">javaeye.com</a>，发现其已经改版，使用了ruby on rails框架技术，做得很好，然后又看到了还有php相关的框架，最近最近一段时间在PHP的世界里也出现了很多框架。作为php的发行公司，Zend自己也推出了<a href="http://framework.zend.com/">一个框架</a>，简称为ZF，目前最新的稳定版本还是0.2。觉得php的动作有点慢了，应该在php5推出后，要是能紧跟就推出几个框架系统，那对于php世界应该有非常大的推动！不过，虽然动作慢了一些，但是已经有了很多的php框架发展起来了。粗粗阅读了zf的文档后，发现框架的功能还是蛮丰富的，但是ZF目前还是有相当多的进步空间的，就是说，目前还是有一些缺点的。</p>
<p>一些framework的比较：</p>
<p>http://www.mustap.com/phpzone_post_73_top-10-php-mvc-frameworks</p>
<p>http://www.phpit.net/article/ten-different-php-frameworks/</p>
<p>http://www.5itag.com/viewtopic.php/177</p>
<p>seagull感觉像是一个大的CMS系统<br />
ZF感觉像是一个库，或者就是pear<br />
最后看了symfony的manual，感觉symfony相当好，不过也有缺陷，就是配置太麻烦了。<br />
在symfony中，用Propel实现了OR映射，支持多种数据库，包括mysql,sqlserver,pgsql,sqlite,oracle。<br />
感觉这套框架和zend framework有很大不同，对我来说，symfony要好于zf。<br />
还支持schema, or map, paging, multitype databases, ...</p>
<p>Conclusion: 首选symfony，其次cakephp，最后再考虑zf。当然还可以考虑seagull。</p>
]]></content:encoded>
			<wfw:commentRss>http://wlx.westgis.ac.cn/303/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
