PHPでの正直なDOCファイル生成

各タスクにはいくつかの解決策があります。 そして、時には、スピードのために、最も美しいものではなく、設定された目標を達成し、達成することを選択する必要があります。 そのため、あまり美しくない日には、次の機能を実装する必要がありました。サイトの各(ほぼ)ページに、DOC形式とPDF形式のコピーを自動的に生成する必要がありました。 コンテンツ内のすべてのテーブルと写真を保存します。 そして、PDFですべてが比較的単純な場合(tcpdfは私たちの友人であり兄弟)、DOCでは面倒がありました。 カットの下-この問題を解決する例。 次の解決策が思い浮かびました。 ここで、実際には、3番目のオプションから最終的なソリューションが生まれました。ドキュメントをMHT形式で作成し、それにイメージを統合して、DOC拡張機能で保存します。 ここから取られた単純なライブラリーが生成使用されました。コードは美しく多目的なふりをしていません。さらに、そのサイトに関係のない問題がありますが、主なことはそれが機能することであり、トピックを理解するのに十分です



記述された関数の使用例:



$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は、余分なキャラクターのない画像パスを選択して、より成功したレギュラーシーズンを提供しました。



All Articles