ホームページ > バックエンド開発 > PHPチュートリアル > PHP は Word をエクスポートするコードを生成します (画像を含めることもできます)

PHP は Word をエクスポートするコードを生成します (画像を含めることもできます)

WBOY
リリース: 2016-07-25 09:04:06
オリジナル
1209 人が閲覧しました
  1. /*************************************************** *******************

  2. クラス: Mht File Maker
  3. バージョン: 1.2 beta
  4. リンク:bbs.it-home.org
  5. 作者: Wudi
  6. 説明: このクラスは .mht ファイルを作成できます。
  7. ************************************ **********************************/

  8. class MhtFileMaker{

  9. var $config = array();
  10. var $headers = array();
  11. var $headers_exists = array();
  12. var $files = array();
  13. var $boundary;
  14. var $dir_base;
  15. var $page_first;

  16. function MhtFile( $config = array()){

  17. }

  18. function SetHeader($header){

  19. $this->headers[] = $header;
  20. $key = strto lower(substr($header, 0, strpos($header, ':')));
  21. $this->headers_exists[$key] = TRUE;
  22. }

  23. function SetFrom($from){

  24. $this->SetHeader("From: $from");
  25. }

    gt;
  26. function SetSubject($subject){

  27. $this->SetHeader( "件名: $subject");
  28. }

  29. function SetDate($date = NULL, $istimestamp = FALSE){

  30. if ($date == NULL) {
  31. $date = time( );
  32. }
  33. if ($istimestamp == TRUE) {
  34. $date = date('D, d M Y H:i:s O', $date);
  35. }
  36. $this->SetHeader("Date: $ date");
  37. }

  38. function SetBoundary($boundary = NULL){

  39. if ($boundary == NULL) {
  40. $this->boundary = '--' . strtoupper(md5(mt_rand())) 。 '_MULTIPART_MIXED';
  41. } else {
  42. $this->boundary = $boundary;
  43. }
  44. }

  45. function SetBaseDir($dir){

  46. $this->dir_base = str_replace( "", "/", realpath($dir));
  47. }

  48. function SetFirstPage($filename){

  49. $this->page_first = str_replace("", "/", realpath("{$this->dir_base}/$filename"));
  50. }

  51. function AutoAddFiles(){

  52. if (!isset($this->page_first)) {
  53. exit ('最初のページを設定していません。');
  54. }
  55. $filepath = str_replace($this->dir_base, '', $this->page_first);
  56. $filepath = 'http://mhtfile' 。 $filepath;
  57. $this->AddFile($this->page_first, $filepath, NULL);
  58. $this->AddDir($this->dir_base);
  59. }

  60. < p>function AddDir($dir){
  61. $handle_dir = opendir($dir);
  62. while ($filename = readdir($handle_dir)) {
  63. if (($filename!='.') && ($filename!= '..') && ("$dir/$filename"!=$this->page_first)) {
  64. if (is_dir("$dir/$filename")) {
  65. $this->AddDir("$ dir/$filename");
  66. } elseif (is_file("$dir/$filename")) {
  67. $filepath = str_replace($this->dir_base, '', "$dir/$filename");
  68. $ファイルパス = 'http://mhtfile' 。 $filepath;
  69. $this->AddFile("$dir/$filename", $filepath, NULL);
  70. }
  71. }
  72. }
  73. closedir($handle_dir);
  74. }

  75. function AddFile($filename, $filepath = NULL, $encoding = NULL){

  76. if ($filepath == NULL) {
  77. $filepath = $filename;
  78. }
  79. $mimetype = $this->GetMimeType($filename) ;
  80. $filecont = file_get_contents($filename);
  81. $this->AddContents($filepath, $mimetype, $filecont, $encoding);
  82. }

  83. function AddContents($filepath, $mimetype, $filecont, $encoding = NULL){

  84. if ($encoding == NULL) {
  85. $filecont = chunk_split(base64_encode($filecont), 76);
  86. $encoding = 'base64';
  87. }
  88. $this ->files[] = array('filepath' => $filepath,
  89. 'mimetype' => $mimetype,
  90. 'filecont' => $filecont,
  91. 'encoding' => $encoding);
  92. }

  93. function CheckHeaders(){

  94. if (!array_key_exists('date', $this->headers_exists)) {
  95. $this->SetDate(NULL, TRUE);
  96. }
  97. if ($this->boundary == NULL) {
  98. $this->SetBoundary();
  99. }
  100. }

  101. function CheckFiles(){

  102. if (count($this ->files) == 0) {
  103. return FALSE;
  104. } else {
  105. return TRUE;
  106. }
  107. }

  108. function GetFile(){

  109. $this->CheckHeaders() ;
  110. if (!$this->CheckFiles()) {
  111. exit ('ファイルは追加されませんでした。');
  112. }
  113. $contents = implode("rn", $this->headers);
  114. $contents .= "rn";
  115. $contents .= "MIME バージョン: 1.0rn";
  116. $contents .= "Content-Type: multipart/popular;rn";
  117. $contents .= "tboundary="{$this- >境界}";rn";
  118. $contents .= "ttype="" . $this->files[0]['mimetype'] . ""rn";
  119. $contents .= "X-MimeOLE: Mht ファイルによって生成Maker v1.0 betarn";
  120. $contents .= "rn";
  121. $contents .= "これは MIME 形式のマルチパート メッセージです。rn";
  122. $contents .= "rn";
  123. foreach ($this ->ファイルを $file として) {
  124. $contents .= "--{$this->boundary}rn";
  125. $contents .= "Content-Type: $file[mimetype]rn";
  126. $contents . = "コンテンツ転送エンコーディング: $file[エンコーディング]rn";
  127. $contents .= "コンテンツの場所: $file[ファイルパス]rn";
  128. $contents .= "rn";
  129. $contents .= $file ['filecont'];
  130. $contents .= "rn";
  131. }
  132. $contents .= "--{$this->boundary}--rn";
  133. return $contents;
  134. }

  135. function MakeFile($filename){

  136. $contents = $this->GetFile();
  137. $fp = fopen($filename, 'w');
  138. fwrite($fp, $contents);
  139. fclose($fp);
  140. }

  141. function GetMimeType($filename){

  142. $pathinfo = pathinfo($filename);
  143. switch ($pathinfo['extension']) {
  144. case ' htm': $mimetype = 'text/html'; Break;
  145. case 'html': $mimetype = 'text/html'; Break;
  146. case 'txt': $mimetype = 'text/plain'; Break;
  147. case 'cgi': $mimetype = 'text/plain'; Break;
  148. case 'php': $mimetype = 'text/plain'; Break;
  149. case 'css': $mimetype = 'text/css'; Break;
  150. case 'jpg': $mimetype = 'image/jpeg'; Break;
  151. case 'jpeg': $mimetype = 'image/jpeg'; Break;
  152. case 'jpe': $mimetype = 'image/jpeg'; Break;
  153. case 'gif': $mimetype = 'image/gif'; Break;
  154. case 'png': $mimetype = 'image/png';ブレーク;
  155. デフォルト: $mimetype = 'application/octet-stream'; Break;
  156. }
  157. return $mimetype;
  158. }
  159. }
  160. ?>

