Bonjour,
Je suis en train de développer un système de conversion en PDF de documents Word en PHP. Cela marche assez bien.
Cependant certains documents peuvent être buggés et plante l'instance de word en charge de la conversion sur le serveur (par exemple si un tableau dans le document est endommagé).
Directement en VBA j'arrive à éviter la majorité des plantages en mettant un bête et méchante "ON ERROR RESUME NEXT", c'est moche, c'est pas bien mais la gestion des erreurs en VBA étant ce qu'elle est j'ai pas trop le choix.
En général les plantages à cause d'un document défectueux se passe au moment de l'ouverture du fichier. Je voudrais donc en amont pouvoir forcer l'ouverture en attrapant l'erreur VBA coté PHP. Mais là je sèche un peu.
Voici le code en VBS qui fonctionne
Code :
- Dim WordApp,doc
- Set WordApp = CreateObject("Word.Application" ) '-- ouvre une session Word
- ON ERROR RESUME NEXT
- WordApp.Visible = True
- WordApp.Documents.Open("C:\Documents and Settings\Antoine\Bureau\LETTRE MOTI.doc" )
- Set doc = WordApp.ActiveDocument
- doc.ExportAsFixedFormat "C:\Documents and Settings\Antoine\Bureau\test.pdf",17
- WordApp.Quit
|
Voici le code PHP qui pose problème sur quelques rares documents car il n'y a pas de gestion d'erreur VBS (je précise qu'un try catch coté php ne permettra pas de convertir le fichier alors que souvent il s'agit d'un simple warning qui ne pose aucunement problème.
Code :
- $appliOLE = new COM("word.application" ) or die("WORD ne se connecte pas" );
- $appliOLE->Visible = 0;
- $appliOLE->Documents->Open( $fichierPathTmp ); //warning non catché à l'ouverture (et aucun retour en php)
- $appliOLE->Documents[1]->ExportAsFixedFormat( $fichierPathPDF , 17); // Impossible de sauvegarder ou de faire quoi que ce soit sur le document si warning à l'ouverture
- $appliOLE->Quit();
|
Avez vous une idée ?