Créer un document Word en utilisant PHP sous Linux [fermé]

quelles sont les solutions disponibles pour PHP pour créer un document word dans un environnement linux?

58
demandé sur Donald Duck 2008-09-24 05:52:26

10 réponses

réel documents Word

si vous avez besoin de produire de" vrais " documents Word, vous avez besoin D'un serveur Web Windows et de COM automation. Je recommande fortement L'article de Joël sur ce sujet.

fake en-têtes HTTP pour tromper Word en ouvrant raw HTML

une alternative assez courante (mais peu fiable) est:

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment; filename=document_name.doc");

echo "<html>";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
echo "<body>";
echo "<b>Fake word document</b>";
echo "</body>";
echo "</html>"

assurez-vous de ne pas utiliser des feuilles de style externes. Tout devrait être dans le même dossier.

notez que cela ne pas envoyer un document Word réel. Il se contente de navigateurs astuces en offrant comme Télécharger et de défaut à une extension de fichier .doc . Les anciennes versions de Word peuvent souvent ouvrir ceci sans aucun message d'avertissement / de sécurité, et juste importer le HTML brut dans Word. L'envoi par PHP de cet en-tête Content-Type ne constitue pas un vrai format de fichier conversion.

32
répondu Sergey Kornilov 2015-06-07 06:49:18

PHPWord peut générer des documents Word au format docx. Il peut également utiliser un existant .fichier docx en tant que template-les variables template peuvent être ajoutées au document dans le format ${varname}

il a une licence LGPL et les exemples qui sont venus avec le code ont bien fonctionné pour moi.

27
répondu Highly Irregular 2011-11-08 03:58:37

OpenOffice modèles + OOo interface de ligne de commande.

  1. créer manuellement un modèle ODT avec des espaces réservés, comme [%value-to-replace%]
  2. lors de l'instanciation du modèle avec des données réelles en PHP, décompressez le modèle ODT (C'est un XML zippé), et exécutez contre le XML le remplacement textuel des placeholders avec les valeurs réelles.
  3. Zip ODT retour
  4. exécuter la conversion ODT - > DOC via Interface en ligne de commande OpenOffice.

il y a des outils et des bibliothèques disponibles pour faciliter chacune de ces étapes.

peut aider.

20
répondu Ivan Krechetov 2008-09-25 08:05:05

de loin la façon la plus facile de créer des fichiers DOC sur Linux, en utilisant PHP est avec le composant Zend Framework phpLiveDocx .

du site Web du projet:

" phpLiveDocx permet aux développeurs de générer des documents en combinant des données structurées à partir de PHP avec un modèle, créé dans un traitement de texte. Le document résultant peut être sauvegardé sous forme de fichier PDF, DOCX, DOC ou RTF. Le concept est le même qu'avec mail-merge."

10
répondu Bhargav Rao 2017-05-28 19:49:05

OpenTBS peut créer des documents dynamiques DOCX en PHP en utilisant la technique des gabarits.

pas besoin de fichiers temporaires, pas de lignes de commande, tout en PHP.

Il peut ajouter ou supprimer des images. Le document créé peut être produit sous la forme D'un téléchargement HTML, d'un fichier sauvegardé sur le serveur ou d'un contenu binaire en PHP.

il peut aussi fusionner des fichiers OpenDocument (ODT, ODS, ODF, ...)

http://www.tinybutstrong.com/opentbs.php

7
répondu Skrol29 2016-01-27 00:14:56

suite à la réponse D'Ivan Krechetov, voici une fonction qui fusionne le courrier (en fait, il suffit de remplacer le texte) pour docx et odt, sans avoir besoin d'une bibliothèque supplémentaire.

function mailMerge($templateFile, $newFile, $row)
{
  if (!copy($templateFile, $newFile))  // make a duplicate so we dont overwrite the template
    return false; // could not duplicate template
  $zip = new ZipArchive();
  if ($zip->open($newFile, ZIPARCHIVE::CHECKCONS) !== TRUE)
    return false; // probably not a docx file
  $file = substr($templateFile, -4) == '.odt' ? 'content.xml' : 'word/document.xml';
  $data = $zip->getFromName($file);
  foreach ($row as $key => $value)
    $data = str_replace($key, $value, $data);
  $zip->deleteName($file);
  $zip->addFromString($file, $data);
  $zip->close();
  return true;
}

remplace [Nom de la personne] avec Mina et [nom de famille de la personne] avec Mooo:

$replacements = array('[Person Name]' => 'Mina', '[Person Last Name]' => 'Mooo');
$newFile = tempnam_sfx(sys_get_temp_dir(), '.dat');
$templateName = 'personinfo.docx';
if (mailMerge($templateName, $newFile, $replacements))
{
  header('Content-type: application/msword');
  header('Content-Disposition: attachment; filename=' . $templateName);
  header('Accept-Ranges: bytes');
  header('Content-Length: '. filesize($file));
  readfile($newFile);
  unlink($newFile);
}

Attention, Cette fonction peut corrompre le document si la chaîne à remplacer est trop générale. Essayez d'utiliser des chaînes de remplacement verbeuses comme [nom de la personne].

6
répondu Matiaan 2011-12-08 15:16:18

le projet Apache dispose d'une bibliothèque appelée POI qui peut être utilisée pour générer des fichiers MS Office. C'est une bibliothèque Java, mais l'avantage est qu'il peut fonctionner sur Linux sans aucun problème. Cette bibliothèque a ses limites, mais elle peut faire le travail pour vous, et il est probablement plus simple à utiliser que d'essayer D'exécuter Word.

une autre option serait OpenOffice mais je ne peux pas vraiment le recommander car je ne l'ai jamais utilisé.

3
répondu Mr. Shiny and New 安宇 2008-09-24 14:38:32
<?php
function fWriteFile($sFileName,$sFileContent="No Data",$ROOT)
    {
        $word = new COM("word.application") or die("Unable to instantiate Word");
        //bring it to front
        $word->Visible = 1;
        //open an empty document
        $word->Documents->Add();
        //do some weird stuff
        $word->Selection->TypeText($sFileContent);
        $word->Documents[1]->SaveAs($ROOT."/".$sFileName.".doc");
        //closing word
        $word->Quit();
        //free the object
        $word = null;
        return $sFileName;
    }
?>



<?php
$PATH_ROOT=dirname(__FILE__);
$Return ="<table>";
$Return .="<tr><td>Row[0]</td></tr>";
 $Return .="<tr><td>Row[1]</td></tr>";
$sReturn .="</table>";
fWriteFile("test",$Return,$PATH_ROOT);
?> 
3
répondu hoang 2010-11-30 09:46:13

il y a 2 options pour créer des documents word de qualité. Utilisez COM pour communiquer avec word (cela nécessite au moins un serveur php windows). Utilisez openoffice et son API pour créer et sauvegarder des documents au format word.

0
répondu DreamWerx 2008-09-24 07:33:10

regardez les documents de PHP COM (les commentaires sont utiles) http://us3.php.net/com

0
répondu JREAM 2010-11-26 15:45:38