让Magento生成的PDF打印图片(Magento invoice shipment pdf add product images)

magento-export:Magento 产品导出到 csv(magmi 就绪) 此 magento 产品导出基于 Aten Software Product Data Exporter for Magento。 修复了 db 表前缀的错误,删除了未使用的列,仅类别导出类别 ID(特别是 magmi 导入) 如何使用: 打开 export.php 并在第 43 行附近将您的密码添加到 const PASSWORD,然后您可以在浏览器中加载它 立即下载

应公司的要求,尝试着在magento打印出来的invoice和shipment中打印产品图片。于是乎参考了电商中国的http://www.ecartchina.com/display-products-images-on-pdf.html和Inchoo的http://inchoo.net/ecommerce/magento/magento-pdf-invoice-with-product-images-extension/两位前辈的文章,这里我想对带产品图打印做个小结,有什么不对的地方还望读者指教,谢谢!

Magento的打印功能其实是用ZF中的zend_pdf类库来实现的,因为magento本身就集成了zf,所以可以在代码中直接使用该类库,具体的document可以参见zf官方文档http://framework.zend.com/manual/en/zend.pdf.drawing.html 这里的测试版本我选用magento CE 1.5.1.0的老版本

首先更改app/code/local/Mage/Sales/Model/Order/Pdf/Invoice.php的代码:

class Mage_Sales_Model_Order_Pdf_Invoice extends Mage_Sales_Model_Order_Pdf_Abstract
{
	protected function insertImage($image, $x1, $y1, $x2, $y2, $width, $height, &$page)
	{
		if (!is_null($image)) {
			try{
				$width = (int) $width;
				$height = (int) $height;
				 
				//Get product image and resize it.
				$imagePath = Mage::helper('catalog/image')->init($image, 'image')
				->keepAspectRatio(true)
				->keepFrame(false)
				->resize($width, height)
				->__toString();
				
				
				$imageLocation = substr($imagePath,strlen(Mage::getBaseUrl()));
				$image = Zend_Pdf_Image::imageWithPath($imageLocation);
				//Draw image to PDF

				$page->drawImage($image, $x1, $y1, $x2, $y2);
			}
			catch (Exception $e) {
				return false;
			}
		}
	}
    public function getPdf($invoices = array())
    {
    	$width = 500;
		$height = 500;
        $this->_beforeGetPdf();
        $this->_initRenderer('invoice');

        $pdf = new Zend_Pdf();
        $this->_setPdf($pdf);
        $style = new Zend_Pdf_Style();
        $this->_setFontBold($style, 10);

        foreach ($invoices as $invoice) {
            if ($invoice->getStoreId()) {
                Mage::app()->getLocale()->emulate($invoice->getStoreId());
                Mage::app()->setCurrentStore($invoice->getStoreId());
            }
            $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
            $pdf->pages[] = $page;

            $order = $invoice->getOrder();

            /* Add image */
            $this->insertLogo($page, $invoice->getStore());
            
            /* Add address */
            $this->insertAddress($page, $invoice->getStore());

            /* Add head */
            $this->insertOrder($page, $order, Mage::getStoreConfigFlag(self::XML_PATH_SALES_PDF_INVOICE_PUT_ORDER_ID, $order->getStoreId()));


            $page->setFillColor(new Zend_Pdf_Color_GrayScale(1));
            $this->_setFontRegular($page);
            $page->drawText(Mage::helper('sales')->__('Invoice # ') . $invoice->getIncrementId(), 35, 780, 'UTF-8');

            /* Add table */
            $page->setFillColor(new Zend_Pdf_Color_RGB(0.93, 0.92, 0.92));
            $page->setLineColor(new Zend_Pdf_Color_GrayScale(0.5));
            $page->setLineWidth(0.5);

            $page->drawRectangle(25, $this->y, 570, $this->y -15);
            $this->y -=10;

            /* Add table head */
            $page->setFillColor(new Zend_Pdf_Color_RGB(0.4, 0.4, 0.4));
            $page->drawText(Mage::helper('sales')->__('Products'), 35, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Product Image'), 255, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('SKU'), 380, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Price'), 430, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Qty'), 480, $this->y, 'UTF-8');
            //$page->drawText(Mage::helper('sales')->__('Tax'), 480, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Subtotal'), 535, $this->y, 'UTF-8');

            $this->y -=15;

            $page->setFillColor(new Zend_Pdf_Color_GrayScale(0));

            /* Add body */
            foreach ($invoice->getAllItems() as $item){
                if ($item->getOrderItem()->getParentItem()) {
                    continue;
                }

                if ($this->y < 15) {
                    $page = $this->newPage(array('table_header' => true));
                }

                /* Draw item */
                $page = $this->_drawItem($item, $page, $order);
                /* Draw product image */
				$productId = $item->getOrderItem()->getProductId();
				$image = Mage::getModel('catalog/product')->load($productId);
				$this->insertImage($image, 240, (int)($this->y + 15), 350, (int)($this->y+115), $width, $height, $page);
            }

            /* Add totals */
            $page = $this->insertTotals($page, $invoice);

            if ($invoice->getStoreId()) {
                Mage::app()->getLocale()->revert();
            }
        }

        $this->_afterGetPdf();

        return $pdf;
    }

