Heim > Backend-Entwicklung > PHP-Tutorial > php 生成 导出word(可包含图片)的代码

php 生成 导出word(可包含图片)的代码

WBOY
Freigeben: 2016-07-25 09:04:06
Original
1209 Leute haben es durchsucht
  1. /***********************************************************************

  2. Class: Mht File Maker
  3. Version: 1.2 beta
  4. Link:bbs.it-home.org
  5. Author: Wudi
  6. Description: The class can make .mht file.
  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 = strtolower(substr($header, 0, strpos($header, ':')));
  21. $this->headers_exists[$key] = TRUE;
  22. }
  23. function SetFrom($from){

  24. $this->SetHeader("From: $from");
  25. }
  26. function SetSubject($subject){

  27. $this->SetHeader("Subject: $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 ('Not set the first page.');
  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. 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. $filepath = '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 ('No file was added.');
  112. }
  113. $contents = implode("rn", $this->headers);
  114. $contents .= "rn";
  115. $contents .= "MIME-Version: 1.0rn";
  116. $contents .= "Content-Type: multipart/related;rn";
  117. $contents .= "tboundary="{$this->boundary}";rn";
  118. $contents .= "ttype="" . $this->files[0]['mimetype'] . ""rn";
  119. $contents .= "X-MimeOLE: Produced By Mht File Maker v1.0 betarn";
  120. $contents .= "rn";
  121. $contents .= "This is a multi-part message in MIME format.rn";
  122. $contents .= "rn";
  123. foreach ($this->files as $file) {
  124. $contents .= "--{$this->boundary}rn";
  125. $contents .= "Content-Type: $file[mimetype]rn";
  126. $contents .= "Content-Transfer-Encoding: $file[encoding]rn";
  127. $contents .= "Content-Location: $file[filepath]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'; break;
  155. default: $mimetype = 'application/octet-stream'; break;
  156. }
  157. return $mimetype;
  158. }
  159. }
  160. ?>
复制代码

2、导出word文件 exportdoc.php

  1. /**

  2. * 根据html代码获取word文档内容
  3. * 创建一个本质为mht的文档,该函数会分析文件内容并从远程下载页面中的图片资源
  4. * 该函数依赖于类MhtFileMaker
  5. * 该函数会分析img标签,提取src的属性值。但是,src的属性值必须被引号包围,否则不能提取
  6. *
  7. * @param string $content HTML内容
  8. * @param string $absolutePath 网页的绝对路径。如果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('/php 生成 导出word(可包含图片)的代码 /i',$content ,$matches ) )
  22. {
  23. $arrPath = $matches[1];
  24. for ( $i=0;$i{
  25. $path = $arrPath[$i];
  26. $imgPath = trim( $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{

  44. $image = $images[$i];
  45. if ( @fopen($image , 'r') )
  46. {
  47. $imgcontent = @file_get_contents( $image );
  48. if ( $content )
  49. $mht->AddContents($files[$i],$mht->GetMimeType($image),$imgcontent);
  50. }
  51. else
  52. {
  53. echo "file:".$image." not exist!
    ";
  54. }
  55. }
  56. return $mht->GetFile();

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


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage