The trashiest blog in the World...

Aller au contenu | Aller au menu | Aller à la recherche

Curriculum Vitae en PDF : au régime sans sel !

« 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...


Fatal error: Uncaught Error: [] operator not supported for strings in /var/www/svn_softs/dotclear_hg/inc/core/class.dc.postmedia.php:61 Stack trace: #0 /var/www/svn_softs/dotclear_hg/inc/core/class.dc.media.php(592): dcPostMedia->getPostMedia(Array) #1 /tmp/cbtpl/cd/17/cd17a781eadeb1772ccb06ad3a49b8f0.php(137): dcMedia->getPostMedia('91', NULL, 'attachment') #2 /var/www/svn_softs/dotclear_hg/inc/libs/clearbricks/template/class.template.php(268): include('/tmp/cbtpl/cd/1...') #3 /var/www/svn_softs/dotclear_hg/inc/public/class.dc.template.php(231): template->getData('post.html') #4 /var/www/svn_softs/dotclear_hg/inc/public/lib.urlhandlers.php(122): dcTemplate->getData('post.html') #5 /var/www/svn_softs/dotclear_hg/inc/public/lib.urlhandlers.php(523): dcUrlHandlers::serveDocument('post.html') #6 /var/www/svn_softs/dotclear_hg/inc/libs/clearbricks/url.handler/class.url.handler.php(166): dcUrlHandlers::post('04/01/2010/Curr...') #7 /var/www/svn_softs/dotclear_hg/inc/public/lib.urlhandlers.php(187): urlHandler->callHandler('pos in /var/www/svn_softs/dotclear_hg/inc/core/class.dc.postmedia.php on line 61