Magento2 更改getPdf函数
我正在尝试更改Magento2 更改getPdf函数,magento2,Magento2,我正在尝试更改getPdf函数,将orderid发送到\u Addfooter以获取最终税额。我创建了一个模块,并按原样添加了函数,以查看它是否正常工作,但当我尝试生成发票时,我发现了以下错误。我在模块中添加了\u drawTotal函数,但另一个函数开始出错。我不想在我的模块中复制整个文件 Invalid method Vendor\InvoicePdf\Model\Order\Pdf\Invoice::_drawTotal 我是Magento2和PHP的新手。理想情况下,我尝试删除每个项目
getPdf
函数,将orderid发送到\u Addfooter
以获取最终税额。我创建了一个模块,并按原样添加了函数,以查看它是否正常工作,但当我尝试生成发票时,我发现了以下错误。我在模块中添加了\u drawTotal
函数,但另一个函数开始出错。我不想在我的模块中复制整个文件
Invalid method Vendor\InvoicePdf\Model\Order\Pdf\Invoice::_drawTotal
我是Magento2和PHP的新手。理想情况下,我尝试删除每个项目的税列,然后在注释部分,我尝试添加总税值
下面是我的模块代码,请让我知道我遗漏了什么
<?php
namespace Vendor\InvoicePdf\Model\Order\Pdf;
use Magento\Sales\Model\ResourceModel\Order\Invoice\Collection;
class Invoice extends \Magento\Sales\Model\Order\Pdf\Invoice
{
protected function _drawHeader(\Zend_Pdf_Page $page)
{
/* Add table head */
$this->_setFontRegular($page, 10);
$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, 0, 0));
//columns headers
$lines[0][] = ['text' => __('Products'), 'feed' => 35];
$lines[0][] = ['text' => __('SKU'), 'feed' => 290, 'align' => 'right'];
$lines[0][] = ['text' => __('Qty'), 'feed' => 435, 'align' => 'right'];
$lines[0][] = ['text' => __('Price'), 'feed' => 360, 'align' => 'right'];
/*$lines[0][] = ['text' => __('Tax'), 'feed' => 495, 'align' => 'right'];*/
$lines[0][] = ['text' => __('Subtotal'), 'feed' => 565, 'align' => 'right'];
$lineBlock = ['lines' => $lines, 'height' => 5];
$this->drawLineBlocks($page, [$lineBlock], ['table_header' => true]);
$page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
$this->y -= 20;
}
/**
* Return PDF document
*
* @param array|Collection $invoices
* @return \Zend_Pdf
*/
public function getPdf($invoices = [])
{
$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()) {
$this->_localeResolver->emulate($invoice->getStoreId());
$this->_storeManager->setCurrentStore($invoice->getStoreId());
}
$page = $this->newPage();
$order = $invoice->getOrder();
$_SESSION['orderid'] = $order->getRealOrderId();
/* Add image */
$this->insertLogo($page, $invoice->getStore());
/* Add address */
$this->insertAddress($page, $invoice->getStore());
/* Add head */
$this->insertOrder(
$page,
$order,
$this->_scopeConfig->isSetFlag(
self::XML_PATH_SALES_PDF_INVOICE_PUT_ORDER_ID,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$order->getStoreId()
)
);
/* Add document text and number */
$this->insertDocumentNumber($page, __('Invoice # ') . $invoice->getIncrementId());
/* Add table */
$this->_drawHeader($page);
/* Add body */
foreach ($invoice->getAllItems() as $item) {
if ($item->getOrderItem()->getParentItem()) {
continue;
}
/* Draw item */
$this->_drawItem($item, $page, $order);
$page = end($pdf->pages);
}
/* Add totals */
$this->_drawTotal($page);
$this->insertTotals($page, $invoice);
if ($invoice->getStoreId()) {
$this->_localeResolver->revert();
}
}
$this->_Addfooter($page,$this->getOrderNote($order));
$this->_afterGetPdf();
return $pdf;
}
/**
* Set font as regular
*
* @param \Zend_Pdf_Page $object
* @param int $size
* @return \Zend_Pdf_Resource_Font
*/
protected function _setFontRegular($object, $size = 7)
{
$font = \Zend_Pdf_Font::fontWithPath(
$this->_rootDirectory->getAbsolutePath('lib/internal/Font/DejaVuSans.ttf')
);
$object->setFont($font, $size);
return $font;
}
/**
* Set font as bold
*
* @param \Zend_Pdf_Page $object
* @param int $size
* @return \Zend_Pdf_Resource_Font
*/
protected function _setFontBold($object, $size = 7)
{
$font = \Zend_Pdf_Font::fontWithPath(
$this->_rootDirectory->getAbsolutePath('lib/internal/Font/DejaVuSansCondensed-Bold.ttf')
);
$object->setFont($font, $size);
return $font;
}
/**
* Set font as italic
*
* @param \Zend_Pdf_Page $object
* @param int $size
* @return \Zend_Pdf_Resource_Font
*/
protected function _setFontItalic($object, $size = 7)
{
$font = \Zend_Pdf_Font::fontWithPath(
$this->_rootDirectory->getAbsolutePath('lib/internal/Font/DejaVuSansCondensed-Oblique.ttf')
);
$object->setFont($font, $size);
return $font;
}
}
您的drawTotal函数定义在哪里?它存在于原始类中。在我的模块中,我扩展了该类,因此它应该将该函数从基函数中带出来。您使用的是哪个Magento版本?因为我已经检查过了,没有名为_drawTotal的函数。感谢James检查,我们有magento 2.2.6。如果默认情况下该函数不存在,那么我相信这是之前的开发人员对原始模块进行的黑客攻击:-(