Wednesday, 11 July 2007Convertir un ficher HTML en document Word
Récemment j'ai eu la tâche de convertir des fichiers HTML en des fichiers Microsoft Word (.doc) - et idéalement par ligne de commande: je voulais l'intégrer dans une application PHP que j'utilise localement pour générer du contenu HTML, et proposer automatiquement à mes clients ces mêmes fichiers en .doc.
J'ai fait quelques recherches et testé quelques logiciels spécialisés, mais même si certains étaient bien confortables aucun ne générait un résultat acceptable. En fait, le seul qui sache "bien" le faire est Word lui-même... La solution était donc simple: ouvrir un fichier HTML avec Word, et le sauvegarder sous un autre nom. Sauf que il fallait pouvoir le faire de manière automatisée. Quelques recherches plus tard, j'avais trouvé une liste des paramètre de ligne de commande de Word - dont un permet d'exécuter une macro au démarrage. J'ai enregistré une macro très simple qui sauvegarde le fichier en cours et quitte Word. Ainsi, sur la ligne de commande je pouvais déjà ouvrir un fichier HTML, et le sauvegarder en doc - sauf que il l'enregistrait toujours au même endroit et le même dossier. En visual basic on a accès au nom et chemin du document ouvert, donc j'ai utilisé ces propriétés pour sélectionner automatiquement le dossier cible et le nom de fichier. Voici ce que ça donne:
Sub SaveAsDoc()
'
' SaveAsDoc Macro
' Saves the active file and exits the application.
' Used to convert HTML to doc files.
'
ChangeFileOpenDirectory ActiveDocument.Path
ActiveDocument.SaveAs FileName:=ActiveDocument.Name + ".doc", FileFormat _
:=wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
Application.Quit
End Sub
Après avoir ajouté la macro, on peut la lancer sur la ligne de commande avec la commande suivante: winword.exe /mSaveAsDoc document.html
Cette commande ouvre Word, charge le fichier spécifié et lance la macro "SaveAsDoc". Le fichier est directement sauvegardé dans le même dossier que le fichier ouvert, avec une extension .doc ajoutée au nom original. On retrouve donc après un fichier nommé document.html.doc
Assez confortable, si on peut supporter l'ouverture/fermeture de Word pour chaque fichier. Je n'ai pas testé en laissant Word ouvert parcontre. À partir de PHP, le seul hic est que je ne peux pas lancer d'applications avec un exec() - mais là encore il y a une solution assez simple: je crée automatiquement un fichier de ligne de commande contenant toutes les commandes de conversion, et sur lequel il ne reste plus qu'à cliquer. Gros avantages de cette solution: compatibilité parfaite + gratuité. Si quelqu'un a une meilleure solution ou un logiciel à proposer, dites-le moi. Tuesday, 6 June 2006Microsoft surprend...
Le programme Genuine Advantage de Microsoft prend des tournures intéressantes. Ce Weekend j'ai essayé d'installer la nouvelle beta du Internet Explorer 7 sur la machine d'un ami - et son Windows XP n'a pas passé la validation genuine intégré à l'installation du navigateur. Je n'étais pas bien surpris par ce fait-là, mais plutôt par le fait que j'avais la possibilité de me faire afficher les solutions possibles à ce problème sur le site Windowsupdate.
Curieux par nature, un click me montra qu'il est maintenant possible d'acheter une license directement de Microsoft, et de remplacer la license illicite par la nouvelle à l'aide d'un logiciel fourni par Microsoft pour ne même pas à avoir à réinstaller Windows. Très bonne initiative me suis-je dit, de rendre le processus aussi simple - mais là où je suis vraiment tombé parterre, c'est quand j'ai vu le prix: 135 Eur TTC - pour la license et le CD d'installation qu'il envoient en international. C'est le prix de la version OEM pour les revendeurs! De là à s'installer une version illicite de Windows pour profiter de cette offre alléchante, il n'y a qu'un pas... ...de plus, ils ont sorti la version beta du Media Player v11, et ça en jette. Wednesday, 3 May 2006Userscript pour DeviantART J'en avais un peu marre de la navigation actuelle de DeviantART [1], surtout depuis que j'ai souscrit à un shop [2] pour quelques-uns de mes dessins: il n'y a pratiquement pas de navigation du tout pour faciliter l'ajout et la gestion des produits Alors une fois n'est pas coutume, j'ai programmé un userscript pour Greasemonkey [3], cette petite extension très sympatique pour Firefox [4] qui permet d'ajouter du javascript à n'importe-quel site. Mon script, la deviantToolbox [5], est une collection de tous les liens disponibles pour un utilisateur authentifié à portée de click par un petit bouton flottant en haut à gauche. Comme d'habitude, je me suis un peu emporté en programmant tout ça, donc voici les caractéristiques de "la bête":
Pour pouvoir l'utiliser, il faut installer l'extension Greasemonkey v0.6.4 (ou plus) pour Firefox, et ensuite installer le script - je recommande de le faire par userscripts.org, c'est le plus simple. Il faut bien sûr aussi avoir un compte sur deviantART Liens: [1] deviantART [2] Mon shop sur deviantART [3] Extension Greasemonkey pour Firefox [4] Le navigateur Firefox [5] La deviantToolbox sur userscripts.org ou sur deviantART Tuesday, 28 February 2006Les expressions régulières pour les nuls...
...ou presque. J'ai toujours eu du mal avec les expressions régulières, et pourtant j'y suis confronté presque tous les jours. De temps en temps je refais des recherches pour voir si il n'existe pas enfin un logiciel qui aide à leur création - recherches qui mènent à des nuées de testeurs d'expressions régulières, ainsi qu'à quelques logiciels de qualité plus que douteuse et qui sont loin d'offrir ce que je voudrais.
Pour éviter une phrase du style "tout cela, c'est du passé! Maintenant, il y a...", tout simplement: j'ai trouvé exactement ce qu'il me fallait, et pourtant je suis vraiment über-exigeant: RegexBuddy [1]. Derrière ce nom je le concède on ne peut plus beauf se cache une vraie petite merveille. C'est tout simplement un éditeur d'expressions régulières visuel avec tout plein de boutons et un parseur d'expressions qui marche du tonnerre. Comme les images parlent plus que les mots: Dans le premier écran, on voit l'arborescence de l'expression régulière qu'on a crée, et souvent on peut aussi y trouver des conseils pour l'optimiser ou corriger des erreurs. Le second montre le menu contextuel qui permet d'insérer un élément quelconque à la position du curseur. Le dernier montre la fenêtre de création d'une classe de caractères. Pour quelqu'un qui débute c'est génial par l'aide que RegexBuddy propose, et pour les confirmés la recherche d'erreurs et l'optimisation sont des aides précieuses. Depuis que je l'utilise, je n'ai plus peur des expressions régulières! TM [1] Site officiel de RegexBuddy Wednesday, 18 January 2006Se débarrasser des désagréments de l'hébergement gratuit
Aaaah, quand je repense à l'âge d'or de l'hébergement gratuit, où une bannière sur la page était le seul désagrément - et déjà à ce moment-là, on se plaignait et on cherchait des méthodes pour s'en débarrasser. Là, maintenant, ce n'est pas bien différent, sauf que le contenu publicitaire est bien plus virulent...
Les bannières sont toujours de mise, bien sûr - mais elles ne sont plus seules. Navigations supplémentaires avec des boutons bien flashy qui mènent sur des offres douteuses, bannières Google et autres Iframes invasifs, captures des clicks dans la page pour ouvrir des popups intempestifs, calques flash... Il existe toujours des solutions pour s'en débarrasser ou au moins diminuer l'impact de ce marketing féroce, et j'aimerais en présenter quelques-unes qui sont assez efficaces, et imbattables combinées: L'overloading de fonctions javascriptLa plupart des sites d'hébergement ont une série de fichiers javascript qui sont automatiquement inclus dans toutes les pages, et qui contiennent des fonctions qui sont exécutées dans la page. Pour s'en débarrasser, il suffit d'utiliser l'overloading, donc de les redéfinir vides dans la page.Avantages: - simple Inconvénients: - no fonctionne que si on peut redéclarer la fonction avant qu'elle ne soit exécutée Disons par exemple que le fichier "bannieres.js" est inclus dans la page et qu'il contient la fonction "ouvrirPopups". Il suffit alors de redéclarer cette fonction (dans le code de la page ou par un fichier javascript à inclure après le fichier source) avant qu'elle ne soit exécutée: function ouvrirPopups() {}De cette manière, la fonction originale est remplacée par cette nouvelle version qui ne fait absolument rien La contre-attaque des feuilles de styleIci le but n'est pas d'enlever quoi que ce soit, mais tout simplement de cacher tout ce qui est indésirable. Le principe est simple: on place un calque <div> sur la page entière qui flotte au-dessus de tout, et qui est utilisé pour afficher le vrai contenu. Le plus grand avantage est qu'on n'a pas besoin de s'occuper de ce qu'il y a 'dessous' - si l'hôte change son contenu publicitaire, cela ne change rien au calque.Avantages: - rapide - simple - indépendant du contenu publicitaire Inconvénients: - n'enlève pas la capture des clicks dans la page Exemple de style pour le calque: <style>Bien sûr avec les feuilles de style on peut faire encore bien plus. Pour peu que des éléments "nocifs" dans la page ont un attribut "id", on peut très simplement s'en débarrasser même si ils sont activés dans la page par javascript: <style>Avec un peu plus de connaissances javascript et DOM (Document Object Model), on peut bien sûr faire encore bien plus, avec le gros désavantage que si l'hôte change ses scripts il faut tout refaire - et avec la complexité de certaines opérations, cela peut devenir coûteux en temps. C'est pour cela que personellement je préfère la solution du calque qui est simple et rapide à mettre en place. Wednesday, 11 January 2006Transformer une URL en imageCe petit bijou qui s'exécute aussi par ligne de commande, permettant d'automatiser certaines tâches, ce qui peut aussi être très utile. De plus, la doc est en français vu que Pixel Technology [2] est une entreprise française basée à Lille. Mise à jour: Nicolas m'a parlé d'une alternative qui est bien mieux et qui fonctionne directement dans Firefox À partir de la version 1.5: l'extension "Page Saver" [3] de Pearl Crescent. Merci pour l'info! [1] url2bmp (fr) [2] Site de Pixel-Technology (fr) [3] Extension Page Saver pour Firefox (en) Wednesday, 6 April 2005SelfHTML en français Des générations entières de passionnés allemands ont appris le HTML avec SelfHTML, un site de référence allemand du langage. Serge François a réalisé le grand exploit de traduire la référence version 8.0 entière en français, et je ne peux que recommander à tous d'y jeter un oeil.Quand je travaillais chez Metrix en allemagne, nous utilisions SelfHTML pour l'apprentissage du HTML de nos apprentis et stagiaires - c'est une très bonne entrée en matière, surtout si on est un peu guidé par un 'pro' à côté. N'étant au début qu'une référence HTML, d'autres technologies y ont été ajoutées, notamment le JavaScript, XHTML, CSS et même PHP et Perl (quoique pour ces derniers, il y a de meilleures références). Le plus pratique pour vite vérifier quelque-chose, comme les détails d'une balise HTML ou une fonction JavaScript, c'est la Quickbar, qui permet d'accéder très rapidement à ce que l'on cherche par un index. Pour ceux qui comprennent l'allemand, la version 8.1 en allemand a été mise à jour avec les derniers standards. Belle chose aussi, ont été rajoutés les navigateurs Firefox, Camino et Safari pour les versions des navigateurs à partir desquelles un élément es pris en charge. Ainsi, on peut voir d'un coup d'oeil que la balise HTML <FIELDSET> est prise en charge à partir de IE 4.0, Netscape 6.0, Opera 5.12, Firefox 1.0, Camino 3.3 et Safari 1.2. Il ne reste plus qu'à espérer qu'il reste encore un peu d'énergie à Serge pour la traduction de la nouvelle version Thursday, 3 March 2005Des générations de webdesigners se sont cassés les dents là-dessus...
Il y a un problème qui existe depuis des millénaires si on le place dans le bon contexte: les technologies Internet. Sur une échelle de temps de quatre ans, les possibilités de création de sites ainsi que les moyens et outils pour les créer ont évolué de manière exponentielle. On a finalement vu la disparition de Netscape 4, ce qui a ouvert la voie vers un HTML virtuellement sans tableaux. À partir d'Internet Explorer v5, la partie des standards qu'il gère précipite l'avènement du XHTML et des designs 'CSS Only'. L'arrivée en trombe de Mozilla et plus récemment de Firefox est encore une petite révolution à part - mais il est des choses dont on ne se débarrasse pas si facilement.
Depuis que les calques existent, et que les webdesigners utilisent cette technique pour créer menus dynamiques, fenêtres de dialogue et autres, ils se sont invariablement trouvés confrontés au champ de formulaire qui n'en a rien à cirer et qui flotte tranquillement dans son propre calque au-dessus de tout (en). C'est tout de même bizarre, non? EN quatre ans, avec tous les progrès qui ont été faits, ils n'ont même pas été capable de s'en occuper une fois pour toute. Surtout que le problème semble se concentrer sur le champ de formulaire <select> - et indépendamment du système d'exploitation. Je comprendrais si c'était lié à un système d'exploitation spécifique (par ex. les contraintes de développement sous windows), mais là ça frise le ridicule. À moins que la technique de superimposition des champs de fomulaire est commune à Windows et OSX Tuesday, 4 January 2005Le petit traducteur en herbe
Une fois de plus, je me suis trouvé confronté à un terme anglais qui me semblait assez difficile à traduire: backend. Après une recherche infructueuse dans mes dictionnaires, j'en suis retrourné à mon aide de traduction la plus fidèle: Google. Une petite recherche m'a permis de trouver des traducteurs de Debian engagés dans une gigantesque discussion précisément là-dessus. Après avoir fouillé un peu, je suis arrivé à la même conclusion qu'eux (voir le résumé): il n'y a pas de traduction passe-partout, il faut l'adapter au contexte.
Ainsi, dans mon contexte de logiciel utilisant un backend pour stocker des données, j'ai opté pour 'module', vu que le logiciel a une série de modules de stockage interchangeables (il s'agit de HTTP_SessionServer de Stéphane). Je suis aussi tombé sur un dictionnaire assez intéressant: le Dictionnaire des sciences et technologies de l'information. Très sobre et sans fonction de recherche, il n'est pas très maniable mais une bonne source d'information et d'inspiration. Tuesday, 14 December 2004Gérer plusieurs signatures email dans Mozilla
Comme j'ai pas mal de correspondances dans plusieurs langues, ça commençait à devenir lassant de devoir éditer mes signatures tout le temps (Regards / Salutations / Grüße...), comme Mozilla Mail ne permet de définir qu'une seule signature par compte email. Alors un petit tour sur mozdev m'a fait découvrir TagZilla, une petite extension qui permet à la base d'ajouter une petite citation dans un email ou même dans un champ de formulaire quand on est dans le navigateur (pratique pour les forums!). C'est prévu pour des citations à la base, mais ça marche parfaitement pour gérer des signatures.
Une fois installé, quand on écrit un email, on accède à la liste des signatures par click droit (ou CTRL+J): Ensuite, on peut sélectionner facilement une citation dans l'interface, et même par les boutons disponibles en insérer une aléatoirement si on veut Les signatures sont stockées dans un fichier texte, mais celui-ci est limité à une citation par ligne par défaut. Il faut donc aller dans les préférences pour activer l'utilisation de fichiers à lignes multiples. Dans ce cas, il faut définir un séparateur de ligne qui sera utilisé pour distinguer les signatures. Comme vous voyez, mon séparateur est assez massif, mais c'est pratique pour voir d'un coup d'oeil les signatures dans le fichier quand on veut l'éditer. D'ailleurs, voici ce que ça donne: Et voilà, avec ça il devient facile de gérer plusieurs signatures! Comme vous pouvez voir, dans ma liste de signatures, la premiere ligne de chaque signature est le nom sous lequel elle apparaît dans la liste - c'est un peu bête de ne pas pouvoir les nommer sans avoir à recourir à ça, mais bon - là ça ne fait qu'une ligne à effacer apres avoir ajouté la signature dans l'email Thursday, 21 October 2004Mettez-vous en hibernation en attendant votre accès ADSL
Ah, l'ère de la technologie dans laquelle nous nous trouvons me fascine. Le numérique est partout, c'est une immense révolution et tout ce qui est numérique se vend comme des petits pains... télé numérique, téléphone numérique, contrôle de trajectoire numérique dans les voitures, portail auto-surveillé à commande numérique, grille-pain à contrôle de chauffe électronique... plus c'est numérique mieux c'est - mais pas pour tout. Pour preuve, étant maintenant bien installé j'ai fait ma demande pour l'ADSL. Ô surprise, la charmante conseillère de France Télécom me dit que c'est possible, mais qu'il faut changer mon installation actuelle. En effet, ma ligne téléphone était une ligne numérique pour pouvoir surfer à 64K avec mon abonnement Numéris...
Quel est le problème me demandé-je, et ma surprise fut grande d'apprendre que l'ADSL a besoin d'une ligne analogique pour fonctionner, et que pour profiter de cette avancée technologique ma belle et étincelante ligne numérique ne servirait à rien. Faut dire qu'en allemagne, ils n'ont pas été autant à passer par la case Numéris (ISDN qu'on appelle ça là-bas): 20% en allemagne contre 55% en france. Et comme pour ma connexion ADSL en allemagne je n'ai pas eu besoin de faire ce changement, je ne me suis jamais posé la question Donc, O.K. pour changer la ligne, dis-je et c'est là que ça a commencé à se gâter: le changment de ligne était en somme vite fait (15 minutes top chrono par le technicien de France Télécom), mais fallait pas compter sur France Télécom pour être flexible: ma commande ADSL ne pouvait être traitée tant que les lignes n'étaient pas encore changées en analogique, donc le temps que le rdv soit pris avec le technicien, les lignes changées, et le changement enregistré dans la centrale, allez hop! 10 jours écoulés. Et attention: le jour où le technicien est passé, tout à coup plus de téléphone, internet, rien. Le vide absolu. Puis une heure plus tard, le technicien arrive avec un grand sourire aux lèvres, disant: "Ah, laissez-moi deviner: vous ne pouvez plus téléphoner. C'est normal!"... très rassurant! Et donc, comme mon modem numérique ne savait pas trop quoi faire avec une ligne analogique, exit internet jusqu'à-ce que mon ADSL soit là. Ah les boules les boules les boules!!! Le lendemain, petit coup de téléphone chez France Télécom pour savoir comment ça allait se passer après le changement en analogique. Et là, l'information qui tue: il faut compter 10 jours qu'ils me disent - aaaaaargh! à ce moment-là, ça faisait 4 jours que je n'avais plus de connexion et ma dépendance se faisait méchamment sentir. 14 jours sans Internet? autant aller me pendre tout de suite! Cependant, ayant pu sympathiser avec mon contact commercial durant ces quelques jours, j'ai pu avoir des infos intéressantes qui ont un peu relativisé mon cas: 1. J'ai pris la solution Ethernet, ce qui fait que j'ai reçu le kit de connexion dans un temps record. Et à cela une raison toute simple: en ce moment, il y a dans les 2000 commandes d'ADSL par jour avec la solution USB - assez pour que les constructeurs ne réussissent plus à suivre et augmenter les délais à près d'un mois pour le kit de connexion... J'imagine avec horreur d'être dans l'attente du kit de connexion sachant que la ligne est déjà prête! Donc, si vous avez le choix, préférez une solution plus traditionelle à un de ces gadgets USB dont on nous inonde de toutes parts. 2. La mise en route d'une ligne ADSL elle-même (ce qu'ils appellent installer les "Plots" ADSL sur la ligne en question) dure en moyenne dans les 10 jours, vu que les techniciens de France Télécom s'occupant du réseau ne le font pas que pour les clients de France Télécom, mais aussi pour ceux des autres opérateurs tels que Free. En effet, la connectivité au niveau des lignes fait partie du réseau France Télécom, faisant que même cette petite opération peut avoir des délais très longs. Je pense qu'il va falloir que je me réhabitue aux méthodes de travail d'ici - je me rappelle très bien de ma commande ADSL en allemagne: je suis passé au magasin télécom, ils m'ont donné mon kit de connexion et fait l'inscription. Puis ils m'ont dit que la ligne serait prête en une 1/2 heure environ. Le temps de rentrer, d'installer tout ça, voilà! Mais bon, il faut dire que Karlsruhe est le plus grand pôle internet d'Europe... Tout compte fait, ça aurait pu se passer bien plus mal. Et voyant à quel point je dépends d'Internet, je suis bien content que ça n'a pas duré plus longtemps. Après tout, c'est mon gagne-pain et même si je peux continuer à travailler sur mon serveur local il y a toujours tellement de petites informations auxquelles on a pas accès. J'étais d'ailleurs bien content d'avoir téléchargé le manuel PHP avant |
Calendrier
Recherche rapideCatégoriesSites à voirLe site officiel de php-tools (en)
Le blog de pat (en) In Golgota, Bertrand Mansion (en) re:\legion (de) Le site de Stéphane (de) Projets JAVA de Stéphane (en) gERD down under (de|en) La Tool Garage de Carsten (en) Vidéos YouTube Spiders on drugs (en) Projets personnelsSyndiquer ce BlogCreative commons |
||||||||||||||||||||||||||||||||||||||||||||||||||||