    /**
     * Create new page and assign to PDF object
     *
     * @param array $settings
     * @return Zend_Pdf_Page
     */
    public function newPage(array $settings = array())
    {
        /* Add new table head */
        $page = $this->_getPdf()->newPage(Zend_Pdf_Page::SIZE_A4);
        $this->_getPdf()->pages[] = $page;
        $this->y = 800;

        if (!empty($settings['table_header'])) {
            $this->_setFontRegular($page);
            $page->setFillColor(new Zend_Pdf_Color_RGB(0.93, 0.92, 0.92));
            $page->setLineColor(new Zend_Pdf_Color_GrayScale(0.5));
            $page->setLineWidth(0.5);
            $page->drawRectangle(25, $this->y, 570, $this->y-15);
            $this->y -=10;

            $page->setFillColor(new Zend_Pdf_Color_RGB(0.4, 0.4, 0.4));
            $page->drawText(Mage::helper('sales')->__('Product'), 35, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Product Image'), 255, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('SKU'), 380, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Price'), 430, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Qty'), 480, $this->y, 'UTF-8');
            //$page->drawText(Mage::helper('sales')->__('Tax'), 535, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Subtotal'), 535, $this->y, 'UTF-8');

            $page->setFillColor(new Zend_Pdf_Color_GrayScale(0));
            $this->y -=20;
        }

        return $page;
    }

TAX我注释掉了,因为我不需要将其打印出来。

然后修改app/code/local/Mage/Sales/Model/Order/Pdf/Items/Invoice/Default.php

class Mage_Sales_Model_Order_Pdf_Items_Invoice_Default extends Mage_Sales_Model_Order_Pdf_Items_Abstract
{
    /**
     * Draw item line
     *
     */
    public function draw()
    {
        $order  = $this->getOrder();
        $item   = $this->getItem();
        $pdf    = $this->getPdf();
        $page   = $this->getPage();
        $lines  = array();

        // draw Product name
        $lines[0] = array(array(
            'text' => Mage::helper('core/string')->str_split($item->getName(), 60, true, true),
            'feed' => 35,
        ));

        
        // draw SKU
        $lines[0][] = array(
            'text'  => Mage::helper('core/string')->str_split($this->getSku($item), 25),
            'feed'  => 375
        );

        // draw Price
        $lines[0][] = array(
            'text'  => $order->formatPriceTxt($item->getPrice()),
            'feed'  => 445,
            'font'  => 'bold',
            'align' => 'right'
        );
        
        // draw QTY
        $lines[0][] = array(
            'text'  => $item->getQty()*1,
            'feed'  => 485
        );

        // draw Tax
        /*
        $lines[0][] = array(
            'text'  => $order->formatPriceTxt($item->getTaxAmount()),
            'feed'  => 495,
            'font'  => 'bold',
            'align' => 'right'
        );
		*/
        
        // draw Subtotal
        $lines[0][] = array(
            'text'  => $order->formatPriceTxt($item->getRowTotal()),
            'feed'  => 565,
            'font'  => 'bold',
            'align' => 'right'
        );

        // custom options
        $options = $this->getItemOptions();
        if ($options) {
            foreach ($options as $option) {
                // draw options label
                $lines[][] = array(
                    'text' => Mage::helper('core/string')->str_split(strip_tags($option['label']), 70, true, true),
                    'font' => 'italic',
                    'feed' => 35
                );

                if ($option['value']) {
                    $_printValue = isset($option['print_value']) ? $option['print_value'] : strip_tags($option['value']);
                    $values = explode(', ', $_printValue);
                    foreach ($values as $value) {
                        $lines[][] = array(
                            'text' => Mage::helper('core/string')->str_split($value, 50, true, true),
                            'feed' => 40
                        );
                    }
                }
            }
        }

        $lineBlock = array(
            'lines'  => $lines,
            'height' => 110
        );

        $page = $pdf->drawLineBlocks($page, array($lineBlock), array('table_header' => true));
        $this->setPage($page);
    }
}

循环打印出产品,并且设置行距为110,这样两步就OK了,提醒下,zend_pdf要求php extension 有GD库和Zilb库来运行jpg和png格式的图片打印,另外,请注意你的图片路径没有问题,如果图片打印不出来,请使用断点调试来确保图片路径可供程序访问。(我之前就是因为这个问题白白耗了1天,晕~)shipment的打印原理也是一样的,好了,不足之处,还请高人指正,谢谢!附上效果图:


【详细图文】使用MobaXterm的SSH功能远程连接服务器,并创建pytorch环境,使用yolov8训练数据集 使用MobaXterm的SSH功能远程连接服务器,并创建pytorch环境,使用yolov8训练数据集,以及MobaXterm使用介绍和linux基础命令介绍。 阅读详情

相关推荐

Qwen3.6-27B本地部署实战:LM Studio配置、硬件门槛与避坑指南

大语言模型本地部署是当前AI工程落地的核心能力之一,其本质是将高参数量模型(如27B级)在受限硬件环境下实现低延迟、高稳定推理。关键技术原理涵盖量化压缩(如GGUF格式与q4_k_m精度权衡)、GPU显存分配策略(KV Cache管理与Offloading机制)、以及运行时环境兼容性(CUDA驱动、llama.cpp后端版本)。该能力直接决定私有化AI应用的技术可行性与成本边界,广泛应用于企业知识库构建、代码辅助、长文档分析等对数据主权和响应确定性要求高的场景。本文聚焦Qwen3.6-27B这一典型27B模

weixin_33272631的博客 468

Magento开发教程 - 修改magento默认订单发票(invoice)

默认magneto invoice pdf生成是用Zend Framework.框架的 Zend_Pdf  模块,我们在做magento开发的 打开/app/code/local/Mage/Sales/Model/Order/Pdf/Invoice.php $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4); //设定打印纸张 $page

