2010-11-24 4 views
2

On m'a demandé de créer un site où certains utilisateurs peuvent télécharger des documents Microsoft Word, alors que d'autres peuvent ensuite rechercher des documents téléchargés qui contiennent certains mots-clés. Le site serait assis sur un serveur Linux exécutant PHP et MySQL. J'essaie actuellement de savoir si et comment je peux gratter ce texte à partir des documents. Si quelqu'un peut suggérer un bon moyen de faire cela, il serait très apprécié.Comment puis-je graver du texte de document MS Word sur un serveur Linux?

+0

Quelles versions de Word? L'ancien format .DOC ou les nouveaux formats XML, ou les deux? L'utilisation d'une instance OpenOffice sans tête sur votre serveur serait-elle une option? –

+0

Idéalement, il devrait être en mesure de gérer tout ce que les utilisateurs lui chuck, donc toute version de mot si possible. J'ai déjà utilisé OOo une fois dans le passé pour convertir des docs en HTML, et cela pourrait être une bonne option. Mon principal souci est que l'appeler à partir d'un script de serveur peut utiliser trop de ressources. –

Répondre

2

Voici un bon exemple en utilisant catdoc:

function catdoc_string($str) 
{ 
    // requires catdoc 

    // write to temp file 
    $tmpfname = tempnam ('/tmp','doc'); 
    $handle = fopen($tmpfname,'w'); 
    fwrite($handle,$a); 
    fclose($handle); 

    // run catdoc 
    $ret = shell_exec('catdoc -ab '.escapeshellarg($tmpfname) .' 2>&1'); 

    // remove temp file 
    unlink($tmpfname); 

    if (preg_match('/^sh: line 1: catdoc/i',$ret)) { 
     return false; 
    } 

    return trim($ret); 
} 

function catdoc_file($fname) 
{ 
    // requires catdoc 

    // run catdoc 
    $ret = shell_exec('catdoc -ab '.escapeshellarg($fname) .' 2>&1'); 

    if (preg_match('/^sh: line 1: catdoc/i',$ret)) { 
     return false; 
    } 

    return trim($ret); 
} 

Source

+0

Cool qui semble être capable de faire l'affaire. Je vais regarder dedans. Merci –

4

texte Grattage du nouveau format docx est trivial. Le fichier lui-même est juste un fichier zip, et si vous regardez à l'intérieur d'un, vous trouverez un tas de fichiers XML. Le texte est contenu dans word/document.xml dans ce fichier zip, et tout le texte réel entré par l'utilisateur apparaîtra dans < w: t > tags. Si vous extrayez tout le texte apparaissant dans les balises < w: t >, vous aurez éraflé le document.

+0

Merci pour l'explication sur docx. catdoc ne fonctionne pas avec les fichiers docx, donc j'utilise un combo de cela, et un peu bash qui fait ce que vous avez trouvé ici: http://stackoverflow.com/questions/1184747/rtf-doc-docx-text- extraction-en-programme-écrit-en-c-qt –

+0

Vous pourriez vouloir se méfier de l'utilisation de tels scripts simples pour analyser XML ... analyser XML est très facile, mais le faire avec un script bash ou regex pourrait causer des maux de tête si (pour une raison quelconque) il y a des trucs bizarres qui flottent dans ces tags w: t. – ZoFreX

Questions connexes