我正在尝试在 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 为模板文件 adminhtml
和 frontend
使用了两个文件夹。默认情况下,后端 上的支付数据助手 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/