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?
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:
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.
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:
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
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';
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
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:
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
Ouvrez load_font.php avec un éditeur de texte (par exemple vim). Changement require_once "autoload.inc.php";
à require_once "vendor/autoload.php";
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.
Vous devez avoir la police chargée dans DomPDF. Vérifiez cette page e pour plus de détails.
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".
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.
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), (cependant, j'ai d'abord déplacé mes fichiers rockwell.ttf et rockwell.afm vers le dossier des polices, puis j'ai installé ici)
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
c'est ça. il a généré un fichier rockwell.afm pour moi comme ça
utilisez simplement la famille de polices que vous souhaitez utiliser comme
body {
font-family: 'rockwell';
font-size:10;
}
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();