Home > Backend Development > PHP Tutorial > PHP generates code to export word (can include pictures)

PHP generates code to export word (can include pictures)

WBOY
Release: 2016-07-25 09:04:06
Original
1209 people have browsed it
  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. * Get word document content based on html code
  3. * Create a document that is essentially mht. This function will analyze the file content and download the image resources in the page from a remote location.
  4. * This function depends on the class MhtFileMaker.
  5. * This function will analyze the img tag. , extract the attribute value of src. However, the attribute value of src must be surrounded by quotes, otherwise it cannot be extracted
  6. *
  7. * @param string $content HTML content
  8. * @param string $absolutePath The absolute path of the web page. If the image path in the HTML content is a relative path, then you need to fill in this parameter to let the function automatically fill it into an absolute path. This parameter needs to end with /
  9. * @param bool $isEraseLink Whether to remove links in HTML content
  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 = 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. ?>

复制代码


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template