Linux環境でWordドキュメントを作成するためのPHPの利用可能なソリューションは何ですか?
「実際の」Wordドキュメントを作成する必要がある場合は、WindowsベースのWebサーバーとCOMオートメーションが必要です。このテーマについて Joelの記事 を強くお勧めします。
かなり一般的な(ただし信頼性の低い)代替手段は次のとおりです。
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>"
外部スタイルシートを使用しないでください。すべてが同じファイルにある必要があります。
これは実際のWord文書を(not送信しないことに注意してください。ブラウザをだましてダウンロードとして提供し、デフォルトで.doc
ファイル拡張子。古いバージョンのWordでは、警告/セキュリティメッセージなしでこれを開くことが多く、生のHTMLをWordにインポートするだけです。 PHP誤解を招くような送信Content-Type
ヘッダーは、実際のファイル形式変換を構成しません。
PHPWord は、docx形式のWord文書を生成できます。既存の.docxファイルをテンプレートとして使用することもできます-テンプレート変数は、$ {varname}の形式でドキュメントに追加できます
LGPLライセンスがあり、コードに付属している例はうまく機能しました。
OpenOfficeテンプレート+ OOoコマンドラインインターフェイス。
これらの各手順を簡単にするツールとライブラリが用意されています。
それが役立つかもしれません。
LinuxでDOCファイルを作成する最も簡単な方法は、PHPを使用してZend FrameworkコンポーネントphpLiveDocxを使用することです。
プロジェクトのWebサイトから:
「phpLiveDocxを使用すると、開発者はPHPからの構造化データをワードプロセッサで作成されたテンプレートと組み合わせてドキュメントを生成できます。結果のドキュメントはPDF、DOCX、DOCまたはRTFファイル。概念は差し込み印刷と同じです。 "
OpenTBS は、テンプレートの手法を使用してPHPでDOCX動的ドキュメントを作成できます。
一時ファイルもコマンドラインも不要で、すべてPHPで使用できます。
画像を追加または削除できます。作成されたドキュメントは、HTMLダウンロード、サーバーに保存されたファイル、またはPHPのバイナリコンテンツとして作成できます。
また、OpenDocumentファイル(ODT、ODS、ODFなど)をマージできます。
Ivan Krechetovの答えに続いて、docxとodtのメールマージ(実際には単純なテキスト置換)を実行する関数があります。追加のライブラリは必要ありません。
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;
}
これにより、[Person Name]はMinaに、[Person Last Name]は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);
}
置換する文字列が一般的すぎる場合、この関数はドキュメントを破損する可能性があることに注意してください。 [Person Name]のような冗長な置換文字列を使用してみてください。
Apacheプロジェクトには [〜#〜] poi [〜#〜] というライブラリがあり、MS Officeファイルの生成に使用できます。これはJavaライブラリですが、Linuxで問題なく実行できるという利点があります。このライブラリには制限がありますが、あなたのために仕事をするかもしれません。 Wordを実行します。
もう1つのオプションはOpenOfficeですが、使用したことがないため、厳密にはお勧めできません。
<?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);
?>
高品質のWord文書を作成するには、2つのオプションがあります。 COMを使用してWordと通信します(少なくともWindows PHPサーバーが必要です)。 openofficeとそのAPIを使用して、Word形式でドキュメントを作成および保存します。
PHP COMドキュメント(コメントは参考になります) http://us3.php.net/com をご覧ください。