php 抓取网页生成图片(牢骚发完了,正式写博客吧(PHP生成word原理))
优采云 发布时间: 2022-02-16 11:00php 抓取网页生成图片(牢骚发完了,正式写博客吧(PHP生成word原理))
概括:
最近在工作中遇到了生成word的问题
现在总结一下生成词的三种方法。
btw:好像在博客园发博客,只要标题有php,好像点击量不是很高(兄弟,我标题里还有php),我没有知道为什么,估计博客园里的网络技术高手比较多。Java、.net、php被比作程序员的闺蜜,那么java就是甲骨文家族的淑女,.net就是微软的名门望族,PHP就是草根下的村姑。怎么可能。. 吐槽完了,正式写博客吧
PHP中生成word的原理是利用Windows下的com组件使用PHP将内容写入doc文件。
原理:com是PHP的扩展类。安装office的服务器会自动调用word.application的com,自动生成文档。PHP 官方文档手册:
使用官方示例:
个人建议:com实例后面的方法需要查官方文档才知道是什么意思。编辑器没有代码提示,很不方便。另外,效率不是很高,所以不建议使用。
使用PHP将内容写入doc文件,此方法可分为生成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('/(\s*.*?\s*)/i' , '$1' , $content); //去掉链接
$images = array();
$files = array();
$matches = array();
//这个算法要求src后的属性值必须使用引号括起来
if ( preg_match_all('/GetMimeType("tmp.html"),$content);
for ( $i=0;$iAddContents($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淮北的个人网站';
$fileContent = getWordDocument($wordStr);
$fileName = iconv("utf-8", "GBK", 'PHP淮北' . '_'. $intro . '_' . rand(100, 999));
header("内容类型:应用程序/文档");
header("内容配置:附件;文件名=".$fileName.".doc");
回声$文件内容;
注意在使用这个函数之前,需要收录类MhtFileMaker,这个类可以帮助我们生成Mht文件。
点评:这种方式的缺点是不支持批量生成和下载,因为一个页面只能有一个header,(不管是远程使用还是本地生成,声明header页面只能输出一个header),即使你在循环中生成它,结果仍然只有一个单词。生成(当然可以修改上面的方法来实现)
2.以纯HTML格式写word
原则:
先用ob_start存放html页面(解决页面多header的问题,可以批量生成),然后在写doc文档内容的时候使用。
代码:
<p>