it-swarm.com.de

Erstellen Sie ein Word-Dokument mit PHP unter Linux

Welche Lösungen gibt es für PHP), um ein Word-Dokument in einer Linux-Umgebung zu erstellen?

59
TechLearner

echte Word-Dokumente

Wenn Sie "echte" Word-Dokumente erstellen möchten, benötigen Sie einen Windows-basierten Webserver und eine COM-Automatisierung. Ich kann Joels Artikel zu diesem Thema nur empfehlen.

fake HTTP-Header, mit denen Word dazu gebracht wird, unformatiertes HTML zu öffnen

Eine häufige (aber unzuverlässige) Alternative ist:

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>"

Stellen Sie sicher, dass Sie keine externen Stylesheets verwenden. Alles sollte in der gleichen Datei sein.

Beachten Sie, dass dadurch kein tatsächliches Word-Dokument gesendet wird . Browser werden lediglich dazu verleitet, es als Download anzubieten und standardmäßig ein .doc Dateierweiterung. Ältere Versionen von Word öffnen dies häufig ohne Warnung/Sicherheitsmeldung und importieren einfach das unformatierte HTML in Word. PHP sendend sendend das irreführende Content-Type Header stellt keine echte Dateiformatkonvertierung dar.

33
Sergey Kornilov

PHPWord kann Word-Dokumente im docx-Format erzeugen. Es kann auch eine vorhandene .docx-Datei als Vorlage verwenden - Vorlagenvariablen können dem Dokument im Format $ {varname} hinzugefügt werden.

Es hat eine LGPL-Lizenz und die Beispiele, die mit dem Code geliefert wurden, funktionierten gut für mich.

29

OpenOffice-Vorlagen + OOo Befehlszeilenschnittstelle.

  1. Erstellen Sie manuell eine ODT-Vorlage mit Platzhaltern wie [% value-to-replace%]
  2. Wenn Sie die Vorlage mit echten Daten in PHP instanziieren, entpacken Sie die Vorlage ODT (es ist eine gezippte XML) und führen Sie gegen die XML den textuellen Ersatz der Platzhalter durch die tatsächlichen Werte aus.
  3. Zippen Sie den ODT zurück
  4. Führen Sie den Konvertierungs-ODT -> DOC über die OpenOffice-Befehlszeilenschnittstelle aus.

Es stehen Tools und Bibliotheken zur Verfügung, um diese Schritte zu vereinfachen.

Vielleicht hilft das.

20
Ivan Krechetov

Mit der Zend Framework-Komponente phpLiveDocx lassen sich DOC Dateien unter Linux mit PHP bei weitem am einfachsten erstellen.

Von der Projektwebsite:

"Mit phpLiveDocx können Entwickler Dokumente generieren, indem sie strukturierte Daten aus PHP mit einer Vorlage kombinieren, die in einem Textverarbeitungsprogramm erstellt wurde. Das resultierende Dokument kann als PDF, DOCX, DOC oder RTF gespeichert werden. Datei. Das Konzept ist das gleiche wie beim Seriendruck. "

10
Leo Bonnafe

OpenTBS kann dynamische DOCX-Dokumente in PHP unter Verwendung der Technik von Vorlagen erstellen.

Keine temporären Dateien erforderlich, keine Befehlszeilen, alles in PHP.

Es kann Bilder hinzufügen oder löschen. Das erstellte Dokument kann als HTML-Download, auf dem Server gespeicherte Datei oder als binärer Inhalt in PHP erstellt werden.

Es kann auch OpenDocument-Dateien zusammenführen (ODT, ODS, ODF, ...)

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

7
Skrol29

Nach der Antwort von Ivan Krechetov folgt hier eine Funktion, die das Zusammenführen von E-Mails (eigentlich nur einfaches Ersetzen von Text) für docx und odt durchführt, ohne dass eine zusätzliche Bibliothek erforderlich ist.

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;
}

Dies ersetzt [Personenname] durch Mina und [Personenname] durch 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);
}

Beachten Sie, dass diese Funktion das Dokument beschädigen kann, wenn die zu ersetzende Zeichenfolge zu allgemein ist. Versuchen Sie, ausführliche Ersatzzeichenfolgen wie [Personenname] zu verwenden.

6
Matiaan

Das Apache-Projekt verfügt über eine Bibliothek mit dem Namen POI , mit der MS Office-Dateien generiert werden können. Es ist eine Java Bibliothek, aber der Vorteil ist, dass es ohne Probleme unter Linux laufen kann. Diese Bibliothek hat ihre Grenzen, kann aber die Arbeit für Sie erledigen und ist wahrscheinlich einfacher zu benutzen als zu versuchen Word ausführen.

Eine andere Option wäre OpenOffice, aber ich kann es nicht genau empfehlen, da ich es nie benutzt habe.

<?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
hoang

Es gibt zwei Möglichkeiten, um hochwertige Word-Dokumente zu erstellen. Verwenden Sie COM, um mit Word zu kommunizieren (dies erfordert mindestens einen Windows-PHP-Server). Verwenden Sie openoffice und seine API, um Dokumente im Word-Format zu erstellen und zu speichern.

0
DreamWerx

Schauen Sie sich PHP COM-Dokumente an (Die Kommentare sind hilfreich) http://us3.php.net/com

0
JREAM