- サーバー(OpenBSD上のサーバー)にOpenOfficeをインストールし、変換を処理します。 美しい決断でしたが、時間が不足していました。
- DOCの代わりに、RTF形式のファイルを生成します。これは、形式が開いており、それを操作するためのライブラリが多数あるためです。 マイナス-完成したHTML-> RTFコンバーターが見つかりませんでした(思い出して、写真と表を保存します)。自分で書くには、ある程度の時間がかかります。
- 非常に正直ではありません-DOC拡張を使用してHTMLページを保存するために「正対」するだけです-Word 2003以降は問題なく検証されて開きます。 さらに、優れた変換速度とレイアウト全体の保存。 マイナス-この方法で画像を保存することはできません(この方法の正直さはやや不十分です)。
記述された関数の使用例:
$link="m.habrahabr.ru/post/136811/"; CreateDOC($link,"test.doc");
そして、これが関数のソースコードです:
function CreateDOC($link,$filename) { // , $base_link=$link; $base_link=explode("/",$link); unset($base_link[count($base_link)-1]); $base_link[]=""; $base_link=implode("/",$base_link); // $get_text=file_get_contents($link); // , mht $MhtFileMaker = new MhtFileMaker(); // // , , FlexIDK preg_match_all('@<img(.*)?src="([^"]+)"@ui', $get_text, $matches); foreach ($matches[4] as $img) { $img_tmp=$img; $img_tmp_old=$img; //, ? ! if (strpos($img_tmp,"http")===FALSE) $img_tmp=$base_link.$img_tmp; // $img_array=explode("//",$img_tmp); $img_name_only=$img_array[1]; $img_name_only=explode("/",$img_name_only); unset($img_name_only[0]); $img_name_only=implode("/",$img_name_only); // ( ) $get_text=str_replace($img_tmp_old,$img_name_only,$get_text); // $MhtFileMaker->AddFile($img_tmp, $img_name_only, NULL); }; // , $MhtFileMaker->AddContents("index.html","text/html",$get_text); // $MhtFileMaker->MakeFile($filename); };
当然、これに基づいてはるかに普遍的で直接的なクラスを書くことができますが、私たちの目的のためにはこれで十分でした。 主なことは、このソリューションが機能し、十分に迅速であることです。 それが誰かに役立つように願っています。
更新:結果ファイルをテストしたコメントで-通常、Microsoft Word 2003以降でのみ開きます。サードパーティ製品(OpenOfficeなど)で問題が発生します。 また、他の多くのより適切な変換方法へのリンクもコメントに含まれています。
更新2:ソースを更新-FlexIDKは、余分なキャラクターのない画像パスを選択して、より成功したレギュラーシーズンを提供しました。