web-dev-qa-db-fra.com

Dompdf et définir différentes familles de polices

Lors de la génération d'un PDF il ignore totalement mon font-family attribut appliqué à mon CSS. Au lieu de dire Verdana, il utilise Times New Roman. Donc mon CSS ressemble à:

.sub-header {
    font-size: 1.4rem;
    text-transform: uppercase;
    font-family: NeutraText-Book !important;
    padding-bottom: 1.5rem;
}

Le PDF est généré comme ceci:

$pdf = PDF::loadHTML($view);
return $pdf->stream();

Comment puis-je définir la police que je veux?

22
John

Les documents PDF prennent en charge en interne les polices suivantes: Helvetica, Times-Roman, Courier, Zapf-Dingbats et Symbol (toutes utilisant le codage ANSI Windows). dompdf incorporera toute police référencée dans le PDF tant qu'il a été préchargé ou est accessible à dompdf et référencé dans un CSS @font-face règle. Le processus de chargement est nécessaire pour produire les métriques de police utilisées pour la définition du type.

dompdf prend en charge les mêmes polices que le R&OS sous-jacent PDF: Type 1 (.pfb) et TrueType (.ttf) tant que les mesures de police (.afm/.ufm) sont disponibles. php-font-lib, basé sur PHP, fournit un support pour le chargement et le sous-paramétrage des polices.

Le processus de chargement d'une police varie en fonction de vos besoins et de l'accès au serveur. Il existe trois façons de charger une police:

  1. Utilisez les règles CSS @ font-face pour charger une police au moment de l'exécution.
  2. Depuis la ligne de commande, utilisez dompdf/load_font.php.
  3. Accédez à dompdf/www/fonts.php dans le site d'administration inclus.

Utilisez les règles CSS @ font-face pour charger une police au moment de l'exécution

Aucun accès en ligne de commande requis. Tant que la police que vous souhaitez charger est disponible en ligne, vous pouvez la charger facilement via CSS.

