IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[OpenXML] Erreur de génération de fichier


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut [OpenXML] Erreur de génération de fichier
    Bonjour tout le monde,

    J'ai un petit problème à vous soumettre. Je me lance à la conquête de OpenXML en commençant par créer un document docx. Pour ca je me suis appuyé sur l'article dans la faq de Guillaume Rossolini (qui est très bien faite merci beaucoup).

    Mon code correspond donc exactement à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?php
     
    $types = new DOMDocument('1.0', 'utf-8');
     
    $XMLTypes = $types->createElement('Types');
    $XMLTypes->setAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/content-types');
    $types->appendChild($XMLTypes);
     
    $XMLType = $types->createElement('Default');
    $XMLType->setAttribute('Extension', 'rels');
    $XMLType->setAttribute('ContentType', 'application/vnd.openxmlformats-package.relationships+xml');
    $XMLTypes->appendChild($XMLType);
     
    $XMLType = $types->createElement('Default');
    $XMLType->setAttribute('Extension', 'xml');
    $XMLType->setAttribute('ContentType', 'application/xml');
    $XMLTypes->appendChild($XMLType);
     
    $XMLType = $types->createElement('Override');
    $XMLType->setAttribute('PartName', '/word/document.xml');
    $XMLType->setAttribute('ContentType', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml');
    $XMLTypes->appendChild($XMLType);
     
     
    $rels = new DOMDocument('1.0', 'utf-8');
     
    $XMLRels = $rels->createElement('Relationships');
    $XMLRels->setAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
    $rels->appendChild($XMLRels);
     
    $XMLRel = $rels->createElement('Relationship');
    $XMLRel->setAttribute('Id', 'rId1');
    $XMLRel->setAttribute('Type', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument');
    $XMLRel->setAttribute('Target', 'word/document.xml');
    $XMLRels->appendChild($XMLRel);
     
     
    $word = new DOMDocument('1.0', 'utf-8');
     
    $XMLDocument = $word->createElement('w:document');
    $XMLDocument->setAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main');
    $word->appendChild($XMLDocument);
     
    $XMLBody = $word->createElement('w:body');
    $XMLDocument->appendChild($XMLBody);
     
    $XMLParagraph = $word->createElement('w:p');
    $XMLBody->appendChild($XMLParagraph);
     
    $XMLRun = $word->createElement('w:r');
    $XMLParagraph->appendChild($XMLRun);
     
    $XMLText = $word->createElement('w:t', utf8_encode("Hello world!"));
    $XMLRun->appendChild($XMLText);
     
     
    $document = new ZipArchive();
    $document->open('hello-world.docx', ZIPARCHIVE::CREATE);
     
    $document->addFromString('[Content_Types].xml', $types->saveXML());
    $document->addFromString('_rels/.rels', $rels->saveXML());
    $document->addFromString('word/document.xml', $word->saveXML());
     
    $document->close();
     
    ?>
    J'ai donc juste changé cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $document->open('hello-world.docx', ZIPARCHIVE::CREATE);
    par rapport au code d'origine. (d'ailleur petite parenthèse je pense qu'il serait pertinent de mettre une petite astérisque dans la FAQ pour expliquer que si le document n'existe pas déja, il faut remplacer le ZIPARCHIVE::OVERWRITE par ZIPARCHIVE::CREATE, ca pourra faire gagner un peu de temps au novice de mon genre )

    Le script génère bien un fichier hello-world.docx, mais impossible de l'ouvrir, j'ai une erreur qui me dit que j'ai un problème avec le 'contents'.

    Quand je renomme mon docx en zip et que j'essaie de décompresser le dossier, je n'arrive pas à décompresser le fichier [Content_Types].xml. J'ai un échec CRC.
    Ma config: apache 2.0.63; php 5.2.8

    Dans mon php.ini, mes extension php_zip.dll, xsl.dll sont bien activées.

    Si quelqu'un a une idée elle est la bienvenue.

    Merci par avance,

    Vincent

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Par défaut
    Bonjour,

    Je réponds à la question que j'avais soulevée. Il s'agissait d'un bug de la version de php que j'utilisais (5.2.8). J'ai installé la dernière version 5.2.12 et tout va pour le mieux dans le meilleur des mondes.

    J'espère que cette info servira à quelqu'un.

    A bientot,

    Vincent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de génération de fichier EXCEL
    Par westside-99 dans le forum Jasper
    Réponses: 2
    Dernier message: 13/07/2009, 11h30
  2. Erreur lors de la génération du fichier Hibernate Maping File
    Par Bateau_Ivre dans le forum Hibernate
    Réponses: 3
    Dernier message: 16/05/2008, 15h54
  3. Réponses: 5
    Dernier message: 01/04/2008, 13h00
  4. Réponses: 6
    Dernier message: 19/06/2006, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo