我正在尝试从Zend PDF生成的Magento发票上获取Zend Barcode呈现的条形码
我的独立测试条形码脚本如下所示,将生成带有条形码和文本“测试”的PDF文档。
$pdf = new Zend_Pdf();
$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
$page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 20);
//$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_TIMES_ROMAN);
Zend_Barcode::setBarcodeFont('gothic.ttf');
$filename= 'barcode.pdf';
$barCodeNo = '99700161BST004008501022006714';
$barcodeOptions = array(
'text' => $barCodeNo,
'barHeight'=> 74,
'factor'=>3.98,
//'fontSize' =>20,
//'drawText'=> false
);
$rendererOptions = array();
$renderer = Zend_Barcode::factory(
'code128', 'pdf', $barcodeOptions, $rendererOptions
)->setResource($pdf, $page)->draw();
$page->drawText('Test', 25, 720, 'UTF-8');
$pdf->pages[] = $page;
$pdf->save($filename);
Magento发票PDF就是这样发起的。
$pdf = new Zend_Pdf();
$this->_setPdf($pdf);
$style = new Zend_Pdf_Style();
$this->_setFontBold($style, 10);
foreach ($invoices as $invoice) {
if ($invoice->getStoreId()) {
Mage::app()->getLocale()->emulate($invoice->getStoreId());
Mage::app()->setCurrentStore($invoice->getStoreId());
}
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$pdf->pages[] = $page;
$order = $invoice->getOrder();
/* Add image */
$this->insertLogo($page, $invoice->getStore());
... / * CONTINUE BUILDING INVOICE * / ...
改编的条形码脚本会插入到某些项目下面。
/* Start Barcode */
$page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 20);
Zend_Barcode::setBarcodeFont('/srv/magento/media/fonts/gothic.ttf');
$barcodeOptions = array(
'text' => $trackingNumber,
'barHeight'=> 74,
'factor'=>3.98
);
$rendererOptions = array('height'=> 800,'width'=> 800);
$renderer = Zend_Barcode::factory(
'code128', 'pdf', $barcodeOptions, $rendererOptions
)->setResource($pdf, $page)->draw();
/* End Barcode */
但是,当在Magento发票PDF文档中运行时,它会在第124行的lib / Zend / Barcode / Renderer / Pdf.php中的非对象上返回错误调用成员函数getHeight()。
第124行包含
protected function _initRenderer()
{
if ($this->_resource === null) {
$this->_resource = new Zend_Pdf();
$this->_resource->pages[] = new Zend_Pdf_Page(
Zend_Pdf_Page::SIZE_A4
);
}
$pdfPage = $this->_resource->pages[$this->_page];
$this->_adjustPosition($pdfPage->getHeight(), $pdfPage->getWidth());
}
这似乎是请求pdfPage高度,但我不明白为什么只有当我输入我的条形码脚本和/或为什么pdfPage-> getHeight会在那里失败时它才会失败。
答案 0 :(得分:3)
我遇到了同样的问题。问题出现在下面的代码中:
$renderer = Zend_Barcode::factory('code128', 'pdf', $barcodeOptions,
$rendererOptions)->setResource($pdf, $page)->draw();
您为serResource提供的$ page变量是一个实际的pdf页面。它应该是页码。例如,下面的代码将在第一页上绘制条形码。只需根据需要更改$ pageNo。
/* Start Barcode */
$page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 20);
Zend_Barcode::setBarcodeFont('/srv/magento/media/fonts/gothic.ttf');
$barcodeOptions = array(
'text' => $trackingNumber,
'barHeight'=> 74,
'factor'=>3.98
);
$pageNo = 0;
$rendererOptions = array('height'=> 800,'width'=> 800);
$renderer = Zend_Barcode::factory(
'code128', 'pdf', $barcodeOptions, $rendererOptions
)->setResource($pdf, $pageNo)->draw();
/* End Barcode */
答案 1 :(得分:1)
我的解决方案是分离流程,而不是在pdf创建过程中自动创建条形码。在将条形码数字导入Magento时,我创建了条形码图像并保存到条形码编号为文件名的目录中。然后在PDF创建过程中,我使用$page->drawImage()
并通过名称/条形码从目录中调用图像。