phpstudios的专栏 754

【深度学习】基于BERT模型的情感分析(附实战完整代码+数据集)

情感分类是一个快速发展的研究领域,尽管众多模型和数据集在二分类任务中显示出很高的准确性,但细粒度的情感分类任务仍然是一个很大改进空间的领域。分析SST-5数据集,Munikar等人的先前工作表明,嵌入工具BERT允许使用简单的模型来实现最新的准确性。

aaaa_hsjsueu的博客 2万+

Magento订单打印(pdf格式) 转:鹏程万里

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

小画家 783

七自由度机械臂逆运动学实战:从几何简化到KDL库高效求解

本文深入探讨了七自由度机械臂逆运动学求解的实战方法。针对冗余自由度带来的挑战,文章对比了两种核心方案:一是利用任务约束进行几何简化,快速求解特定任务;二是基于DH参数法配置KDL库,实现通用高效的数值迭代求解。文中结合宇树H1机器人实例,详细阐述了从模型解析、参数提取到代码实现与验证的全流程,并提供了几何法与KDL库的适用场景对比与避坑指南。

weixin_29044713的博客 636

深入瑞芯微SDK:手把手解析Uboot、Kernel到Rootfs的镜像生成与烧录

本文深入解析瑞芯微SDK中从Uboot、Kernel到Rootfs的镜像生成与烧录全流程,揭示编译背后的技术细节。通过详细分析SDK架构、镜像生成流水线、分区表定制、Rootfs构建及烧录科学,帮助开发者从会编译进阶到懂原理,掌握系统级开发的关键技术。

