2010-07-21 6 views
3

Je dois modifier le fichier téléchargé .doc ou .docx en php. J'ai googlé mais j'ai seulement trouvé comment lire cela mais pas comme c'est. Je veux le fichier Word tel qu'il est et mettre du texte au bas de ce fichier MS Word. Comment est-ce possible que quelqu'un sait s'il vous plaît répondre.Comment modifier le fichier .doc ou .docx en php

Merci,


J'ai utilisé le code suivant: -

$w='Test'; 
$fp = fopen('c:/text.doc', 'a+'); 
fwrite($fp, $w); 
fclose($fp); 

la chaîne Il en annexe mais pas affichée dans le document Word. Lorsque j'ai changé l'extension de doc fichier à xml puis il montre la chaîne à la fin. pourquoi ne devrait-il pas apparaître dans le fichier doc.

Merci,

Répondre

2

documents au format DOCX doivent être XML (compressé), de sorte que vous pouvez essayer d'analyser et de les modifier ...

Voir here pour plus de détails sur le format.

+0

Merci pour la réponse, je suis actuellement en train de charger le fichier .doc et insérez des données dans ce fichier doc à la fin. Ensuite, insérez l'URL du fichier .doc dans la base de données. Ensuite, quand je veux ce fichier .doc, je vais télécharger cela. Si je le convertis en XML, comment ça change dans le document Word. – user343695

+0

Les documents Word sont XML.Au moins de MS Word 2007. Et même 2003 était déjà une sorte de XML mais probablement pas valide. –

0

Eh bien, je recommande d'enregistrer des fichiers au format XML. Lorsque vous écrivez un document dans MS Word, allez dans Enregistrer sous -> Autres formats -> Choisissez XML ici.

Vous serez toujours en mesure d'ouvrir le document en MS Word et il sera facile de modifier XML avec PHP DOM ou SimpleXML.

Pour ajouter un texte au bas, il vous suffit d'ajouter un nouveau w: élément p au corps XML:

<w:p w:rsidR="00CF175F" w:rsidRDefault="00CF175F"> 
<w:r> 
<w:t>New text to be added</w:t> 
</w:r> 
</w:p> 

W est un espace de noms. Pour Word 2007+ est:

http://schemas.openxmlformats.org/wordprocessingml/2006/main 

Dans le format XML plus il y a des espaces de noms différents de sorte que vous devrez regarder des pages Web MS pour trouver un est correct.

3

Pour les fichiers Docx, vous pouvez facilement utiliser un lecteur zip tel que TbsZip pour lire et éditer le sous-fichier XML principal (les fichiers Docx sont en fait des fichiers archive zip). Pour les fichiers DOC, c'est très difficile car c'est un fichier binaire.

Voici un exemple de code avec TbsZip:

<?php 

$x = "Hello World!"; 

include_once('tbszip.php'); 

$zip = new clsTbsZip(); 

// Open the document 
$zip->Open('mydoc.docx'); 
$content = $zip->FileRead('word/document.xml'); 
$p = strpos($content, '</w:body>'); 
if ($p===false) exit("Tag </w:body> not found in document."); 

// Add the text at the end 
$content = substr_replace($content, '<w:p><w:r><w:t>'.$x.'</w:t></w:r></w:p>', $p, 0); 
$zip->FileReplace('word/document.xml', $content, TBSZIP_STRING); 

// Save as a new file 
$zip->Flush(TBSZIP_FILE, 'new.docx'); 
0

J'ai même tâche à modifier .doc ou fichier .docx en php, j'ai utiliser ce code pour cela.

Référence: http://www.onlinecode.org/update-docx-file-using-php/

$full_path = 'template.docx'; 
    //Copy the Template file to the Result Directory 
    copy($template_file_name, $full_path); 

    // add calss Zip Archive 
    $zip_val = new ZipArchive; 

    //Docx file is nothing but a zip file. Open this Zip File 
    if($zip_val->open($full_path) == true) 
    { 
     // In the Open XML Wordprocessing format content is stored. 
     // In the document.xml file located in the word directory. 

     $key_file_name = 'word/document.xml'; 
     $message = $zip_val->getFromName($key_file_name);    

     $timestamp = date('d-M-Y H:i:s'); 

     // this data Replace the placeholders with actual values 
     $message = str_replace("client_full_name",  "onlinecode org",  $message); 
     $message = str_replace("client_email_address", "[email protected]", $message); 
     $message = str_replace("date_today",   $timestamp,    $message);  
     $message = str_replace("client_website",  "www.onlinecode.org", $message);  
     $message = str_replace("client_mobile_number", "+1999999999",   $message); 

     //Replace the content with the new content created above. 
     $zip_val->addFromString($key_file_name, $message); 
     $zip_val->close(); 
    } 
Questions connexes