


原理:com作为PHP的一个扩展类,安装过office的服务器会自动调用word.application的com,可以自动生成文档,
使用官方实例:
<?php // starting word $word = new COM("word.application") or die("Unable to instantiate Word"); echo "Loaded Word, version {$word->Version}\n"; //bring it to front $word->Visible = 1; //open an empty document $word->Documents->Add(); //do some weird stuff $word->Selection->TypeText("This is a test..."); $word->Documents[1]->SaveAs("Useless test.doc"); //closing word $word->Quit(); //free the object $word = null; ?>
个人建议:com实例后的方法都需要查找官方文档才知道什么意思,编辑器没有代码提示,非常不方便,另外这个效率也不是很高,不推荐使用
利用PHP将内容写入doc文件之中
这个方法又可以分为两种方法
生成mht格式(和HTML很相似)写入word
纯HTML格式写入word
生成mht格式(和HTML很相似)写入word
/** * 根据HTML代码获取word文档内容 * 创建一个本质为mht的文档,该函数会分析文件内容并从远程下载页面中的图片资源 * 该函数依赖于类MhtFileMaker * 该函数会分析img标签,提取src的属性值。但是,src的属性值必须被引号包围,否则不能提取 * * @param string $content HTML内容 * @param string $absolutePath 网页的绝对路径。如果HTML内容里的图片路径为相对路径,那么就需要填写这个参数,来让该函数自动填补成绝对路径。这个参数最后需要以/结束 * @param bool $isEraseLink 是否去掉HTML内容中的链接 */ function getWordDocument($content ,$absolutePath ="" ,$isEraseLink = true ) { $mht =new MhtFileMaker(); if ($isEraseLink) $content = preg_replace('/<a\s*.*?\s*>(\s*.*?\s*)<\/a>/i' ,'$1' ,$content); //去掉链接 $images =array(); $files =array(); $matches =array(); //这个算法要求src后的属性值必须使用引号括起来 if ( preg_match_all('/<img src="/static/imghwm/default1.png" data-src="http://www.php10086.com/wp-content/themes/WPortal-Blue/images/logo.gif" class="lazy" [.\n]*?src\s*?=\s*?[\"\'](.*?)[\"\'](.*?)\/ alt="Detailed introduction to the sample code of three ways to generate word in PHP" >/i',$content ,$matches ) ) { $arrPath =$matches[1]; for ($i=0;$i<count($arrPath);$i++) { $path =$arrPath[$i]; $imgPath = trim($path ); if ($imgPath !="" ) { $files[] =$imgPath; if(substr($imgPath,0,7) == 'http://') { //绝对链接,不加前缀 } else { $imgPath =$absolutePath.$imgPath; } $images[] =$imgPath; } } } $mht->AddContents("tmp.html",$mht->GetMimeType("tmp.html"),$content); for ($i=0;$i<count($images);$i++) { $image =$images[$i]; if ( @fopen($image ,'r') ) { $imgcontent = @file_get_contents($image ); if ($content ) $mht->AddContents($files[$i],$mht->GetMimeType($image),$imgcontent); } else { echo "file:".$image." not exist!<br />"; } } return $mht->GetFile(); }
使用方法:远程调用这个函数的主要功能其实就是分析HTML代码中的所有图片地址,并且依次下载下来。获取到了图片的内容以后,调用MhtFileMaker类,将图片添加到mht文件中。具体的添加细节,封装在MhtFileMaker类中了。
url= http://www.***.com; $content =file_get_contents($url); $fileContent = getWordDocument($content,"http://www.yoursite.com/Music/etc/"); $fp =fopen("test.doc",'w'); fwrite($fp,$fileContent); fclose($fp);
本地生成调用:其中,$content变量应该是HTML源代码,后面的链接应该是能填补HTML代码中图片相对路径的URL地址
header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); $wordStr = 'PHP淮北的个人网站--PHP10086.com'; $fileContent = getWordDocument($wordStr); $fileName = iconv("utf-8", "GBK", ‘PHP淮北’ . '_'. $intro . '_' . rand(100, 999)); header("Content-Type: application/doc"); header("Content-Disposition: attachment; filename=" . $fileName . ".doc"); echo $fileContent;
注意,在使用这个函数之前,您需要先包含类MhtFileMaker,这个类可以帮助我们生成Mht文档。
<?php /*********************************************************************** Class: Mht File Maker Version: 1.2 beta Date: 02/11/2007 Author: Wudi <wudicgi@yahoo.de> Description: The class can make .mht file. ***********************************************************************/ class MhtFileMaker{ var $config =array(); var $headers =array(); var $headers_exists =array(); var $files =array(); var $boundary; var $dir_base; var $page_first; function MhtFile($config =array()){ } function SetHeader($header){ $this->headers[] =$header; $key =strtolower(substr($header, 0, strpos($header,':'))); $this->headers_exists[$key] = TRUE; } function SetFrom($from){ $this->SetHeader("From: $from"); } function SetSubject($subject){ $this->SetHeader("Subject: $subject"); } function SetDate($date = NULL, $istimestamp = FALSE){ if ($date == NULL) { $date = time(); } if ($istimestamp == TRUE) { $date =date('D, d M Y H:i:s O',$date); } $this->SetHeader("Date: $date"); } function SetBoundary($boundary = NULL){ if ($boundary == NULL) { $this->boundary ='--' .strtoupper(md5(mt_rand())) .'_MULTIPART_MIXED'; }else { $this->boundary =$boundary; } } function SetBaseDir($dir){ $this->dir_base =str_replace("\\","/",realpath($dir)); } function SetFirstPage($filename){ $this->page_first =str_replace("\\","/",realpath("{$this->dir_base}/$filename")); } function AutoAddFiles(){ if (!isset($this->page_first)) { exit ('Not set the first page.'); } $filepath =str_replace($this->dir_base,'',$this->page_first); $filepath ='http://mhtfile' .$filepath; $this->AddFile($this->page_first,$filepath, NULL); $this->AddDir($this->dir_base); } function AddDir($dir){ $handle_dir = opendir($dir); while ($filename = readdir($handle_dir)) { if (($filename!='.') && ($filename!='..') && ("$dir/$filename"!=$this->page_first)) { if (is_dir("$dir/$filename")) { $this->AddDir("$dir/$filename"); }elseif (is_file("$dir/$filename")) { $filepath =str_replace($this->dir_base,'',"$dir/$filename"); $filepath ='http://mhtfile' .$filepath; $this->AddFile("$dir/$filename",$filepath, NULL); } } } closedir($handle_dir); } function AddFile($filename,$filepath = NULL,$encoding = NULL){ if ($filepath == NULL) { $filepath =$filename; } $mimetype =$this->GetMimeType($filename); $filecont =file_get_contents($filename); $this->AddContents($filepath,$mimetype,$filecont,$encoding); } function AddContents($filepath,$mimetype,$filecont,$encoding = NULL){ if ($encoding == NULL) { $filecont =chunk_split(base64_encode($filecont), 76); $encoding ='base64'; } $this->files[] =array('filepath' =>$filepath, 'mimetype' =>$mimetype, 'filecont' =>$filecont, 'encoding' =>$encoding); } function CheckHeaders(){ if (!array_key_exists('date',$this->headers_exists)) { $this->SetDate(NULL, TRUE); } if ($this->boundary == NULL) { $this->SetBoundary(); } } function CheckFiles(){ if (count($this->files) == 0) { return FALSE; }else { return TRUE; } } function GetFile(){ $this->CheckHeaders(); if (!$this->CheckFiles()) { exit ('No file was added.'); } $contents = implode("\r\n",$this->headers); $contents .="\r\n"; $contents .="MIME-Version: 1.0\r\n"; $contents .="Content-Type: multipart/related;\r\n"; $contents .="\tboundary=\"{$this->boundary}\";\r\n"; $contents .="\ttype=\"" .$this->files[0]['mimetype'] . "\"\r\n"; $contents .="X-MimeOLE: Produced By Mht File Maker v1.0 beta\r\n"; $contents .="\r\n"; $contents .="This is a multi-part message in MIME format.\r\n"; $contents .="\r\n"; foreach ($this->filesas $file) { $contents .="--{$this->boundary}\r\n"; $contents .="Content-Type: $file[mimetype]\r\n"; $contents .="Content-Transfer-Encoding: $file[encoding]\r\n"; $contents .="Content-Location: $file[filepath]\r\n"; $contents .="\r\n"; $contents .=$file['filecont']; $contents .="\r\n"; } $contents .="--{$this->boundary}--\r\n"; return $contents; } function MakeFile($filename){ $contents =$this->GetFile(); $fp =fopen($filename,'w'); fwrite($fp,$contents); fclose($fp); } function GetMimeType($filename){ $pathinfo =pathinfo($filename); switch ($pathinfo['extension']) { case 'htm':$mimetype ='text/html';break; case 'html':$mimetype ='text/html';break; case 'txt':$mimetype ='text/plain';break; case 'cgi':$mimetype ='text/plain';break; case 'php':$mimetype ='text/plain';break; case 'css':$mimetype ='text/css';break; case 'jpg':$mimetype ='image/jpeg';break; case 'jpeg':$mimetype ='image/jpeg';break; case 'jpe':$mimetype ='image/jpeg';break; case 'gif':$mimetype ='image/gif';break; case 'png':$mimetype ='image/png';break; default:$mimetype ='application/octet-stream';break; } return $mimetype; } } ?>
2.纯HTML格式写入word点评:这种方法的缺点是不支持批量生成下载,因为一个页面只能有一个header,(无论远程使用还是本地生成声明header页面只能输出一个header),即使你循环生成,结果还是只有一个word生成(当然你可以修改上面的方式来实现)
原理:
利用ob_start把html页面先存储起来(解决一下页面多个header问题,可以批量生成),然后在写入doc文档内容利用
代码:
<?php class word { function start() { ob_start(); echo '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">'; } function save($path) { echo "</html>"; $data = ob_get_contents(); ob_end_clean(); $this->wirtefile ($path,$data); } function wirtefile ($fn,$data) { $fp=fopen($fn,"wb"); fwrite($fp,$data); fclose($fp); } }
$html = ' <table width=600 cellpadding="6" cellspacing="1" bgcolor="#336699"> <tr bgcolor="White"> <td>PHP10086</td> <td><a href="http://www.php10086.com" target="_blank" >http://www.php.cn/;/a></td> </tr> <tr bgcolor="red"> <td>PHP10086</td> <td><a href="http://www.php10086.com" target="_blank" >http://www.php.cn/;/a></td> </tr> <tr bgcolor="White"> <td colspan=2 > PHP10086<br> 最靠谱的PHP技术博客分享网站 <img src="/static/imghwm/default1.png" data-src="http://www.php10086.com/wp-content/themes/WPortal-Blue/images/logo.gif" class="lazy" alt="Detailed introduction to the sample code of three ways to generate word in PHP" > </td> </tr> </table> '; //批量生成 for($i=1;$i<=3;$i++){ $word =new word(); $word->start(); //$html = "aaa".$i; $wordname ='PHP淮北的个人网站--PHP10086.com'.$i.".doc"; echo $html; $word->save($wordname); ob_flush();//每次执行前刷新缓存 flush(); }
The above is the detailed content of Detailed introduction to the sample code of three ways to generate word in PHP. For more information, please follow other related articles on the PHP Chinese website!

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.