weixin_29193359的博客 270

Add Custom Info on Invoice Pdf for Magento

如何在打印出来的Pdf里面增加额外信息,其实只要知道如何操纵数据,最终打印的handle还是Zend来执行,Magento内置了Zend_Pdf类,用他来打印PDF文件,下面是一个示例,比较简单易懂,在此抛砖引玉。以下代码加在Mage_Sales_Model_Order_Pdf_Invoice这个类中。 /* Gfit Msg Notice */ $freegiftboxHandle

YIP 1274

量化交易——量化选股(多因子选股)

就是用过去的股票的收益率对多因子进行回归,得到一个回归方程,然后再把最新的因子值代入回归方程得到一个对未来股票收益的预判,然后再以此为依据进行选股。的方法是建立在市场无效或弱有效的前提之下,随着使用多因子选股模型的投资者数量的不断增加,有的因子会逐渐失效,而。就是根据各个因子的大小对股票进行打分,然后按照一定的权重加权得到一个总分,根据总分再对股票进行筛选。另一方面,一些因子可能在过去的市场环境下比较有效,而随着市场风格的改变,这些。波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的。

jiucaixiuyang的博客 1787

php编程的变化,php – 编程添加产品到购物车与价格变化

在挖了一下Magento的核心代码后,我发现你需要使用$ item-> getProduct() – > setIsSuperMode(true)为了使$ item-> setCustomPrice()和$ item-> setOriginalPrice ()工作。下面是一些可以在Observer中使用的示例代码,用于监听checkout_cart_product_add_...

weixin_36064196的博客 150

Cluster Computing投稿

在overleaf中新建picins.sty文件,该文件是导入的包在.tex文件中添加以下内容\usepackage{picins}%实现作者简介%下边这块有几个人复制几段\vspace{0\baselineskip} %这一行控制作者间隔,可视情况改数字!!!!!!!!

这里是萤石ym的学习路途,努力搬砖! 5534

GaussDB本地安装手册(主备模式)

如果实例状态是Normal,则安装成功。三节点集中式配置文件。

Sebastien23的博客 2633

magento1.9多站自动生成缩略图

关于magento1.9多站生成缩略图造成打开网页过慢,除了各种缓存和蜘蛛爬网生成缩略图并没有其它方法。对于多站产品图共用,可在magetno缩略图目录创建软件连接,让缩略图共用,减少文件占用空间,减少缩略图生成占用服务器资源。...

SleepyBear 393

【2023年】云计算比赛——金砖挑战赛正式题

文章摘要 本文详细记录了OpenStack私有云平台与Kubernetes容器云平台的部署与运维过程,涵盖环境初始化、组件安装、服务配置及自动化运维等关键任务。主要内容包括: OpenStack部署 环境初始化(主机名、Yum源、FTP服务等) 核心组件安装(Keystone、Glance、Nova、Neutron等) 运维任务(安全组管理、镜像上传、存储服务配置等) Kubernetes集群搭建 节点配置(时间同步、免密登录) 容器运行时(Docker)与网络插件(Flannel)部署 Harbor私有仓

geekgold的博客 313

magento 2.4 重新生成图片缩略图

php bin/magento catalog:image:resize 说明:如果后台改了使用imagemagick为缩略图插件,目前的2.4版本会有png图片出现黑底的情况。

CyrusZhou的专栏 408

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[原创]解决Magento 导出中文PDF 过大的问题。

关于“Magento导出pdf中文乱码”的解决方案,网上已经有不少人提到,这里就不再详细说,无非就是增加中文字体库,然后将app/code/core/Mage/Sales/Model/Order/Pdf/Abstract.php 里面的 _setFontXXXX() 修改加载相应的中文字体文件,修改如下: $font = Zend_Pdf_Font::fontWithPath(Ma

seiferli的专栏 1364

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Magento设置cronjob来让系统自动发送newsletter

用Newsletter来让Magento系统自动发送邮件给已经subscribe的客户email,相信应该是很多人想知道具体怎么操作的,在此小生说明下,有错误的地方欢迎指正! 要让系统自动发送邮件 需要设置cronjob这个东西,他可以自动帮我们完成一些计划任务,这是针对Unix linux机器而言的。linux机器进去Terminal,如果是用虚拟机或者vps进去ssh命令行输入:cronta

YIP 3635

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Magento结账时如何移除运费选择步骤(Skip shipping step on onepage checkout)

1.修改app\code\core\Mage\Checkout\Block \Onepage.php 我们需要做的是修改默认的step,就是修改getStep function public function getSteps() { $steps = array(); if (!$this->isCustomerLoggedIn()) { $steps['login'] = $this

YIP 2962

Magento操作Cookie 并且使用观察者&事件来禁用单页面全页缓存(EE FPC)

Groupon(http://www.groupon.hk/)的首次访问会弹出一个框让客户输入电子邮件来订阅他们的最新咨询,只要提交表单或者点已经提交的按钮该框就会消失 并且以后访问都不会出现  大家应该见过  最近按照公司的要求需要在magento里面开发类似的效果。 首先明确这其中使用的原理是cookie 那magento该怎么操纵cookie呢 其实在core的model里面有一个cooki

YIP 2771

Magento 中使用AJAX异步提交数据(Using Ajax with Magento)

如果你想用ajax提交magento的表单数据,可以尝试这种写法 getUrl('yourmoduleCompanyName/index/moduleIndexControllerAction') ?>', {asynchronous:true, evalScripts:fal

YIP 2759

Magento外部Add to cart操作(广告需要)

quick shopping Sku: Qty: Add to cart 以前觉得外部add to cart没什么用,后来才发现可以再帮我们坐推广的网站上使用,其实网站外只需要几行html代码,把如上代码放在外部: 然后add to cart的时候需要做了一跳转: <?php include_once 'app/Mage.php'; Mage:

YIP 2645

Magento前台只有产品的缩略图不显示?

最近发现一个怪异的现象,Magento前台只有产品的缩略图不显示。我检查了之前的操作,后台产品图片的选择设置,media文件夹的权限,缓存等一系列可能引发的因素,发现缩略图还是不显示,那就奇怪了,其他服务器上包括本地都是没问题的。缩略图通常是保存在media下类似这样的路径med

YIP 2595

Magento 新闻模块开发教程 (三) 创建前后端控制器

之前创建了骨架目录并且激活了新模块,现在要为模块创建前台和后台的控制器。1. 首先在app/code/local/Voodoo/News/controllers/ 中创建一个名为IndexController.php的前端控制器:class Voodoo_Ne

YIP 2544

Magento如何通过url参数给购物车添加商品?

<br />如题,如果是简单商品:<br />1.登录后台Catalog|Manage Products,查看对应商品的ID号,比如7<br /> <br />2.然后直接在地址栏输入 url<br />http://yourstoreurl/checkout/cart/add?product=[id]&qty=[qty]<br /> 或者<br /> http://yourstoreurl/checkout/cart/add/product/[id]/qty/[qty]<br /> <br />如果I

YIP 2392

Magento的路由分发机制

有半年没写东西了吧 不是没继续学 确实是懒了 好吧 言归正传! Magento的路由主要为了完成以下三个任务: 1.接收并处理浏览器数据讲它传送给系统的其他部分; 2.定义controller和action来供routes使用; 3.展示浏览器请求数据给blocks,templates和model数据。 其中最核心的前端Controller是Mage_Core_Contr

YIP 2352

How to add some custom registration fields while creating your magento account?(compatible also for 1.4.2.0 version)

1.Magento采用实体-值-属性(EVA)的灵活方式来操纵数据   实体为数据项目的描述,属性是一个属性定义表的外键约束,值则为属性的值2.为magento添加新的EVA,比如在用户注册页面添加一个ICQ的字段让用户填写自己的ICQ,你可以在app/design/frontend/YOUR_PACKAGE/YOUR_THEME/template/customer/form/regiter.phtml里面添加代码: $setup = new Mage_Eav_Model_Entity_Setup('

YIP 2338
上一篇: Magento Error:Invalid model for shipping method
下一篇: Magento copy custom option module(自定义选项复制插件)
ddjohn
博客等级 码龄17年 36粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值