Magento中的PDF发票生成

6
我正在尝试检查Magento中的新订单,如果存在,则向网站管理员发送PDF发票。除了PDF之外,一切都很顺利。
在尝试外部创建PDF发票时,所有的账单信息都没有出现在渲染后的PDF中。创建发票相当简单,但是找到缺失账单信息的原因对我来说是不可能的。以下是我所学到的内容。
下面是我用于创建实际PDF发票的代码。这是在默认的pdfinvoicesAction中使用的相同代码,用于为管理员后端创建PDF(app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php:459)。 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后端检索发票时,它返回一个格式化的字符串,其中包含所有账单信息。 < p > < code > 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个回答

2
希望这篇文章能帮助到其他人。有时候,当你提出详细的问题时,它会让你更清晰地思考。这是一个非常简单的解决方案,没有明确的错误信息表明问题所在!
Magento使用两个文件夹来存储模板文件:adminhtml和frontend。默认情况下,在后端只有一个.phtml文件用于支付数据助手pdf操作。我的脚本在前端运行,找不到这个文件,并输出一个空字符串。
因此,简而言之,如果您在Magento <= 1.6.1中渲染前端时发现PDF发票缺少账单信息,请按照以下步骤操作:
将此文件复制:
app/design/adminhtml/default/default/template/paygate/info/pdf.phtml
粘贴到:
app/design/frontend/base/default/template/paygate/info/pdf.phtml(或者,如果您愿意,可以放到自定义模板目录)
回想起来,我可能应该在我的计划任务脚本中使用后端布局。
编辑:今天我了解了Magento中的var/log/system.log文件……(为了更加清晰地阐述,重新编辑)/var/log/system.log文件清楚地告诉我问题出在哪里,但我没有读懂它。

我刚遇到了同样的问题。在使用xdebug进行步进调试时,我注意到PDF要从这个模板文件中加载付款信息:frontend/base/default/template/payment/info/pdf/purchaseorder.phtml,而这个文件在默认的Magento中并不存在。 - Chuck D

0

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

我的问题几乎相同,但与缺少账单信息不同,我缺少付款方式。但我的直觉是根本原因是相同的 - 管理员和前端的PDF模板不同,这不是很直观。我的直觉是正确的。

我从http://www.magentocommerce.com/boards/v/viewthread/463492/看到了这个链接

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

修复方法:

在frontend/base/default/template/payment/info中创建一个名为pdf的文件夹,并将所有.phtml文件复制到其中。

希望这能帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接