php 抓取网页生成图片(牢骚发完了,正式写博客吧(PHP生成word原理))
优采云 发布时间: 2021-12-18 22:18php 抓取网页生成图片(牢骚发完了,正式写博客吧(PHP生成word原理))
概括:
最近在工作中遇到了生词问题
现在总结一下生成词的三种方法。
btw:好像在博客园里发个博客,只要标题有PHP,好像点击量不是很高(兄弟,我标题还是有PHP的)。我不知道为什么。估计博客园里的网络技术专家比较多。把Java、.net、php比作程序员的闺蜜,那么java就是甲骨文下最好的姑娘,.net微软下的名门世家,PHP就是草根下的野蛮大妈。这让我很期待 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("缓存控制:无缓存,必须重新验证");
header("Pragma: no-cache");
$wordStr ='PHP淮北个人网站';
$fileContent = getWordDocument($wordStr);
$fileName = iconv("utf-8", "GBK",'PHP淮北'.'_'.$intro.'_'.rand(100, 999));
header("内容类型:应用程序/文档");
header("Content-Disposition: 附件;文件名=".$fileName.".doc");
回声 $fileContent;
注意在使用这个函数之前,需要收录类MhtFileMaker,它可以帮助我们生成Mht文件。
点评:这种方式的缺点是不支持批量生成和下载,因为一个页面只能有一个header(无论是远程使用还是本地生成的statement header页面都只能输出一个header),即使你循环生成,结果还是只有一个字Generate(当然可以修改上面的方式来实现)
2.纯HTML格式写字
原则:
使用ob_start先存储html页面(解决页面多个header的问题,可以批量生成),然后在写入doc文档的内容时使用
代码:
<p>