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

Magento订单打印(pdf格式)的更多相关文章

  1. 页面打印pdf格式文件

    '<td><button type="button" class="btn btn-primary" data-loading-text=&q ...

  2. 关于Markdown格式转PDF格式

    Markdown转PDF格式 个人使用的Markdown编辑平台:有道云笔记网页版 当我们编辑好自己的随笔以后,在网页的[客户端下载]下面有一个[更多]的圆形图标选项,点击后在菜单中有一处[打印]选项 ...

  3. 采购订单打印并预览PDF

    *&---------------------------------------------------------------------* *& Report Z01MMF019 ...

  4. 关于这两天研究Java打印pdf方法的记录

    这两天在研究Java调用打印机打印PDF文件的方法,学到了不少东西,特别来记录一下. 关于Java打印网上最多的而且也是Java正统的打印方法就是使用PrintService,一套比較标准的打印代码例 ...

  5. C# 打印PDF文档的10种方法

    操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...

  6. CEBX格式的文档如何转换为PDF格式文档、DOCX文档?

    方正阿帕比CEBX格式的文档如何转换为PDF格式文档.DOCX文档? 简介: PDF.Doc.Docx格式的文档使用的非常普遍,金山WPS可以直接打开PDF和Doc.Docx文档,使用也很方便. CE ...

  7. 安卓打印实现打印pdf文档

    先声明一下,此处的打印非pos打印机打印和蓝牙打印机打印,如果想查找打印小票的pos打印机请进入下面的传送门,蓝牙打印目前没做过,有做过的请指教. pos打印机传送门: 1. https://www. ...

  8. JSP页面导出PDF格式文件

    JSP页面导出PDF格式文件基本在前端页面可以全部完成 <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/ ...

  9. 下载PDF格式的Html

    下载PDF格式的Html 首先准备需要的两个js jsPdf.debug.js html2canvas.js 直接上代码: function download() { html2canvas(docu ...

随机推荐

  1. JSTL 的 if else : 有 c:if 没有 else 的处理

    jstl的c:if 没有else 想要实现if...else...: 可以用下面的解决 -------------------------------------------------------- ...

  2. ognl el表达式 property

    <s:iterator value="list" status="statu" var="alarminfo"> <tr& ...

  3. HDU1667 : The Rotation Game

    考虑枚举最后中间的数字,然后可以用一个24位的整数来表示一个状态,一共有C(24,8)=735471种状态,然后BFS即可. 比赛的时候由于手速问题没写完TAT 写完后在坑爹评测机上还是TLE. 所以 ...

  4. 调用WebServiceWebService提示The maximum string content length quota (8192) has been exceeded while reading XML data的解决办法

    在web.config中,bindings节点下,对应的服务名称中,原本可能是自动折叠的“/>”,需要改成手动折叠的</binding>,然后在中间加上<readerQuota ...

  5. ios ASIHttpLib 同步请求和异步请求

    1.同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作, 2.异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然 ...

  6. 51NOD 算法马拉松12

    OTZ做出题目的神犇..断断续续改完了在这里存一下思路吧 A题:第K大区间题意:定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 分析:二分答案mid,任务 ...

  7. maven工程代码关联源代码配置

    最近在学习dubbo,在maven构建完成后,需要关联查看一些依赖jar的源码,配置很简单,如下: 勾选windows-Preferences-Maven- Download Artifact Sou ...

  8. dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算(终结版)

    首先,说下概念(网上很多帖子几个地方都搞混了,理一下):   dip : device independent pixels ,设备无关像素. 我看很多帖子写的五花八门的,关于d的,什么display ...

  9. 使用 CJSON 在C语言中进行 JSON 的创建和解析的实例讲解

    本文用代码简单介绍cjson的使用方法,1)创建json,从json中获取数据.2)创建json数组和解析json数组 1. 创建json,从json中获取数据 #include <stdio. ...

  10. CSS中a标签样式的“爱恨”原则

    CSS为一些特殊效果准备了特定的工具,我们称之为“伪类”.其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是: 1 :link 2 :visited 3 :h ...