|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
这篇文章应该在给正utf8打印功能的时候就发表,不过那天刚好是平安夜所以一直到现在才补上来。
webERP的utf8字符的支持功能一直是初次接触weberp的人想改善的问题,其实这个问题没有什么特别只是weberp一直支持lantin1字符它其实也支持中文,作者不想改而已,为什么不想改据说是utf8会加大传输量,但大家都觉得要改是因为phpmyadmin现在默认的字符为utf8,所以latin1字符在phpmyadmin2.53(不信可以自己下个2.5.3的phpmyadmin)后都是乱码大家觉得很不爽。所以大家都想改正这个不是bug的bug。
要改正这个问题首先得清楚utf8字符在php,mysql里面如何运作,简单一句就是weberp,mysql的数据库和校验都得用utf8。今天的说的不是这个,主要说的是解决打印的乱码问题,就是让weberp打印支持utf8,其实具体的解决方法在http://www.fpdf.org/论坛里已经说清楚了,就是wangfeiok给出的例子pdf-chinese的例子,里面的chinese-unicode就是整个问题的关键代码。这里说的是通过这个问题的修正进一步了解weberp的代码结构。好现在正式开始。
首先我们想修改打印功能,首先着手的就是看看打印用了那个脚本以销售订单为例,它首先调用的是PrintCustOrder_generic.php ,我们打开PrintCustOrder_generic看看代码。开始
include('includes/header.inc');
和include('includes/footer.inc'); 是显示部分,和打印没关系
$sql = "SELECT salesorders.debtorno,。。。。。。sql语句, 访问数据库的。
if (DB_num_rows($result)==0) 表示没数据返回时的显示页,有数据时的一些处理
$PaperSize = 'A4_Landscape'; 其实有经验一开始就在这开始
include('includes/PDFStarter.php'); 这里调用了另一个文件。
后面的程序是针对销售单的打印,从这里就可以看出其实weberp的面向对象不错,结构也很好,因为显示(打印也是显示)和功能已经分开了至少mvc做好一大半。
好转到PDFStarter.php
include ('includes/class.pdf.php'); 一开头就调用另一个文件,先等下我们先看看下面的
switch ($PaperSize) 下面就是页尺寸的设置。
$pdf = & new Cpdf($PageSize); 好了这里生成一个pdf的对象类为cpdf我们先记住
后面的代码很少也基本建立在cpdf类上
再转class.pdf.php 这个class.pdf.php是整个的关键
include ('includes/fpdf.php'); 这又调用了一个文件fpdf.php,熟悉php的人知道fpdf是
php一个基本类专门支持pdf的,而且这个类只有php才 会去修改,一般开发者是不会动的因为要附加的功能可以
通过继承来实现,后面就看到。
if ($_SESSION['Language']=='zh_CN' OR 。。。。。{
include('FPDF_Chinese.php'); 这里再调用了一个fpdf_chinese的文件先放下 继续 。
。
。
class Cpdf extends PDF_Language 这定义了一个类cpdf如果大家通过前后的对比就知道是
这个类实现了打印的utf8支持
至于原理是什么就不说了。好了那大家可能会问那
PDF_Language 是干什么的。
这里的cpdf是继承PDF_Language
这个类的大家可以看到phph怎样为类加功能或改功能。
那pdf——language是干什么的?
现在来打开fpdf_chinese
require('fpdf.php'); 又调用了fpdf其实用require_once只调用一次就可以了,
看来weberp的代码可以优化下。
$Big5_widths=
。
。
。
$GB_widths=array
。
。
。
class PDF_Language extends FPDF 这也定业了一个类pdf_language结合上面的数组大概就能
猜到这个类是用来支持中文的
这里说明下pdf_chinese这个文件是weberp自身带的,就是weberp本身就支持中文繁简体。我开始的时候修改weberp的utf8支持就是想修改这个类,不过呵呵不成功,原因吗学艺未精,不过没关系留待下次大家共同努力。
通过分析我们可以看出weberp的结构也是比较清晰的,当然他还可以做得更清晰明了,不过如果再深化下去得付出更多的代价,估计作者也没这个打算,因为从weberp的功能就知道作者是一个一切从简的人,没什么花俏的功能,但简单易用,这就是weberp。
附件是我写的一个新的销售单专门支持多层复写纸的。
[ 本帖最后由 simonz 于 2007-12-27 21:58 编辑 ] |
|