Un client de notre agence de développement spécialisée dans Prestashop a souhaité modifier le format de ses factures.

Pour cela, rien de plus simple, il suffit de modifier les fichiers dans le répertoire /pdf  et de les copier dans le répertoire du thème.

Après plusieurs essais concluants,  nous essayons de les générer dans une autre langue, et là c’est le drame…

De la mise en forme (gras, espacement, …)  qui disparaît, des valeurs (Numéro de facture) qui n’avaient pas la même valeur, bref une facture bien moins jolie.

Corriger le numéro de facture en fonction de la langue a été facile, il s’agit d’une configuration de Prestashop dans le menu Commandes -> Factures, bien faire attention au « Préfixe de facture »  qui peut varier en fonction de la langue.

Par contre, concernant le format des factures différent en fonction des langues ce fut une autre paire de manche.

Et la réponse est assez surprenante, mais Prestashop utilise des polices de caractères différentes en fonction de la langue utilisée pour la génération du Pdf.

En effet, voici les polices utilisées en fonction de la langue. Vous les trouverez dans le fichier /pdf/PDFGenerator.php

    public $font_by_lang = array(
        'ja' => 'cid0jp',
        'bg' => 'freeserif',
        'ru' => 'freeserif',
        'uk' => 'freeserif',
        'mk' => 'freeserif',
        'el' => 'freeserif',
        'en' => 'dejavusans',
        'vn' => 'dejavusans',
        'pl' => 'dejavusans',
        'ar' => 'dejavusans',
        'fa' => 'dejavusans',
        'ur' => 'dejavusans',
        'az' => 'dejavusans',
        'ca' => 'dejavusans',
        'gl' => 'dejavusans',
        'hr' => 'dejavusans',
        'sr' => 'dejavusans',
        'si' => 'dejavusans',
        'cs' => 'dejavusans',
        'sk' => 'dejavusans',
        'ka' => 'dejavusans',
        'he' => 'dejavusans',
        'lo' => 'dejavusans',
        'lt' => 'dejavusans',
        'lv' => 'dejavusans',
        'tr' => 'dejavusans',
        'ko' => 'cid0kr',
        'zh' => 'cid0cs',
        'tw' => 'cid0cs',
        'th' => 'freeserif'
    );

Et avec ces informations, tout s’explique, les espaces différents, les mises en forme qui ne sont pas identiques.