php 抓取网页生成图片(牢骚发完了,正式写博客吧(PHP生成word原理))

优采云 发布时间: 2022-02-16 11:00

  php 抓取网页生成图片(牢骚发完了,正式写博客吧(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>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线