@font-face {
  font-family: 'Open Sans';
  font-style: normal;
  font-weight: normal;
  src: url(http://themes.googleusercontent.com/static/fonts/opensans/v8/cJZKeOuBrn4kERxqtaUH3aCWcynf_cDxXwCLxiixG1c.ttf) format('truetype');
}

Depuis la ligne de commande, utilisez dompdf/load_font.php

Si vous avez accès à la ligne de commande, le chargement d'une police est aussi simple que:

[php] load_font.php "NeutraText-Book" /path/to/neutratext.ttf

Exécutez la commande sans aucun paramètre pour afficher le texte d'aide. Rapidement, cependant, les paramètres sont: nom de la police, fichier de police normal, fichier de police en gras, fichier de police en italique, fichier de police en gras-italique

Accédez à dompdf/www/fonts.php dans le site d'administration inclus

Auto-explicatif ( échantillon ). La seule chose que vous devez faire est de vous assurer que vous avez modifié le combo nom d'utilisateur/mot de passe administrateur


Remarque: load_font.php et le site d'administration ne seront pas inclus par défaut à partir de dompdf 0.7.0

Adapté du dompdf wiki ( nicode How-To , About Fonts and Character Encoding ) et d'autres sources.

25
BrianS

J'ai un problème similaire et je cherche une solution depuis 2 jours ... Avec la nouvelle version, la réponse acceptée ne fonctionne plus.

@ jay-bienvenu est correcte. La nouvelle version de DomPDF ne comprend pas tout et il y a aussi une documentation très pauvre.

Vous devrez donc:

  1. téléchargez load_font.php et placez-le dans le répertoire racine de votre projet: curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php

  2. puis ouvrez load_font.php avec votre éditeur et placez le chemin correct vers votre autoload.inc.php, par exemple require_once 'lib/dompdf/autoload.inc.php';

  3. Ouvrez la ligne de commande, accédez au dossier racine de votre projet et exécutez l'utilitaire avec le nom de la police que vous enregistrez et le chemin d'accès au fichier TFF, par exemple php load_font.php SourceSansPro ./pathToYourFolder/lib/dompdf/SourceSansPro-Regular.ttf ./pathToYourFolder/lib/dompdf/SourceSansPro-Bold.ttf

Maintenant, la police est installée. Vous pouvez l'utiliser comme vous le feriez normalement comme une police Web en html:

<html>
<head>
    <meta http-equiv="Content-Type" content="charset=utf-8" />
    <style type="text/css">
        @page {
            margin: 0;
        }
        * { padding: 0; margin: 0; }
        @font-face {
            font-family: "source_sans_proregular";           
            src: local("Source Sans Pro"), url("fonts/sourcesans/sourcesanspro-regular-webfont.ttf") format("truetype");
            font-weight: normal;
            font-style: normal;

        }        
        body{
            font-family: "source_sans_proregular", Calibri,Candara,Segoe,Segoe UI,Optima,Arial,sans-serif;            
        }
    </style>
</head>
<body>
Your code here ....
</body>
</html>

et pour faire le pdf en php:

require_once 'lib/dompdf/autoload.inc.php';

use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml($html, 'UTF-8');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4');

$dompdf->set_option('defaultMediaType', 'all');
$dompdf->set_option('isFontSubsettingEnabled', true);

// Render the HTML as PDF
$dompdf->render();

[~ # ~] modifier [~ # ~] : j'ai fait un article de blog sur la façon d'utiliser dompdf et d'appliquer des polices personnalisées afin que les choses puissent être plus détaillé: https://www.blog.lab21.gr/using-domdpf-create-pdf-php

15
Mayra M

Dompdf's À propos des polices et de l'encodage des caractères indique que l'utilitaire de police est inclus mais ne vous dit pas comment l'obtenir et l'exécuter. Voici comment:

  1. Téléchargez load_font.php dans le répertoire racine de votre projet. curl -o load_font.php https://raw.githubusercontent.com/dompdf/utils/master/load_font.php

  2. Ouvrez load_font.php avec un éditeur de texte (par exemple vim). Changement require_once "autoload.inc.php"; à require_once "vendor/autoload.php";

  3. Exécutez l'utilitaire avec le nom de la police que vous enregistrez et le chemin d'accès au fichier TFF. Par exemple: php load_font.php 'Brush Script MT' https/fonts/brush-script-mt.ttf

Lisez le code pour load_font.php pour plus d'informations sur l'utilisation de cette commande.

4
Jay Bienvenu

Vous devez avoir la police chargée dans DomPDF. Vérifiez cette page e pour plus de détails.

1
cOle2

Merci pour la réponse de Brians ci-dessus, mais dans mon cas une seule option a fonctionné qui est d'installer la police en utilisant "dompdf/www/fonts.php"

il a installé la police en naviguant vers dompdf/www/fonts.php dans le site d'administration inclus. (ce sera quelque chose comme http://yoursite.com/sites/all/modules/print/lib/dompdf/www/fonts.php )

Allez en bas de la page et cliquez sur un lien

[Authenticate to access this section][1]

il arrive avec une alerte disant "le mot de passe doit être changé dans dompdf_config.custom.inc.php".

  1. Accédez au fichier dompdf_config.custom.inc.php et ajoutez le nom d'utilisateur et le mot de passe au bas du fichier. vous pouvez trouver "DOMPDF_ADMIN_USERNAME" et "DOMPDF_ADMIN_PASSWORD". décommentez ces 2 lignes et ajoutez le nom d'utilisateur et le mot de passe pour l'installation de la police.
  2. Maintenant, cliquez à nouveau sur [Authenticate to access this section][2], il demande le nom d'utilisateur et le mot de passe. entrez le nom d'utilisateur et le mot de passe que vous avez donnés à l'étape un.

  3. si vous parcourez à nouveau le même chemin fonts.php dans votre navigateur, vous pouvez trouver la section installer de nouvelles polices en bas de la page (vous pouvez voir dans l'image)install new fonts, (cependant, j'ai d'abord déplacé mes fichiers rockwell.ttf et rockwell.afm vers le dossier des polices, puis j'ai installé ici)

  4. choisissez le fichier ttf de police souhaité, puis installez-le. il a installé et affiché dans les polices installées mais cela n'a pas fonctionné pour moi. j'ai donc dû créer un fichier .afm pour ma nouvelle police (ici je voulais utiliser la police rockwell)

étapes que j'ai faites pour créer mon fichier rockwell.afm. 1

J'ai fait cela comme dompdf 14 autres polices natives, je ne sais pas dans quelle mesure c'est acceptable. mais ça a marché pour moi. Je voulais juste le faire.

  • J'ai ajouté ma police Rockwell partout où j'ai trouvé les noms de police natifs dompdf dans les fichiers php

  • Ajout de "rockwell" à public static $native_fonts tableau dans le fichier dompdf/include/dompdf.cls.php

  • Ajout du tableau "rockwell" à
    fichier dompdf/lib/fonts/dompdf_font_family_cache.dist.php comme ci-dessousadding rockwell array

c'est ça. il a généré un fichier rockwell.afm pour moi comme ça rockwell afm file

  • utilisez simplement la famille de polices que vous souhaitez utiliser comme

     body {  
                    font-family: 'rockwell';
                    font-size:10;
                    }   
    
1
Developer

Vous devez utiliser la bibliothèque dompdf pour générer un pdf avec une famille de polices spécifique.

$html ='<!doctype html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';

$html.='</head><body>';
$html.="<style> 
@font-face { font-family: 'Roboto Regular'; font-weight: normal; src: url(\'fonts/Roboto-Regular.ttf\') format(\'truetype\'); } 
@font-face { font-family: 'Roboto Bold'; font-weight: bold; src: url(\'fonts/Roboto-Bold.ttf\') format(\'truetype\'); } 
body{ font-family: 'Roboto Regular', sans-serif; font-weight: normal; line-height:1.6em; font-size:17pt; }
h1,h2{ font-family: 'Roboto Bold', sans-serif; font-weight: bold; line-height:1.2em; }
</style>";

$html.='test <br>
<span style="font-family:\'Open Sans\'"> test </span> <br>          ';
$html.= '</body></html>';

$dompdf = new Dompdf\Dompdf();
$dompdf->load_html($html,'UTF-8');
$dompdf->set_paper('A4', 'portrait');
$dompdf->render();
$dompdf->stream();
0
Ramesh