J'ai essayé d'utiliser la police Helvetica lors de la création du fichier PDF, mais celle-ci n'est pas reflétée dans le fichier PDF.
J'ai fait des recherches sur Google et trouvé des solutions, mais aucune n’est viable.
Solution essayée 1
J'ai trouvé la même chose ici: Problème de police
Essayé la dernière solution mentionnée là-bas
la solution consiste à define @ font-face dans votre css et à avoir le lien src vers un hôte externe accessible par wkhtmltopdf
Mais la solution ne fonctionne pas.
Solution testée 2 J'ai également essayé d'utiliser Google API, mais le résultat n'est toujours pas exploitable . police helvetica
voici un exemple Exemple de police personnalisée
Solution testée 3 J'ai essayé de le faire en utilisant la propriété css @page. Mais cela ne fonctionne pas non plus.
Quelle est l'approche pour une solution viable.
Le moyen le plus simple de résoudre les problèmes de police de wkhtmltopdf
consiste à coder la police en Base64 ( vous pouvez utiliser cet outil ) et l'inclure dans votre CSS:
@font-face {
font-family: 'Helvetica';
src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}
Cela fonctionne avec toutes les polices (y compris Google Fonts) et garantit la compatibilité entre plates-formes sur différents ordinateurs et systèmes d'exploitation.
Pour moi, charger des polices à partir de Google Fonts ne fonctionnait pas. Et mettre du binaire base64 dans un fichier CSS me semble un peu trop cher (les types coréens mesurent plusieurs mégaoctets). Je vous recommande d'installer les polices que vous devez utiliser sur la machine. Pour Ubuntu, vous pouvez simplement télécharger des fichiers de polices à partir de Google Fonts, les copier dans le répertoire $HOME/.fonts
et exécuter la commande fc-cache
en ligne de commande pour reconstruire la liste des polices.
$ mkdir ~/.fonts
$ copy your-font-file.ttf ~/.fonts/
$ fc-cache -fv
Pour une application Rails, vous pouvez créer un lien symbolique
$ ln -s /your/app/root/assets/fonts ~/.fonts
Ensuite, vous pourrez lister toutes les polices disponibles.
$ fc-list
Nimbus Sans L:style=Regular Italic
URW Palladio L:style=Roman
Century Schoolbook L:style=Bold Italic
Nimbus Sans L:style=Bold
URW Chancery L:style=Medium Italic
Nimbus Roman No9 L:style=Regular
Century Schoolbook L:style=Bold
Century Schoolbook L:style=Italic
Nimbus Sans L:style=Regular
....
Pour ajouter à la mêlée, en utilisant wkhtmltopdf 0.12.1 (with patched qt)
sur linux, cela a fonctionné pour moi:
@font-face {
font-family: dejaSansMono;
src: url('file:///usr/share/fonts/dejavu/DejaVuSansMono.ttf');
}
C'est-à-dire, en spécifiant le chemin d'accès au .ttf
. Nommer simplement une famille de polices, n’importe quelle famille de polices, n’a pas fonctionné même si cela s’est fait dans le navigateur.
J'ai eu le même problème avec PT Sans de Google. Ce qui a fonctionné pour moi a été le processus suivant:
Note que je n'ai pas utilisé base64 et que cela a fonctionné comme prévu.
J'espère que ça aide
Pour convertir HTML en PDF by wkhtmltopdf essayez d’éviter l’apparence de la police woff. Utilisez le format trutype des polices Web de Google avec encodage en base64.
Récemment, j'ai essayé d'utiliser une police Web Google à partir de Google Web Fonts. Mais dans le navigateur, il s'affiche correctement, mais il ne s'affiche pas après la conversion de HTML en PDF.
Puis, après avoir effectué de nombreuses recherches sur le Web, j’ai trouvé des outils pour coder les polices au format base64 et obtenir également du CSS pour @ font-face .
répondre aux besoins des utilisateurs de linux (x64): vous installez le fichier de polices ttf dans/usr/share/fonts/font-folder/font-name
puis, dans votre fichier css, utilisez le nom de police qui est répertorié dans fc-list, vous n'avez pas besoin d'utiliser @ font-face, utilisez simplement le nom de police dans votre css
exemple Verdana.ttf ======
copier de la machine locale au serveur dans /usr/share/fonts/Verdana/Verdana.ttf
fc-list pour obtenir le nom de la police (ce sera probablement Verdana)
Puis utilisez dans votre css P {font-family: 'Verdana'}
et c'est tout! m'a pris un certain temps pour le réparer.