复制代码

2、导出単語文件exportdoc.php

  1. /**
  2. * HTML コードに基づいて Word ドキュメントのコンテンツを取得します
  3. * 本質的に mht であるドキュメントを作成します。この関数はファイルのコンテンツを分析し、リモートの場所からページ内の画像リソースをダウンロードします。
  4. * この関数はクラス MhtFileMaker に依存します。
  5. * この関数は img タグを解析し、src の属性値を抽出します。ただし、src の属性値は引用符で囲む必要があります。そうしないと抽出できません
  6. *
  7. * @param string $content HTML コンテンツ
  8. * @param string $absolutePath Web ページの絶対パス。 HTML コンテンツ内の画像パスが相対パスの場合、関数によって絶対パスが自動的に入力されるように、このパラメータを入力する必要があります。このパラメータは /
  9. * で終わる必要があります @param bool $isEraseLink HTML コンテンツ内のリンクを削除するかどうか
  10. */
  11. include_once("docclass.php");
  12. function getWordDocument( $content , $absolutePath = "" , $isEraseLink = true )
  13. {
  14. $mht = new MhtFileMaker();
  15. if ($isEraseLink)
  16. $content = preg_replace('/(s*.*?s*)/i' , '$1' , $content); // 去掉链接

  17. $images = array();

  18. $files = array();
  19. $matches = array();
  20. //この算法はsrc後のプロパティを必ず使用します引号括起来
  21. if ( preg_match_all('//i' ,$content ,$matches ) )
  22. {
  23. $arrPath = $matches[1];
  24. for ( $i=0;$i{
  25. $path = $arrPath[$ i];
  26. $imgPath = トリム( $path );
  27. if ( $imgPath != "" )
  28. {
  29. $files[] = $imgPath;
  30. if( substr($imgPath,0,7) == 'http ://')
  31. {
  32. //绝对链接,不加前缀
  33. }
  34. else
  35. {
  36. $imgPath = $absolutePath.$imgPath;
  37. }
  38. $images[] = $imgPath;
  39. }
  40. }
  41. }
  42. $mht->AddContents("tmp.html",$mht->GetMimeType("tmp.html"),$content);

  43. for ( $i=0;$i< ;count($images);$i++)

  44. {
  45. $image = $images[$i];
  46. if ( @fopen($image , 'r') )
  47. {
  48. $imgcontent = @file_get_contents( $image );
  49. if ( $content )
  50. $mht->AddContents($files[$i],$mht->GetMimeType($image),$imgcontent);
  51. }
  52. else
  53. {
  54. echo "file:".$画像。" 存在しません!
    ";
  55. }
  56. }

  57. return $mht->GetFile();

  58. }
  59. $content=implode("",file ("http://bbs.it-home.org/print.php?id=3548"));
  60. $fileContent = getWordDocument($content,".");
  61. $fp = fopen("hugesky_word.doc" , 'w');
  62. fwrite($fp, $fileContent);
  63. fclose($fp);
  64. ?>

复制帽


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート