mardi 7 février 2017

mPDF, une très bonne alternative à html2pdf pour produire des fichiers PDF en Php

Depuis 2013, j'ai beaucoup utilisé html2pdf pour produire des fichiers PDF à partir de mes applications Php.

Pendant longtemps je m'en suis servi pour publier des documents techniques à partir d'informations enregistrées dans des bases de données.
Puis j'ai eu un client dans le domaine de l'édition qui voulait produire des ouvrages de 300 - 400 pages avec des techniques de mise en page assez différentes de celles que j'utilisais jusqu'à présent et là j'ai dû faire face à plusieurs problèmes :

  • Le serveur de production était sous FreeBSD avec Php 5.2.17.
    Après pas mal d'efforts j'ai quand même réussi à installer html2pdf sans composer.
  • html2pdf permet bien de créer automatiquement une table des matières à la fin de l'ouvrage mais ses éléments ne sont pas cliquables.
    J'ai donc dû modifier la fonction qui génère la tables des matières pour arranger ça. Modification assez simple, sans risque d'effets de bord.
  • html2pdf n'intègre aucune balise de contrôle pour gérer les "pages impaires" (dans un livre, les chapitres doivent toujours commencer sur une page impaire).
    J'ai donc dû modifier la bibliothèque pour intégrer une nouvelle balise qui remplisse cette fonction.
  • La justification dans les paragraphes comportant du texte avec des styles différents donnait parfois des résultats très surprenants.
    Je me suis donc une fois de plus attaqué au code source de html2pdf pour corriger le problème. Au bout d'une semaine de travail tard dans la nuit, j'y suis enfin arrivé.

Après cette dernière modification, j'avais une solution qui fonctionnait vraiment bien mais j'avais eu tellement de mal à comprendre le code que j'avais un peu perdu confiance dans la bibliothèque.
Du coup, j'en ai cherché une autre qui permette elle aussi de créer des PDF en Php à partir d'un contenu en html. C'est là que j'ai découvert mPDF.

  • La version 6 de mPDF peut s'installer sans composer, ce qui n'a pas beaucoup d'importance en général mais qui me simplifiait bien la vie avec mon vieux serveur.
  • La table des matières générée par mPDF est cliquable ou plus exactement on peut dire à mPDF de générer une table des matières cliquable.
  • mPDF intègre des balises de contrôle pour gérer les pages paires/impaires et avec des subtilités bien pratiques que je n'avais pas implémentées lorsque j'avais modifié html2pdf.
  • La justification fonctionne à merveille et peut être paramétrée pour répartir les espacements entre les mots et/ou entre les caractères.
  • mPDF offre un bien meilleur support des balises html/css et (dans mon cas) est au moins deux fois plus rapide que html2pdf.
  • mPDF supporte les alphabets non latin et les langages qui s'écrivent de droite à gauche ou de bas en haut.
    C'est dans la doc mais je ne l'ai pas encore testé. J'espère que ça fonctionne car c'est important pour mon client.

Après avoir épluché le manuel et m'être laissé séduire par les fonctionnalités de cette nouvelle bibliothèque, j'ai fait quelques tests qui ont tous réussi du premier coup puis j'ai modifié mon application pour remplacer html2pdf par mpdf.
Ce dernier point m'a pris quelques heures mais depuis tout va vraiment bien et la diminution du temps de production des ouvrages est un vrai bonheur.

vendredi 6 janvier 2017

Menus et souris de Emacs quand on l'utilise à travers SSH

Quand j'ai besoin de configurer ou d'effectuer une autre intervention sur un serveur linux j'ouvre un terminal et je me connecte avec ssh.
Pour éditer des fichiers texte, j'utilise Emacs comme sur mes machines personnelles. Mais dans le terminal et à travers ssh il est difficile d'accéder aux menus de la barre supérieure et la souris ne fonctionne pas.

Accéder aux menus : M-x menu-bar-open ouvre le premier menu et on peut ensuite naviguer entre les options avec les flèches du clavier.

Activer le fonctionnement de la souris : M-x xterm-mouse-mod permet d'activer / désactiver la souris.
Cette configuration peut être enregistrée à l'aide du menu Options/Customize Emacs/All Settings Matching.
Taper par exemple xterm dans la barre de recherche puis un nouveau buffer apparaît affichant toutes les options correspondantes.
Utiliser le bouton Toggle pour changer l'état de la souris puis le bouton State et choisir l'option 1 = Save for future sessions.

samedi 18 juin 2016

CyanogenMod pour une tablette Google Nexus 7 Wifi 2012

Cela fait longtemps que j'utilise une tablette Nexus 7 version 2012 de chez Google. Je trouve que ce format reste assez pratique à transporter tout en offrant un écran assez confortable.
J'avais bien remarqué qu'elle était devenue un peu moins réactive au fil des évolutions d'Android mais j'en ai toujours été très content.

Cependant après une ultime mise à jour d'Android elle est devenue inutilisable : Extrême lenteur et surtout des plantages inopinés et très fréquents. Elle s'est mise à s'éteindre brusquement aussi bien lorsque je m'en servais que lorsqu'elle était en veille. J'ai cherché un peu et j'ai découvert que je n'étais pas le seul à rencontrer ce problème.

J'ai un peu tout essayé : Vidage des différents caches, désinstallation de certaines applications, limitation du nombre de tâches en arrière plan, réinstallation complète, etc.
Rien à faire, au bout de quelques minutes ou de quelques heures, le problème revenait.

Un peu en désespoir de cause, je l'ai déverrouillée et j'ai installé la dernière version stable disponible de CyanogenMod (12-1) avec Android 5.1.1.
C'était la première fois que je faisais ça mais tout est très bien expliqué ici et l'opération s'est déroulée sans problème.
Aussitôt ma tablette a retrouvé sa réactivité d'origine et n'a plus connu aucune panne.

J'ai attendu un peu avant de crier victoire mais cela fait maintenant deux mois que je n'ai plus aucun problème. Si toutefois ceux ci devaient réapparaître, je pense que je réinstallerai CyanogenMod avec Android 4.4 qui était la version installée d'origine.