« Comme je n'ai pas trouvé ça sur internet... » (Merci à pingou pour cette superbe introduction...)
Mais je m'égare, expliquons auparavant les faits. J'ai passé pas mal de temps ce week-end à refaire mon Curriculum Vitae ; tant du point de vue technique que du point de vue contenu.
La chose est stockée dans un fichier XML ; la version HTML est présentée à l'aide d'une transformation XSLT assurée par PHP, la version PDF à l'aide de TCPDF.
L'ancienne version PDF utilisait une police de caractères qui n'était malheureusement pas libre. J'ai donc décidé d'utiliser dorénavant DejaVu.
Jusque là, rien de bien problématique me direz-vous, et vous avez parfaitement raison. Mais (oui, il y a un « mais »)... La nouvelle version PDF pèse 1004Ko, ce qui est beaucoup trop.
Une solution simple glanée sur le web consiste à utiliser les commandes ghostscript prévues à cet effet : pdf2ps et ps2pdf. Je me lance :
$ pdf2ps cv.pdf cv.ps $ ps2pdf cv.ps cv_light.pdf
Le résultat, un fichier de 116Ko. Très bien ! Mais ce nouveau fichier n'inclus pas les polices de caractères utilisées, le rendu en serait donc parfaitement escamoté sur les plates-formes n'en disposant pas :
$ pdffonts cv_light.pdf name type emb sub uni object ID ------------------------------------ ----------------- --- --- --- ---------
Une brève discussion sur IRC m'apprend qu'un ou deux petits paramètres supplémentaires à la commande ps2pdf me seraient fort utiles. Je tente donc à nouveau :
$ ps2pdf -dEmbedAllFonts=true -dUseFlateCompression=true -dOptimize=true cv.ps cv_light.pdf
Même résultat, pas de police embarquée dans mon PDF (mais, que fait la police ?). Après moult recherches, c'est finalement Pikachu_2015 qui a trouvé la solution (mille mercis à lui - et encore c'est peu !) pour son aide qui, une fois de plus, s'avère fort précieuse : en utilisant la commande pdftops en lieu et place de pdf2ps et le problème n'existe plus !
$ du -sh cv.pdf 1004K cv.pdf $ pdftops cv.pdf cv.ps $ ps2pdf -dEmbedAllFonts=true -dUseFlateCompression=true -dOptimize=true cv.ps cv_light.pdf $ pdffonts cv_light.pdf name type emb sub uni object ID ------------------------------------ ----------------- --- --- --- --------- WBKNZC+DejaVuSans-Bold_00 TrueType yes yes no 8 0 LNOFXB+DejaVuSans_00 TrueType yes yes no 10 0 IVPSUP+DejaVuSans-Oblique_00 TrueType yes yes no 12 0 $ du -sh cv_light.pdf 44K cv_light.pdf
Et voilà ! En espérant que cette petite astuce pourra servir à d'autres. Il est probable que l'utilisation d'options adéquates passées à pdf2ps renverraient le même résultat, mais je ne les ai pas trouvées.
Prochaine étape : réussir à faire maigrir le fichier PDF généré par PHP directement...


