4

私はPDFがまったく得意ではありません。「請求書コメントと注文コメント」と呼ばれるコメント付きの2つのセクションを以下に追加しました。私が抱えている問題は、これらの2つのセクションを適切なセルに配置できないことです。などを試してみると$pdf->Cell、恐ろしい白い画面が表示されます。何らかの理由でdrawText、テキストのレンダリングでのみ機能するようです。また、コメントはPDFページから拡張されています。改行を入力しようとしましたが、成功しませんでした。そのb/cコメントは配列だと思います。どんな助けでも素晴らしいでしょう。

class Inchoo_Invoice_Model_Order_Pdf_Invoice extends Mage_Sales_Model_Order_Pdf_Invoice
{
    protected function insertImage($image, $x1, $y1, $x2, $y2, $width, $height, &$page)
    {
        if (!is_null($image)) {
            try{
                $width = (int) $width;
                $height = (int) $height;

                //Get product image and resize it
                $imagePath = Mage::helper('catalog/image')->init($image, 'image')
                    ->keepAspectRatio(true)
                    ->keepFrame(false)
                    ->resize($width, $height)
                    ->__toString();

                $imageLocation = substr($imagePath,strlen(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB)));
                $image = Zend_Pdf_Image::imageWithPath($imageLocation);
                //Draw image to PDF
                $page->drawImage($image, $x1, $y1, $x2, $y2);
            }
            catch (Exception $e) {
                return false;
            }
        }
    }



    public function getPdf($invoices = array())
    {
        $width = 1000;
        $height = 1000;
        $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()) {
                Mage::app()->getLocale()->emulate($invoice->getStoreId());
            }
            $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
            $pdf->pages[] = $page;

            $order = $invoice->getOrder();

            /* Add image */
            $this->insertLogo($page, $invoice->getStore());


            /* Add address */
            $this->insertAddress($page, $invoice->getStore());

            /* Add head */
                        $page->drawText(Mage::helper('sales')->__('Invoice # ') . $invoice->getIncrementId(), 487, 780, 'UTF-8');
            $this->insertOrder($page, $order, Mage::getStoreConfigFlag(self::XML_PATH_SALES_PDF_INVOICE_PUT_ORDER_ID, $order->getStoreId()));

            $page->setFillColor(new Zend_Pdf_Color_GrayScale(1));
            $this->_setFontRegular($page);


            /* Add table */
            $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;

            /* Add table head */
            $page->setFillColor(new Zend_Pdf_Color_RGB(0.4, 0.4, 0.4));
            $page->drawText(Mage::helper('sales')->__('Products'), 35, $this->y, 'UTF-8');
            //Added for product image
            $page->drawText(Mage::helper('sales')->__('Product Image'), 279, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('SKU'), 125, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Price'), 380, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Qty'), 430, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Tax'), 480, $this->y, 'UTF-8');
            $page->drawText(Mage::helper('sales')->__('Subtotal'), 535, $this->y, 'UTF-8');

            $this->y -=15;

            $page->setFillColor(new Zend_Pdf_Color_GrayScale(0));

            /* Add body */
            foreach ($invoice->getAllItems() as $item){
                if ($item->getOrderItem()->getParentItem()) {
                    continue;
                }

                if ($this->y < 15) {
                    $page = $this->newPage(array('table_header' => true));
                }

                /* Draw item */
                $page = $this->_drawItem($item, $page, $order);

                /* Draw product image */
                $productId = $item->getOrderItem()->getProductId();
                $image = Mage::getModel('catalog/product')->load($productId);
                $this->insertImage($image, 345, (int)($this->y + 0), 275, (int)($this->y+65), $width, $height, $page);
            }

            /* Add totals */
            $page = $this->insertTotals($page, $invoice);








/*************************** This Is The Invoice Comments ***********************************/
$_tempY = $this->y;
$this->y += 10;

$commentsCollection = $invoice->getCommentsCollection(true);

$internalcomments = "Internal Invoice Comments";    
$page->drawText($internalcomments, 35, $this->y, 'UTF-8'); 

            foreach($commentsCollection as $comm)
            {
                $page->drawText($comm->getData('comment'), 235, $this->y, 'UTF-8');
                $this->y -= 10;

            } 

/*************************** End Invoice Comments ***********************************/







            if ($invoice->getStoreId()) {
                Mage::app()->getLocale()->revert();
            }
        }





/************************* This Is The Order Comments *******************************/

$_tempY = $this->y;
$this->y -= 80;

$statusHistoryCollection = $order->getStatusHistoryCollection();
$customersection = "Order Customer Comments";
   $page->drawText($customersection, 35, $this->y, 'UTF-8'); 
foreach ($statusHistoryCollection as $statushistory) {  
   $page->drawText($statushistory->getComment(), 35, $this->y, 'UTF-8');
   $this->y -= 10;
}

$this->y = $_tempY;

/************************* End Order Comments *******************************/



        $this->_afterGetPdf();

        return $pdf;
    }



}
4

1 に答える 1

1

請求書のコメントのセクションを完了したので、注文のコメントにも同じ手法を適用できます。サンドボックスでこれをテストしたところ、機能しました。120行のの値を、$textChunk = wordwrap($comm->getData('comment'), 120, "\n");請求書に最適な値に変更できます。テーブルヘッダーを追加しましたInternal Invoice Commentsが、必要に応じて削除できます。

/*************************** This Is The Invoice Comments ***********************************/

    $this->_setFontRegular($page, 10);

    // Begin table header
    $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));
    // end table header


    $_tempY = $this->y;

    $commentsCollection = $invoice->getCommentsCollection(true);

    $internalcomments = "Internal Invoice Comments";
    $page->drawText($internalcomments, 35, $this->y, 'UTF-8');

    $this->y -= 15;

    foreach($commentsCollection as $comm)
    {
            $textChunk = wordwrap($comm->getData('comment'), 120, "\n");
            foreach(explode("\n", $textChunk) as $textLine){
                    if ($textLine!=='') {
                            $page->drawText(strip_tags(ltrim($textLine)), 35, $this->y, 'UTF-8');
                            $this->y -= 15;
                    }
            }

     }

/*************************** End Invoice Comments ***********************************/

PS Magento PDFルーチンの改行の一部は、PHP + PDFLineBreakから採用されました。ありがとう@shaune!

于 2013-02-22T18:30:12.687 に答える