php - Magento 中的 PDF 发票生成

标签 php zend-framework magento

我正在尝试在 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 后端检索发票时,它返回一个包含所有账单信息的格式化字符串。

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 仍然没有返回任何内容。

最佳答案

好吧,我希望这对其他人有帮助。有时当你问一个详细的问题时,它会让你的思路更清晰。这是一个非常简单的解决方案,没有明确的错误消息表明问题所在!

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

简而言之,如果您在 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(或者,如果您愿意,您的自定义模板目录)

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

编辑:今天我了解了 Magento 中的 var/log/system.log 文件...(为清楚起见重新编辑)/var/log/system.log 文件清楚地告诉我问题出在哪里,我只是没能读懂。

关于php - Magento 中的 PDF 发票生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8829214/

相关文章:

php - 使用搜索关键字获取两个表

php - 为什么阿拉伯数字 (١٢٣) 在文本框中不被接受为实数?

jquery - Magento Catalog_Products 在管理中使用 jQuery 拖放表格

mysql - 在 Magento 中按城市获取终身销售额

PHP 上传表单不会上传超过 16 个文件

php - 如何使用匿名函数和闭包正确设置 PDO 连接

PHP:在线程之间共享静态变量

php - Zend RegEx Validator 的自定义有意义的错误消息

mysql - 授予用户访问权限

php - __call 等同于公共(public)方法