您的位置:首页 > 其它

Magento订单打印(pdf格式)

2015-05-24 21:23 197 查看
Magento自身包含有:打印发票单,打印装箱单,打印退款单。这些都是基于西方国家的习惯来布置的。公司有个需求就是打印订单的四联单,PDF格式的,要一周内完成。刚接到这个任务时,觉得头大,因为对于PHP如何生成PDF文件,以及Magento的打印系统,都还是一无所知。另外这次是中文打印,这和Magento内置的英文订单打印有区别。

接下来就是分析代码。对于第一个问题:PHP如何生成PDF文件,方法就是利用Zend_Pdf库来实现;对于Zend_Pdf中文乱码的问题,也通过可爱的Google找到了解决办法;另外通过代码分析也熟悉了Magento内置的打印系统。由于经常开会和有其他的琐碎任务,又拖了几周后才开始动手编程,花了大概五天就完成了。先晒晒成熟的果实:



遇到的几个问题:

一、Magento打印中文PDF订单乱码。这个需要加载中文字体来解决。我采用的是楷体(simkai.ttf)和微软雅黑粗(msyhbd.ttf)字体,本来是想采用宋体的,发现Zend_Pdf对宋体的支持有点问题。微软雅黑字体也比较好看,就用她了。注:simkai.ttf和msyhbd.ttf在c:/windows/fonts/目录下可以找到。下面是建立中文字的代码:

1
$fontyah
=Zend_Pdf_Font::fontWithPath(Mage::getBaseDir() .
'/lib/ZhFont/msyhbd.ttf'
);
2
$fontkai
=Zend_Pdf_Font::fontWithPath(Mage::getBaseDir() .
'/lib/ZhFont/simkai.ttf'
);
二、绘制订单左上角公司Logo。这个需要用到Zend_Pdf_Image。瞧代码:

1
$logofile
=Mage::getBaseDir() .
'/skin/frontend/default/default/images/print_logo.jpg'
;
2
3
if
(
$logofile
) {
4
if
(
is_file
(
$logofile
)) {
5
$image
=Zend_Pdf_Image::imageWithPath(
$image
);
6
$page
->drawImage(
$image
,25,800,125,825);
7
}
8
}
三、绘制条形码。代码是在网上找到,稍加修改的。原理是利用PHP GD生成条形码图片,然后通过Zend drawImage()绘制于订单上。代码比较复杂,略。

四、获取制单员工姓名。

1
$user
=Mage::getSingleton(
'admin/session'
)->getUser();
2
$user_name
=
$user
->getLastname() .
$user
->getFirstname();
五、获取Magento订单支付方式,也比较复杂。调试了很久,才得到下面的代码,可能有点问题,但大部分时候能正常工作:

01
$paymentInfo
=Mage::helper(
'payment'
)->getInfoBlock(
$order
->getPayment())
02
->setIsSecureMode(true)
03
->toPdf();
04
05
$payment
=
explode
(
'{{pdf_row_separator}}'
,
$paymentInfo
);
06
07
foreach
(
$payment
as
$key
=>
$value
){
08
if
(
strip_tags
(trim(
$value
))==
''
){
09
unset(
$payment
[
$key
]);
10
}
11
}
12
13
reset(
$payment
);
14
15
$payment
=trim(
$payment
[0]);
除去这几个问题有点难度,其他的都相对容易解决。功能完成后,制单客服MM的工作大大减轻。以前是手工在word模板上制作的,难免会出错。而且复制粘贴,特单调机械无聊,而且每人每天累的头晕只能制一百张单左右。现在几分钟之内上千张单立马OK。后来客服MM见到我就笑嘻嘻的。

原文:http://blog.sina.com.cn/s/blog_4066b17f01014vlz.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: