PDF Magento中的发票生成

时间:2012-01-12 01:58:29

标签: php zend-framework magento

我正在尝试检查Magento中的新订单,如果它们存在,请向网站管理员发送PDF发票。除了PDF之外,一切都很棒。

尝试从外部创建PDF发票时,呈现的PDF中缺少所有结算信息。创建发票非常简单,但找不到缺少结算信息的原因对我来说是不可能的。这是我学到的。

我创建实际PDF发票的代码如下。这与默认pdfinvoicesAction中用于为管理员后端(app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php:459)创建PDF的代码相同。

cron/Invoice.php

<?php
  /* $order is a valid Mage_Sales_Model_Order object */

  $invoices = $order->getInvoiceCollection();
  $pdfInvoice = Mage::getModel('sales/order_pdf_invoice');
  $pdf = $pdfInvoice->getPdf($invoices);

  $pdfFile = $pdf->render();
?>

这会创建一个有效的PDF,其中包含所有订单信息减去结算。隔离原因,我发现在以下(默认)文件中,订单结算信息是一个空字符串 - 当我通过magento后端检索发票时,这将返回一个包含所有结算信息的格式化字符串。

app/core/Mage/Sales/Model/Order/Pdf/Abstract.php:221

    /* Payment */
    $paymentInfo = Mage::helper('payment')->getInfoBlock($order->getPayment())
        ->setIsSecureMode(true)
        ->toPdf();

    // $paymentInfo is an empty string when rendering a PDF externally,
    // and formatted as expected when rendering a PDF via the admin panel

    $payment = explode('{{pdf_row_separator}}', $paymentInfo);

所以这就是发生的事情。我不知道怎么或为什么。真正的踢球者?在我的cron作业脚本中,如果我运行以下内容:

die(print_r($order->getPayment()->toArray()));

所有付款信息都在那里。

我在Magento网站的开发论坛上问过这个问题没有运气。我真的希望有人可以帮助解决这个问题,因为我已经用尽了我的调试工作。非常感谢你。

编辑:刚发现虽然Mage::helper('payment')->getInfoBlock($order->getPayment())->setIsSecureMode(true)->toHtml()返回格式正确的HTML。 ->toPdf仍未返回任何内容。

2 个答案:

答案 0 :(得分:2)

嗯,我希望这有助于其他人。有时当你问一个详细的问题时,它会让你更清楚地思考。这是一个非常简单的解决方案,没有明确的错误消息表明问题是什么!

Magento为模板文件adminhtmlfrontend使用了两个文件夹。默认情况下,后端上的付款数据助手pdf操作只有.phtml。我的脚本在前端运行,找不到此文件,并输出一个空字符串。

简而言之,如果您在Magento&lt; = 1.6.1中的PDF发票在前端呈现时缺少结算信息,请使用此文件:

app/design/adminhtml/default/default/template/paygate/info/pdf.phtml

然后将其复制/粘贴到:

app/design/frontend/base/default/template/paygate/info/pdf.phtml(或者,如果您愿意,可以使用自定义模板目录)

事后看来,我可能应该为我的cron脚本使用后端布局。

编辑:今天我了解了Magento中的var / log / system.log文件...(为了清晰起见,重新编辑)/var/log/system.log文件清楚地告诉我问题是什么,我只是没读过它。

答案 1 :(得分:0)

我尝试了@ Mahdi.Montgomery的解决方案,但它从来没有对我有用。

我的问题几乎相同,但我没有丢失结算信息,而是缺少付款方式。但我的直觉是根本原因是相同的 - 管理员和前端的PDF模板是不同的,这不是很直观。我的直觉恰好是正确的。

我在http://www.magentocommerce.com/boards/v/viewthread/463492/

中看到了这个链接
  

回答我自己的问题,这是一个Magento的bug,请参阅   http://www.magentocommerce.com/boards/{path:viewforum}/viewthread/270256/#t397540

     

修正:

     

在前端/基础/默认/模板/付款/信息中,创建一个文件夹pdf   并将所有.phtml文件复制到其中。

希望这有助于某人。