Modificare il PDF delle fatture

Problema:

Ogni ordine effettuato da un nostro cliente porta in dote la possibilità di generare una fattura. Per il back-end, questa è un PDF, sul quale potrebbe essere necessario intervenire, aggiungendo campi od informazioni che Magento, di default, trascura.

Soluzione:

Facciamo un esempio rapido: inseriamo, se esistente, l’informazione sulla partita IVA del cliente. Ecco il percorso del file da modificare: /app/code/core/Mage/Sales/Model/Order/Pdf/Invoice.php. Esso si occupa della generazione del file PDF attraverso l’apposita libreria Zend. Quindi sarà sufficiente inserire nella prima funzione questo codice:

$tax_vat_number = $order->getData('customer_taxvat');
if ($tax_vat_number!='') $page->drawText('P. Iva cliente: '. $tax_vat_number, 120, 780, 'UTF-8');

I numeri 120 e 780 rappresentano rispettivamente l’ascissa orizzontale e quella verticale, responsabili del posizionamento del dato. Modificatele a piacimento, tenendo presente lo stile applicato in quel momento al testo.

Vediamo un secondo esempio: essendo la fattura un documento ufficiale, può essere utile inserire i propri dati commerciali, subito prima della chiusura della pagina. Niente di più facile: inseriamo questa riga subito prima della fine del ciclo foreach responsabile della generazione di ogni fattura:

$this->y -= 10;
$page->drawText('P.I. xxx Registro delle Imprese di Bologna N* xxx Numero REA BO - xxx', 35, $this->y, 'UTF-8');

Il primo comando sposterà il cursore di scrittura subito sotto l’ultima riga scritta dalle funzioni di Magento, quindi immediatamente dopo il totale dell’ordine, esattamente dove intendevamo.
Apprese queste nozioni, sarà un gioco da ragazzi personalizzare a piacimento l’output della nostra fattura PDF.

Limitare il peso del PDF

Le fatture create da Magento hanno un altro grosso inconveniente: il loro peso si aggira sempre nell’ordine di 1Mb. Davvero tanto per un documento che spesso è costituito da una sola pagina di testo e al massimo un logo. Cosa lo rende così pesante? La risposta è il font. Magento utilizza infatti il ‘Libertine’, che noi andremo a sostituire con l’Helvetica (questo è soltanto un esempio, si può utilizzare qualsiasi font presente tra le librerie opportune ZendPhp).
Aprite il percorso /app/code/core/Mage/Sales/Model/Order/Pdf/Items/Abstract.php e sostituite:

protected function _setFontRegular($size = 7)
    {
        $font = Zend_Pdf_Font::fontWithPath(Mage::getBaseDir() . '/lib/LinLibertineFont/LinLibertineC_Re-2.8.0.ttf');
        $this->getPage()->setFont($font, $size);
        return $font;
    }

    protected function _setFontBold($size = 7)
    {
        $font = Zend_Pdf_Font::fontWithPath(Mage::getBaseDir() . '/lib/LinLibertineFont/LinLibertine_Bd-2.8.1.ttf');
        $this->getPage()->setFont($font, $size);
        return $font;
    }

    protected function _setFontItalic($size = 7)
    {
        $font = Zend_Pdf_Font::fontWithPath(Mage::getBaseDir() . '/lib/LinLibertineFont/LinLibertine_It-2.8.2.ttf');
        $this->getPage()->setFont($font, $size);
        return $font;
    }

Con questo:

protected function _setFontRegular($size = 7)
    {
        $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
        $this->getPage()->setFont($font, $size);
        return $font;
    }

    protected function _setFontBold($size = 7)
    {
        $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);
        $this->getPage()->setFont($font, $size);
        return $font;
    }

    protected function _setFontItalic($size = 7)
    {
        $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD_ITALIC);
        $this->getPage()->setFont($font, $size);
        return $font;
    }

Otterrete ora documenti sull’ordine dei 50Kb.

0 commenti

Lascia un Commento

Vuoi partecipare alla discussione?
Sentitevi liberi di contribuire!

Lascia un commento